[[20210902110047]] 『VBA ファイルを開いたら今日の日付にジャンプ』(BUBISON) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.