『VBA ファイルを開いたら今日の日付にジャンプ』(BUBISON) エクセルファイルに一か月の予定を入れています。(A〜H列) ファイルを開いたときに、今日の日付に飛ぶようにしたいのですが、どうすればよいでしょうか。 < 使用 Excel:Excel2019、使用 OS:Windows10 > ---- Workbook_OpenイベントかWorksheet_Activateイベントで、 日付が入力しているセルを検索し、 そのセルにスクロールするようにする。 ネット検索でそれっぽいのがヒットしますよ。 (tkit) 2021/09/02(木) 11:21 ---- Private Sub Workbook_Open() Dim SearchRange As Range Dim ws As Worksheet Dim rng As Range For Each ws In ThisWorkbook.Worksheets Set SearchRange = Intersect(ws.Range("A1:H1").EntireColumn, ws.UsedRange) For Each rng In SearchRange If rng.Value = Date Then rng.Select Exit Sub End If Next Next End Sub 試作品です。 ThisWorkbookモジュールに記入します。 ワークシートと行の指定がないので全部探します。 このままでは実用的ではありません。 (めざめるパワー) 2021/09/02(木) 11:25 ---- tkitさん 日付をWORKDAYで指定しているので、ネットで検索した方法では、うまくできずに質問致しました。 めざめるパワーさん できました。 範囲は指定しましたが、シートはsheet1だけなのですが、このままでよいのでしょうか? これは、全シートをチェックしているのですか? (BUBISON) 2021/09/02(木) 13:07 ---- Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets (中略) Next この部分で全シートを巡回しています。 1つしかなければその1つしか巡回しませんが 全シート巡回できるようにしている分無駄な処理をしています。 同様にA〜H列の使用している全セルを巡回しているのでこれも無駄です。 予期しないエラーを回避するためにも日付の入力されているセルだけを巡回するのが良いです。 他にも問題ありの試作マクロですがとりあえず。 (めざめるパワー) 2021/09/02(木) 13:19 ---- めざめるパワーさん ご説明ありがとうございます。 全シートは必要ないので、そこだけ変更してみます。 (BUBISON) 2021/09/02(木) 14:18 ---- >日付をWORKDAYで指定しているので、ネットで検索した方法では、うまくできずに質問致しました。 関数使っても、取得する値は日付ですけどね・・・ 8列(A〜H列)にWORKDAY関数ってことは、日付が複数行に渡ってるってことですかね? 私なら、日付かどうか分からない範囲で比較する場合、IsDateでエラートラップして、DateDiff関数で日付の差を取得します。 または、日付の表示形式を統一して、ワークシートのMATCH関数で検索するかですね。 セル位置が分からないので、コードは提示しません。 VBAの経験が御有りのようですので、詰まったらコードを提示してみてください。 (tkit) 2021/09/02(木) 14:22 ---- tkitさん 日付は複数行です。 日付の下に、その日のスケジュールが入力されているので、日付は飛び飛びに入力されています。 ネットで見つけたVBAを入れてみたのですが、毎回"今日の日付が見つかりません。"と表示され、どこが悪いのかわからず質問しました。 直接、日付を入力(2021/09/02)したセルは検索できます。 Private Sub Workbook_Open() Dim FRng As Range Worksheets("TagetSheet").Activate Set FRng = Rows("1:150").Find(Date, LookIn:=xlFormulas) If Not FRng Is Nothing Then FRng.Activate Else MsgBox "今日の日付が見つかりません。", vbExclamation End If Set FRng = Nothing End Sub (BUBISON) 2021/09/02(木) 16:48 ---- こちら、参考にされた方がいいと思います。 http://officetanaka.net/excel/vba/tips/tips131b.htm (よりみち) 2021/09/02(木) 16:59 ---- よりみちさん そちらのページも見て、xlValuesに変更したりしましたが、理解できませんでした。 (BUBISON) 2021/09/02(木) 17:05 ---- 日付って面倒なんですよね・・・ よりみちさんの提示されたサイトを理解いただくのと、 こちらでは、質問者さんのシートは見えないので、 ご自身でステップ実行して、それぞれどんな値なのか 見るしかないかと。 めざめるパワーさんが提供してくれたコードで 動いている、ということですので、これにて失礼させていただきます。 (tkit) 2021/09/03(金) 11:07 ---- tkitさん、ありがとうございました。 ステップ実行もしてみましたが、空白になってしまいました。 また、他のサイトも見て学習します。 (BUBISON) 2021/09/03(金) 14:13 ---- めざめるパワーさんのコードに現在の変数の中身を イミディエイトウィンドウに出力するコードを追記しました。 ステップ実行でのデバッグにお役立てください。 'イミディエイトウィンドウに出力追加 Private Sub Workbook_Open() Dim SearchRange As Range Dim ws As Worksheet Dim rng As Range For Each ws In ThisWorkbook.Worksheets Debug.Print "シート検索 :" & ws.Name Set SearchRange = Intersect(ws.Range("A1:H1").EntireColumn, ws.UsedRange) Debug.Print "検索セル範囲:" & SearchRange.Address(False, False) For Each rng In SearchRange If rng.Value = Date Then rng.Select Debug.Print "判定セル&値:" & rng.Address(False, False) & ":" & rng.Value & ":Select" Exit Sub Else Debug.Print "判定セル&値:" & rng.Address(False, False) & ":" & rng.Value End If Next Next End Sub (tkit) 2021/09/03(金) 14:32