Excel VBA 質問スレッド No.152 (解決済)

IF文の結果のセル番号の取得

投稿者 : 叶 拓巳     投稿日時 : 2021/01/03(Sun) 15:40:20     OS : Windows 10     EXCEL : Excel 2003
仕事でVBAを使いたく勉強中の初心者です。
Excelの一覧表より任意の一行を抜き出し、
色を付けて、コピーし、他シートに貼り付け、
金額を集計するという作業をしたいのですが、
検索するところまでは出来たのですが、結果の行の位置の取得方法がわかりません。
行、又はセル番号の取得方法を教えて貰えないでしょうか?
宜しくお願いします。
下記、作成中のVBAになります。


Sub L検索()
'製番=aa 工程=bb 個数=cc 図番=dd 機械=ee
Dim aa As Variant
Dim bb As String
Dim cc As Variant
Dim dd As Variant
Dim ee As Variant


With Worksheets("入力")
'2列めのセルの値を変数「製番aa」に格納
aa = .Cells(7, 1).Value
'3列めのセルの値を変数「工程bb」に格納
bb = .Cells(7, 3).Value
'4列めのセルの値を変数「個数cc」に格納
cc = .Cells(7, 2).Value
'1列めのセルの値を変数「機械ee」に格納
ee = .Cells(7, 4).Value
End With

Worksheets(ee).Activate
With Worksheets(ee)
Dim c As Variant
For Each c In Range("G2:G300")
'第一条件 製番aa
If c.Value <> aa Then
       GoTo continue
End If
'第二条件 工程bb
If c.Offset(0, 6).Value <> bb Then
       GoTo continue
End If
'第三条件 個数cc
If c.Offset(0, 3).Value <> cc Then
       GoTo continue
End If

dd = c.Offset(0, 2).Value '図番ddを取得
Dim ff As Variant
ff = c.Offset(0, 4).Value '金額ffを取得


continue:
Next


End With



Worksheets("入力").Activate
'入力シートに図番を返す
Worksheets("入力").Cells(7, 6) = dd
'入力シートに金額を返す
Worksheets("入力").Cells(7, 7) = ff

End Sub

[返信 1] Re : IF文の結果のセル番号の取得
投稿者 : EUNO     投稿日時 : 2021/01/04(Mon) 03:02:21
'2列めのセルの値を変数「製番aa」に格納
> aa = .Cells(7, 1).Value
このあたりの数値(列)はたぶん打ち間違いかと思います。

> With Worksheets(ee)
このWithステートメントは無意味というか入力ミスでしょうか。

全体的にBookを再現するのが大変なので、アドバイスが難しいかもしれません。
該当するセルのセル番地や行番号を取得したいということでしょうか。

Sub test() 'A3あたりに1を入力しておく
Dim r As Range
For Each r In Range("A1:A10") 
If r = 1 Then
MsgBox r.Address 'アドレス(セル番地)
MsgBox r.Address(RowAbsolute:=False, ColumnAbsolute:=False) '相対参照
MsgBox r.Row '行番号
MsgBox r.Column '列番号
End If
Next r
End Sub


見当違いの回答でしたらすみません。

一致するセルを探すならForEachより、FindメソッドやworksheetFunctionでVlookup関数を使う方が一般的
のような気がします。一致するセルが見つからない場合にはエラーがでるのでエラー処理は必須ですが。

[返信 2] Re : IF文の結果のセル番号の取得
投稿者 : 叶 拓巳     投稿日時 : 2021/01/04(Mon) 05:55:08
EUNOさん コメントありがとうございます。

> > '2列めのセルの値を変数「製番aa」に格納
> > aa = .Cells(7, 1).Value
> このあたりの数値(列)はたぶん打ち間違いかと思います。
ご指摘通り間違っていました。
正しくは下記になります。

With Worksheets("入力")
'1列めのセルの値を変数「製番aa」に格納
aa = .Cells(7, 1).Value
'3列めのセルの値を変数「工程bb」に格納
bb = .Cells(7, 3).Value
'4列めのセルの値を変数「個数cc」に格納
cc = .Cells(7, 4).Value
'1列めのセルの値を変数「機械ee」に格納
ee = .Cells(7, 1).Value

> > With Worksheets(ee)
> このWithステートメントは無意味というか入力ミスでしょうか。
こちらも必要の無いwithの様です。

やりたい事は
整番aaに該当する行が複数ありそれを工程bbと個数ccで絞り込んでいます。
最終的に該当した行がどこなのかを把握したい次第です。

ご記入していただいた
MsgBox r Address
をr→cに変更後、End Ifより手前に挿入しましたが上手く作動しません。

色々と試行錯誤中ですが、Findメソッドや他の方法でも複数条件の繰り返し処理は可能でしょうか?
ForEachを使った経緯ですが、3条件に該当する行を探す
場合の使い方が理解出来たのがForEachでしたので使いました。

[返信 3] Re : IF文の結果のセル番号の取得
投稿者 : EUNO     投稿日時 : 2021/01/04(Mon) 09:44:40

'1列めのセルの値を変数「製番aa」に格納
> aa = .Cells(7, 1).Value
'3列めのセルの値を変数「工程bb」に格納
> bb = .Cells(7, 3).Value
'4列めのセルの値を変数「個数cc」に格納
> cc = .Cells(7, 4).Value
'1列めのセルの値を変数「機械ee」に格納
> ee = .Cells(7, 1).Value

1列目が2回出てきています??
それはおいといて、読みやすいように直してみました。
値が一致するか判定して、一致しない場合はgotoという処理が個人的には分かりにくいと思います。

Sub L検索()

Dim aa As Variant '製番
Dim bb As String '工程
Dim cc As Variant '個数
Dim dd As Variant '図番
Dim ee As Variant '機械
Dim ff As Variant '金額

With Worksheets("入力")
aa = .Cells(7, 1).Value '1列め?のセルの値を変数「製番aa」に格納
bb = .Cells(7, 3).Value 'セルの値を変数「工程bb」に格納
cc = .Cells(7, 2).Value 'セルの値を変数「個数cc」に格納
ee = .Cells(7, 4).Value 'セルの値を変数「機械ee」に格納
End With

Worksheets(ee).Activate
Dim c As Range

For Each c In Range("G2:G200")
If c.Value = aa And c.Offset(0, 6).Value = bb And c.Offset(0, 3).Value = cc Then
dd = c.Offset(0, 2).Value '図番ddを取得
ff = c.Offset(0, 4).Value '金額ffを取得
Debug.Print c.Row
Debug.Print c.Address
End If
Next

Worksheets("入力").Activate
'入力シートに図番を返す
Worksheets("入力").Cells(7, 6) = dd
'入力シートに金額を返す
Worksheets("入力").Cells(7, 7) = ff

End Sub

[返信 4] Re : IF文の結果のセル番号の取得
投稿者 : 叶 拓巳     投稿日時 : 2021/01/04(Mon) 15:00:34
EUNOさん コメントありがとうございます。

Andを使えば一文で出来るのですね。
注釈の位置も後ろにすればかなり見易くなりました。

勉強になりました。
これで次に進むことが出来ます。
ありがとうございました!

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2021-01-27 13:00:51 )

Page
Top