• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日付の検索)

日付の検索方法とエラー対策

このQ&Aのポイント
  • マクロを使った日付の検索方法について解説します。具体的なセルの設定とマクロの修正方法を紹介します。
  • 日付の検索においてエラーが発生する場合の対策方法について説明します。修正すべき箇所や注意点について解説します。
  • マクロを実行しても日付の検索が正しく行われない場合の対処法をまとめました。具体的な修正方法や可能性のあるエラーについて詳しく説明します。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

回答No.1のNishi6です。 質問通りの設定をして、マクロを貼り付け、xlValuesに変更してエラーも出ずに終わりました。 >LookIn:=xlValues でエラーでます。 このエラーがVBAのメッセージのerrorなのか、コード自体のエラーなのか判断付きかねています。 質問者様の行いたいことを推測すると、 「AK2(年)、Ak3(月)のカレンダーをD17:AH17に作り、AK4(年月日)の日付にジャンプしたい。AK4の日付が無ければ「error表示」」でしょうか。 そうすると、少し困ることがあります。月には「大の月、小の月(にしむく士小の月と言います)」があり、一ヶ月31日と決め打ちすると、月の後半1~3日が翌月になったりします。このまま9月のカレンダーを作り、10月1日を指定すると見つかります。もし指定月のみのカレンダーを作るのであれば、 B16 不要 表示する必要があれば =TEXT(D17,"yyyy/m")。B16は文字列ですね。 D17  (1日)  =DATE(AK2,AK3,1) E17  (2日)  =D17+1 ・・・・・・・・・・・・・ AE17 (28日) =AD17+1 AF17 (29日) =IF(MONTH(AE17+1)=AK3,AE17+1,"") AG17 (30日) =IF(MONTH(AE17+2)=AK3,AE17+2,"") AH17 (31日) =IF(MONTH(AE17+3)=AK3,AE17+3,"") とすれば、指定月のみの年月日が作れます。大の月、小の月、閏年にも対応します。 マクロは、 Sub Macro6B()  Sheets("MASTER").Visible = True  Sheets("MASTER").Select    Dim rng As Range  Set rng = Range("D17").Offset(0, Day(Range("AK4")) - 1)    If rng.Value <> Range("AK4").Value Then   MsgBox "error"  Else   rng.Select  End If    Set rng = Nothing End Sub とすれば、直接日数分ジャンプし、そのセルが同年月日かどうかをチェックしています。年や月の誤入力を防ぎます。また、月別に検索領域を気にする必要がなくなります。 ご参考に。

3620313
質問者

お礼

回答ありがとうございます。 無事対応できました。 検証までしていただき、助かりました。 LookIn:=xlValues でエラーでます。 このエラーがVBAのメッセージのerrorなのか、コード自体のエラーなのか判断付きかねています → VBAのメッセージの”error”表示です。 デバッグモードでもnothingとなってたのでerrorとポップアップエラーが表示される状態でした。 B16 不要 表示する必要があれば =TEXT(D17,"yyyy/m")。B16は文字列ですね。 D17  (1日)  =DATE(AK2,AK3,1) E17  (2日)  =D17+1 ・・・・・・・・・・・・・ AE17 (28日)=AD17+1 AF17 (29日)=IF(MONTH(AE17+1)=AK3,AE17+1,"") AG17 (30日)=IF(MONTH(AE17+2)=AK3,AE17+2,"") AH17 (31日)=IF(MONTH(AE17+3)=AK3,AE17+3,"") とすれば、指定月のみの年月日が作れます。大の月、小の月、閏年にも対応します。 の内容ですが、この質問を投稿する時にちょっと気にしました。 目的の内容は”検索で今日と同じ日の行を検索したい”でしたので、カレンダー表示の内容は、後回しにしてた次第です。 ご配慮いただき、ありがとうございます(^^)。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

直接の回答は、既出の回答で済むと思う。 しかし、是非、 「日付を検索する」 http://officetanaka.net/excel/vba/tips/tips131.htm の続きの4記事を読んでください。 ーー エクセル(VBA)にはこういう難しい(常識・推測では)一筋縄ではいかないポイントがあります。 例えば、日付シリアル値のことなど、知らないで、VBAのコードをさがしてコピペ的に連ねている人も結構いるようだ。 良き指導者がそばに居れば教えてくれる機会もあるでしょうが、独学では気づくのがむつかしい。  質問者は、エクセルVBAの基礎的なことは、早く習得できた方なのだろうが、 それで、その勢いで何でもできると思いがちな状況かと推測するが、 その先には、エクセルやエクセルVBAに関して、やはり時間をかけて、経験して、習得しないとならない点も相当あるように思います。 ーー 理由や仕組みを解説してくれる傾向のある、 田中 亨先生(上記の方)の記事や 大村あつし先生のVBAの著作 をよく読むぐらいしか単独ではできないようだが。 ほかにもないわけではないので、WEB照会を数をこなしていると出くわすことがあるのですが。

3620313
質問者

お礼

回答ありがとうございます http://officetanaka.net/excel/vba/tips/tips131.htm の内容は参照済でした。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.2

確認しました。 明確な間違いとしては、No.1の方も仰っているようにLookInです。 ・LookIn:=xlFormulasだと関数、つまり日付ではなく[=TODAY()]と[=D17+1]などを比較する事になります。値を比較しましょう。 [LookIn:=xlFormulas]→[LookIn:=xlValues] 後気になる点とすれば ・Range("AK4")もRange("D17:AH17")もデータ型は日付型です。わざわざ文字列型を経由する必要はありません。 [Dim fkey As String]→[Dim fkey As Date] [What:=DateValue(fkey)]→[What:=fkey] ・frangeで既にセルを取得しているので、わざわざcellsで行番号と列番号を指定する必要はありません。 [Cells(frange.Row, frange.Column).Select]→[frange.Select] ・rangeのvalueは省略可能ですが、個人的には明示してやった方が間違いが少ないと思います。 [Worksheets("MASTER").Range("AK4")]→[Worksheets("MASTER").Range("AK4").Value] ・fkeyでだけワークシートを指定していますが、これは意味があるのでしょうか?  なければ付ける必要はありませんし、あるのならFindなどの前にも指定が必要です。  指定が必要なら、繰り返し使う訳ですから、Worksheet型の変数に格納した方がいいでしょう。 ・B16セルの書式を日付型としていますが、2019/9は日付と認識されないので意味がありません。 ・D17セルは、=DATE(AK2,AK3,1)では駄目なんでしょうか?  個人的には、年と月が別セルで指定されている状態で、[2019/9]という文字列を日付型に変換するのは、迂遠に思えます。

3620313
質問者

お礼

回答並びにアドバイスありがとうございます

3620313
質問者

補足

・[LookIn:=xlFormulas]→[LookIn:=xlValues] ・Range("AK4")もRange("D17:AH17")もデータ型は日付型です。わざわざ文字列型を経由する必要はありません。 [Dim fkey As String]→[Dim fkey As Date] [What:=DateValue(fkey)]→[What:=fkey] ・[Cells(frange.Row, frange.Column).Select]→[frange.Select] ・[Worksheets("MASTER").Range("AK4")]→[Worksheets("MASTER").Range("AK4").Value] 上記対応しましたが、エラー解消されずでした。 ・fkeyでだけワークシートを指定していますが、これは意味があるのでしょうか? → 複数の違うシート(A)で同じ様な書式のシートを使用しています。 (A)の日数表示は末尾の”日”だけにしてるので、 日付を検索するのに年、月、日で表示させているMASTERシートで対応した方がよいと思ってworksheet設定しました。 MASTERシートをselectしてるので、あえてworksheet設定は不要とは思っていましたが、特に間違いではないのでそのままとしてました。 ・B16セルの書式を日付型としていますが、2019/9は日付と認識されないので意味がありません。 → これ、特に意味ないです。 ・D17セルは、=DATE(AK2,AK3,1)では駄目なんでしょうか? → =DATE(AK2,AK3,1)でダメではないです。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

LookIn:=xlFormulas      ↓ LookIn:=xlValues でどうでしょうか。

3620313
質問者

お礼

回答ありがとうございます。 LookIn:=xlValues でエラーでます。 最初は What:=fkey, LookIn:=xlValues としてたのですが、日付検索は What:=DateValue(fkey), LookIn:=xlFormulasがセットとの説明をwebでみかけたので 変更した次第です。

関連するQ&A