プロが教えるわが家の防犯対策術!

添付画像のように、セル("I4:I7")の値である"2022/7/7","2022/7/8","2022/7/9","2022/7/10"を、A列から検索して、一致する行番号(ここでの表でいう10~13行目)を取得する方法を知りたいです。以下のようにマクロを組んでみましたが、実行時エラー '13':  型が一致しません。となり、どこを直したらいいのかわかりません。ちなみに、下のVBAの4行目の変数testをSetするところで、Range("I4")と単独のセル番号のみを指定すると、正常に"10"とメッセージが表示されます。VBAにお詳しい方、是非ともご教示願います。

Dim test
Dim FindCell As Range
Dim SarchRow As Long
Set test = Range("I4:I7")
Set FindCell = Range("A1:A13").Find(DateValue(test), LookIn:=xlFormulas, LookAt:=xlWhole)
SarchRow = FindCell.Row
MsgBox (SarchRow)

「Excle VBA Findメソッドにつ」の質問画像
教えて!goo グレード

A 回答 (3件)

こんにちは、


取り合えず、画像を見ると"2022/7/7"のようなデータではないようなので
Range("I4:I7")、Range("A1:A13")内の値が日付になる値として
DateValue(Range("I4:I7"))のように範囲内の値を取り出すことは出来ませんので、すでに回答にあるように範囲の個々の値を入れて繰り返す必要があります

For Each test In Range("I4:I7")
If IsDate(test.Value) Then
Set FindCell = Range("A1:A13").Find(DateValue(test.Value), LookIn:=xlFormulas, LookAt:=xlWhole)
SarchRow = FindCell.Row
MsgBox (SarchRow)
End If
Next

I列で探してK、L、M列に出力したいと言う事でしょうか・・・
例えば

Set FindCell = Range("A1:A13").Find(DateValue(test.Value), LookIn:=xlFormulas, LookAt:=xlWhole)
If Not FindCell Is Nothing Then
test.Offset(, 1).Resize(, 3).Value = FindCell.Offset(, 1).Resize(, 3).Value
End If
    • good
    • 1

上から順番にFindに入れるか、


初めから配列変数に入れて、
Forでループさせる。
……ってのが一般的だと思います。
    • good
    • 0

んーと。


検索値を範囲で与えている所が間違い。
一つずつ与えなきゃダメ。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
範囲で指定することはできないのですね。
改めて教えて頂きたいのですが、
例えば、売上データなど、縦に1行ずつ売上があったのみの日付が並んでいるデータがあったとして、その日付を1行ずつ、表①のような集計表から該当する日付すべてを検索するにはどのようにしたらよいでしょうか?

お礼日時:2022/07/15 15:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング