こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル VBA find は別シートを検索できますでしょうか?

こんばんわ。マクロ初心者です。
皆さんいつも親切なご回答ありがとうございます。

早速ですが質問内容を記入いたします。

・ブックA を開いています。
選択している行のC列セルの値を検索キーワードにして、
ブックB 内を検索し、検索結果のセルの3つ左のセルの値を、
ブックA で選択していたセルの同じ行のO列(15列目)に入力したいです。
※ブックBをアクティベートする事無く行えますでしょうか?
(他の処理と組合わせて行い、回数も多いので、
 ブックA⇔ブックB アクティベートの往復は避けたいです。)

下のようなマクロを作成してみましたがうまくいきません。
どうかご指導よろしくお願いいたします。

---------------------------------------------------------------
dim 検索品目 as string
dim fcell as object
dim i as integer
i = Selection.Row

'選択行の3列目セルの値を変数『検索品目』に格納
検索品目 = Cells(i, 3).Value

'オブジェクト変数『fcell』に検索したセルを格納
Set fcell = Cells.Find(What:=検索品目, After:=Workbooks("ブックB.xls").Worksheets("sheet1").Range("G2"), LookAt:=xlWhole, searchorder:=xlByColumns)

'検索したセルの3行左のセルの値を変数『オーダ番号』に格納
オーダ番号 = fcell.Offset(, -3).Value

'ブック A の選択行の15列(O列)にデータ入力
Cells(i, 15) = オーダ番号

投稿日時 - 2009-08-15 23:54:15

QNo.5210301

すぐに回答ほしいです

質問者が選んだベストアンサー

>下のようなマクロを作成してみましたがうまくいきません。
どううまく行かないのか、エラーがでるのであれば
どの行ででるのかも記されると良いと思います

Findの使用方法をちゃんと理解できていないようですね
初心者にはFor~Nextの方が使いやすいのではと思います
あと、何(book、sheetなど)を対象に処理をしているのかを明確にされた方が良いと思います
これを踏まえて、コードを変更してみました

Sub test()

Dim 検索品目 As String
Dim オーダ番号 As Integer
Dim i As Long
Dim x As Long

i = ActiveCell.Row

'選択行の3列目セルの値を変数『検索品目』に格納
With Workbooks("ブックA.xls").Worksheets("sheet1")
検索品目 = .Cells(i, 3).Value
End With

'for~nextを使用した検索
With Workbooks("ブックB.xls").Worksheets("sheet1")
For x = 2 To .Range("G65536").End(xlUp).Row
If .Cells(x, 7).Value = 検索品目 Then
'検索したセルの3行左のセルの値を変数『オーダ番号』に格納
オーダ番号 = .Cells(x, 7).Offset(, -3).Value
Exit For
End If
Next
End With

'ブック A の選択行の15列(O列)にデータ入力
With Workbooks("ブックA.xls").Worksheets("sheet1")
.Cells(i, 15) = オーダ番号
End With
End Sub

参考まで

投稿日時 - 2009-08-16 01:33:07

お礼

ご回答ありがとうございます!
for-nextを使用して検索するなんて、考えもしませんでした。
その他ネストのさせ方、withの使い方等、とても勉強になりました。
やりたかった事が実現できました。
本当にありがとうございました。

投稿日時 - 2009-08-16 02:51:50

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問