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

エクセルVBAを勉強中なのですがわからないので教えてください。やりたいことはシート1のH13に入力された日付をアクティブなシートのB列の中から検索してその行番号をメッセージボックスに出力させたいというものです。ここまでの処理は、シート1のE列には社員番号が入力されており、その社員番号を含んだシート名を全シートから検索させてアクティブにしてあります。①のコードだけがエラーになってしまいます。よろしくお願いします。

【コード】
Dim ws As Worksheet
Dim a As Long
Dim b As Long

For b = 3 To 10
a = Worksheets("シート1").Range("E" & b).Value
For Each ws In Worksheets
ws.Activate
If ws.Name Like "*" & a & "*" Then
Dim no As Long '検索されたシートに対して行う処理(シート1H13で入力された日付を検索し行を取得)
① no = Range("Worksheet("シート1").Range("H13")").Row
MsgBox no

End If
Next ws
Next b

質問者からの補足コメント

  • ダブルクォーテーションを外してみたらエラー1004のアプリケーション定義またはオブジェクト定義のエラーです。というポップがでました。変数の宣言は①のすぐ上でしてあります。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/10/13 00:40
  • 何度もすみません。検証した結果worksheetfunctionクラスのMatchプロパティを取得できませんとエラーが出てしまいます。"aa"にはWorksheet(シート1). Range(H13)を入力しています。よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/10/13 01:39

A 回答 (4件)

こんにちは!



VBAで日付を探し出すのは結構厄介です。
ネットで「VBA 日付検索」等で検索してみてください。

ちなみに今回の場合は

 Dim c As Range
 Dim wS As Worksheet
  Set wS = Worksheets("シート1")
  With ActiveSheet
   Set c = .Range("B:B").Find(what:=DateValue(wS.Range("H13")), LookIn:=xlFormulas, lookat:=xlWhole)
    If Not c Is Nothing Then '//←念のため//
     MsgBox c.Row
    End If
  End With

のような感じでB列の一致行がメッセージボックスに表示されると思います。m(_ _)m
    • good
    • 0

No.1です。


エラーとなるのはMatch関数で該当するセルが見つからなかったためです。
貴方は日付と一言で言っていますがどんな形式の日付ですか?
(yyyy/mm/dd, yy年mm月dd日,yyyymmdd等)

情報が少なくて、的確なアドバイスは出来ませんが、
Format関数を使用してH13とB列に入力されている日付の表示形式を揃えてください。

例:B列にyyyy/mm/ddで入力されている場合
no = WorksheetFunction.Match(Format("aa","yyyy/mm/dd"), ws.Range("B1:B1000"), 0)
    • good
    • 0

No.1です。

 
失礼しました。あまり質問の内容もあまり読んでませんでした。。。。

以下で如何でしょうか?

no = WorksheetFunction.Match("aa", ws.Range("B1:B1000"), 0)

とりあえず、B1からB1000まで検索を掛けています。
この回答への補足あり
    • good
    • 0

ダブルクォーテーションを外してもダメですか?


no = Range(Worksheet("シート1").Range("H13")).Row

あと、変数noの宣言がされていません。
この回答への補足あり
    • good
    • 0

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

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


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

人気Q&Aランキング