[[20220828213943]] 『日付を検索して画面を指定位置に』(ともぞー) ページの最後に飛ぶ

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

 

『日付を検索して画面を指定位置に』(ともぞー)

教えていただけないでしょうか
マクロのボタンをAシートに設置しシートBに日付が入力されています
日付の入力されているセルはA1に8月1日 A39に8月2日 A77に8月3日
A115に8月4日 A153に8月5日 A191に8月6日省略してすみませんA1141に8月31日この様な規則性で日付が入力されています。

例えば本日が8月6日(A191)の時Aシートのボタンを押すとBシートのA列の日付を検索してその8月6日のA191のセルに合わせてA191のセルが必ず左上に画面を
表示したいのですが方法教えてもらえませんか
説明にはありませんが8月28日でしたらA1027のセルが画面の左上になります。

説明がわかりにくかったらすみません
この様な動作を行いたいのですがよろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


ここ
http://officetanaka.net/excel/vba/tips/tips131.htm
(ココ) 2022/08/28(日) 22:20


Findの事しか載ってなかった。残念。
(ココ) 2022/08/28(日) 22:36

ですよね
よろしくお願いいたします。
(ともぞー) 2022/08/28(日) 22:53

Application.Goto Cells(191, 1), True
(隠居Z) 2022/08/28(日) 22:56

↑すみません
動作が不安定なので、あまり、お勧めではないみたいです
m(__)m
別案のアドバイスを、引き続きお待ちくださいませ。
(隠居Z) 2022/08/28(日) 23:01

 >動作が不安定なので

 そうなんですか?

 規則性があるなら、私もこれでいいと思うのですが・・

 Application.Goto Worksheets("B").Cells(38 * (Day(Date) - 1) + 1, 1), True

(半平太) 2022/08/28(日) 23:20


隠居Z様
半平太様
理想の動きです
ありがとうございます。
(ともぞー) 2022/08/28(日) 23:25

おはようございます^^
何時も勉強させて戴いております
>>そうなんですか?
私も遭遇したわけではないのですが
https://excel-ubara.com/excelvba4/EXCEL272.html
など、拝見いたしましたもので
>>。。。みたいですという表現に。。。^^;
暇な時に、いろいろ試して見ようとは思っていますです。
??やら、危うきに近寄らず。。。的発想で御座いました。( ̄▽ ̄)
m(__)m
別案で
 Option Explicit
Sub myjmp()
    Dim t#, x
    t = Date
    With Worksheets("B")
        .Activate
        x = Application.Match(t, Intersect(.UsedRange, .Columns(1)))
        If Not IsError(x) Then
            .Cells(x, 1).Select
            With ActiveWindow
                .ScrollRow = x
                .ScrollColumn = 1
            End With
        End If
    End With
End Sub
(隠居Z) 2022/08/29(月) 07:33

わたしの結論はご指摘の通り
私の考えすぎ。。。「そんな複雑な処理、あまりしないし」
Application.Goto
わたしも、使うと思います。
ま、
場合によってはそんなことも有るかもしれません、程度に。。。
異常終了する時に別案を考えればよい事かと
m(__)m
(隠居Z) 2022/08/29(月) 07:49

 おはようございます

 (隠居Z)さま 私...1回だけ遭遇したことあります。

 ↓その時は、この記事を知らない時で… 今のって何?って感じだったんですけど
https://excel-ubara.com/excelvba4/EXCEL272.html

 二つ並行しての Timer関係の処理で、何かをした時だった
 記憶があります。はっきり覚えてませんが...Excel 強制終了されました ( ;∀;)

(あみな) 2022/08/29(月) 10:17


こんにちわ〜 ^^
貴重な情報提供、ありがとうございます。
よく安全を確認して使用する様に致します。
m(__)m
(隠居Z) 2022/08/29(月) 11:05

追加質問お願いします
YEAR, MONTH, DAY を組み合わせて日付の完全一致は出来ないでしょうか
よろしくお願いします
(ともぞー) 2022/08/29(月) 23:12

追加質問お願いします
YEAR, MONTH, DAY を組み合わせて日付の完全一致は出来ないでしょうか
よろしくお願いします

(ともぞー) 2022/08/30(火) 04:31


おはようございます。^^
何か、不都合が発生したのでせうか
シートBの日付が全て
シリアル値なら、問題は無いと思うのですが。
m(__)m
(隠居Z) 2022/08/30(火) 10:29

おはようございます。
9月の日付にすると8月でも9月でも今日でしたら30日の所に動いて
しまいます
これをまだ来ていない日付の時はエラーメッセージなど出るように
して1日の1日強制的に位置することは出来ませんか?
ちょっと個人的な意見になってしまうのですが出来るのでしたら
教えてもらえないでしょうか
よろしくお願いします

(ともぞー) 2022/08/30(火) 11:41


 ちょっと、やりたい事が不明瞭ですよ。

 今日が、未だ来てない日である訳はないですよね?

 以前の話と何が変わったのですか?

 1.飛びたいところが、今日とは限らなくなったと言う事なんですか?
   それなら、いつの日にしたくなったのか、何を見ると分かるんですか?

 2.日付のある行位置がでたらめになったと言う事なんですか?

 3.位置は正しいが、日付がチャンと入力されていない場合があると言う事なんですか?

(半平太) 2022/08/30(火) 12:43


回答してもらったのは間違えではありません
8月の日付を今現在入力してあります。結果は8月30日の所のセルに
来ます。これは問題ありません
この日付を今の段階で9月のの日付を入れても9月30日の所のセルの
所に来ます。
なので今と違う日付の時はメッセージみたいなもので日付が見つかりません
とメッセージを出して分かりやすく対象の日付が無い時は
A77の本来1日になるセルの位置に強制的にしたいです
わかりにくくなってしまいすみませんです。
よろしくお願いします
(ともぞー) 2022/08/30(火) 13:24

 >A77の本来1日になるセルの位置に強制的にしたいです

 そこが少し解からないです。当初は、以下の説明でした。(A77は3日目じゃないですか?)
                    ↓
 >日付の入力されているセルはA1に8月1日 A39に8月2日 A77に8月3日

(半平太) 2022/08/30(火) 13:46


 Sub Sample()
'日付は仮にAシートのA1セルに日付シリアル値があるものとします。
    Dim buf
    buf = Application.Match(Worksheets("A").Range("A1").Value2, Worksheets("B").Range("A:A"), 0)
    If IsError(buf) Then
        MsgBox "Error"
        buf = 77
    End If
    Application.Goto Worksheets("B").Cells(buf, 1), True
End Sub

練習課題のつもりでマクロを作ってみました。
シートBのA列に同一の日付が見当たらないときはシートBのA77の位置になります。
(下手の横好き) 2022/08/30(火) 13:57


半平太様すみませんA1に8月1日です
間違えてました
下手の横好き様が書いてくれた感じでよいのですが
Application.Goto Worksheets("B").Cells(38 * (Day(Date) - 1) + 1, 1), True
このコードと組み合わせたらいいのかわかりません
よろしくおねがいします
(ともぞー) 2022/08/30(火) 14:37

 表示位置が正しいなら、日付を探すまでもないので、

 Sub ボタン1_Click()
     Dim Destination As Range

     With Worksheets("B")
         Set Destination = .Cells(38 * (Day(Date)) - 37, 1)

         If Destination.Value2 <> CLng(Date) Then
             MsgBox "本日の日付が見当たりません"
             Set Destination = .Range("A1")
         End If

     End With

     Application.Goto Destination, True
 End Sub

(半平太) 2022/08/30(火) 14:53


半平太様ありがとうございます
思ってる動きになりました。
もう一つ聞いてよろしいでしか
本日30日の所のセルに行きます
これを1日マイナスしたい時このコードですと
Application.Goto Worksheets("B").Cells(38 * (Day(Date) - 1) + 1, 1), True
この部分を(Day(Date) - 2)すれば出来たのですが今回のコードですと何処を変えればよいのですか
よろしくお願いします
(ともぞー) 2022/08/30(火) 15:14

 >この部分を(Day(Date) - 2)すれば出来た

 今日が月初(1)だったら、2を引くとマイナスとなり、エラーですけど?

 そちらの本当のレイアウトを説明して頂けませんか?
 (先のA77の行き違いとも関連しそうな気がしていますが・・)

(半平太) 2022/08/30(火) 15:32


半平太様回答ありがとうございます
A1 8月1日
A39 8月2日
A77 8月3日
こんな感じで31日まで有ります
Application.Goto Worksheets("B").Cells(38 * (Day(Date) - 1) + 1, 1), True
この部分を(Day(Date) - 2)すれば問題なく30日ですが29日のセルに来ています
たまたまできているだけなのでしょうか?
よろしくお願いします

(ともぞー) 2022/08/30(火) 15:48


 >Application.Goto Worksheets("B").Cells(38 * (Day(Date) - 1) + 1, 1), True
 >この部分を(Day(Date) - 2)すれば問題なく30日ですが29日のセルに来ています

 おかしいですねぇ・・

 30日なら1103     31日なら1141
      ↑         ↑
    38x(30-1)+1       38x(31-1)

 >A191に8月6日省略してすみませんA1141に8月31日 
 この説明とチャンと付合しますけど。

 もう、あれこれチェックするのは止めます。
 下手の横好きさんの案を使ってください。

 Sub ボタン1_Click()
     Dim buf

     buf = Application.Match(CLng(Date), Worksheets("B").Range("A:A"), 0)

     If IsError(buf) Then
         MsgBox "本日の日付が見当たりません"
         buf = 1
     End If

     Application.Goto Worksheets("B").Cells(buf, 1), True
 End Sub

(半平太) 2022/08/30(火) 16:06


 横からで...すいません

 うち、ちゃんと...(半平太)さんので

 8月30日なら 1103 行目に
 8月31日なら 1141 行目に

 来ますけど。。。

 Sub Sample()

    Dim Rng As Range
    Dim KeyDate As String
    Dim ws(1 To 2) As Worksheet
    Set ws(1) = Sheets(1): Set ws(2) = Sheets(2)
    KeyDate = Format(ws(1).Range("A1"), "m月d日")
 '' KeyDate = Format(ws(1).Range("A1"), "yyyy/m/d")

    MsgBox KeyDate
    With ws(2).Range("A:A")
        Set Rng = .Find(what:=KeyDate, LookIn:=xlValues)
        If Not Rng Is Nothing Then
            Debug.Print Rng.Row
            Application.Goto ws(2).Cells(38 * (Day(KeyDate) - 1) + 1, 1), True
        Else
            MsgBox "日付が見つかりません"
            Application.Goto ws(2).Range("A1")
        End If
    End With

 End Sub

(あみな) 2022/08/30(火) 17:55


1日ずらして30日なら29日
31日なら30日にしたいのですが
(ともぞー) 2022/08/30(火) 19:25

     buf = Application.Match(CLng(Date) - 1, Worksheets("B").Range("A:A"), 0
                                       ~↑~
                    ここで1を引く

(半平太) 2022/08/30(火) 19:42


半平太様
お付き合いいただき更に回答で解決していただきありがとうございました。

(ともぞー) 2022/08/30(火) 21:20


コメント返信:

[ 一覧(最新更新順) ]


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