[[20230501132039]] 『実行エラー91 オブジェクト変数withブロック変数』(早苗) ページの最後に飛ぶ

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

 

『実行エラー91 オブジェクト変数withブロック変数が設定されていないと言うエラーメッセージが出ます。』(早苗)

Sub test2()
Dim myD As String, r As Range
With Sheets("Sheet1")

  myD = Format(Date, "yy/mm")
Set r = Sheets("Sheet1").Columns(1).Find(myD, LookIn:=xlValues)

    Selection.AutoFill _
        Destination:=.Range( _
            Selection, Selection.Offset( _
              Cells(r.Row, 1).Row - _
                Selection(Selection.Count).Row, 0 _
            ) _
        )
End With
End Sub

A列に日付が入力されております。
B,C,D,E,F,G各列にはデータが入力されております。
B列からG列の一行を選択しマクロを実行すれば、
A列の今日の日付までB列からG列の一行の同じデータが下方向(今日の日付)
まで繰り返し入力されるようなコードを書きましたが、
実行エラー91 オブジェクト変数withブロック変数が設定されていないと言うエラーメッセージが出ます。どう書き加えればよいのでしょうか?

< 使用 Excel:Excel2019、使用 OS:Windows11 >


 想像するに、こんなことかな?						

 ※元表だとする						

    |[A]  |[B]  |[C]  |[D]  |[E]  |[F]  |[G]  						
 [1]|日付 |項目1|項目2|項目3|項目4|項目5|項目6						
 [2]|23/03|data1|data2|data3|data4|data5|data6						
 [3]|23/04|     |     |     |     |     |     						
 [4]|23/05|     |     |     |     |     |     						
 [5]|23/06|     |     |     |     |     |     						
 [6]|23/07|     |     |     |     |     |     						

 B2 : G2を選択したとして、マクロ実行						
 上記が↓下のように、になれば良いのでしょうか?						

    |[A]  |[B]  |[C]  |[D]  |[E]  |[F]  |[G]  						
 [1]|日付 |項目1|項目2|項目3|項目4|項目5|項目6						
 [2]|23/03|data1|data2|data3|data4|data5|data6						
 [3]|23/04|data1|data2|data3|data4|data5|data6						
 [4]|23/05|data1|data2|data3|data4|data5|data6						
 [5]|23/06|     |     |     |     |     |     						
 [6]|23/07|     |     |     |     |     |     						

 ※A列の表示形式は、yy/mm						

 Sub Sample()						

    Dim myD As String, r As Range						
    Dim i&, q&						

    With Sheets("Sheet1")						
        myD = Format(Date, "yy/mm")						
        Debug.Print myD: Stop '' 23/5						

        i = Selection(Selection.Count).Row						
        Debug.Print i & "行目選択": Stop						

        Set r = Sheets("Sheet1").Columns(1).Find(myD, LookIn:=xlValues)												

        q = r.Row						
        Debug.Print q & " Find : 行"						
	Stop

        .Range(.Cells(i, 2), .Cells(i, 7)).AutoFill _						
        Destination:=.Range(.Cells(i, 2), .Cells(q, 7))						
    End With						

 End Sub						

 作りたいマクロと意図が違ったら、他の回答者に聞いてください。						
 出かけますので。(〃∇〃)ゞ						

 ※因みに、debug.print ってご存じですか?						

 マクロは、途中で何度かストップするので						
 debug.print を見て確認してください。						

 もし、解らなければ調べてください。						
 検索 : debug.print VBA

 [玄関] λ…………トボトボ					
(あみな) 2023/05/01(月) 15:44:42

 まず現状把握しましょう。
 検索はできているのですか?
 エラーになったとき、rがNothingになっているということはないですか?
 A列のデータおよびその表示形式を説明されたらいかがですか?
 そうすれば、回答が寄せられると思います。
(xyz) 2023/05/01(月) 17:21:00

被っている部分もありますが、コメントしておきます。

■1
>A列の今日の日付まで
A列に↓が入っているならそれは【日付】ではありません。

 myD = Format(Date, "yy/mm")

また、実際には【日付(シリアル値)】が入っているならば上記の"文字列"では正しく評価できませんし、Findメソッドで日付を扱うには癖がありますので難易度たかめです。
なので、A列には正確には何がはいっているか提示してください。

■2
↓のようにFindメソッドを使って【セル】を探していますが、見つからなかった場合は「r」にNothingが格納されますので対策をしておいたほうがよいでしょう。

 Set r = Sheets("Sheet1").Columns(1).Find(myD, LookIn:=xlValues)

■3
>B列からG列の一行を選択しマクロを実行すれば〜
あんまり「Selection」に依存したコードはお勧めしませんが、例えば↓のように段階的に処理するようにしてみれば原因分析しやすいのではないでしょうか?

    Sub test2_改()
        Stop ' ブレークポイントの代わり
        Dim r As Range, 始行 As Long, 終行 As Long

        With Sheets("Sheet1")
            Set r = .Columns(1).Find(Format(Date, "yy/mm"), LookIn:=xlValues)
            If r Is Nothing Then
                MsgBox "A列を検索しましたが【" & Format(Date, "yy/mm") & "】を発見できませんでした"
            Else
                始行 = Selection.Row
                終行 = r.Row

                With Cells(始行, "B").Resize(, 6)
                    .AutoFill Destination:=.Resize(終行 - 始行 + 1)
                End With
            End If
        End With
    End Sub

(もこな2 ) 2023/05/01(月) 17:29:06


コメント返信:

[ 一覧(最新更新順) ]


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