- ベストアンサー
マクロ 任意の日付のセルを選択する方法
- インプットボックスを使用して、任意の日付の期間を選択する方法が分からない
- 質問者は「If Not ?? Is Nothing Then」の記述方法についても知りたい
- シートの詳細として、B4から下方向に連番の日付が記載されている
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
変数名を””で囲ってはいけません。その他修正。 Sub 範囲の選択() Dim Date1 As Date Dim Date2 As Date Dim b1 As range Dim b2 As range With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/11/1のように入力してください。") Set b1 = .Columns("B").Find(Date1, , xlValues, 1) if b1 is nothing then msgbox "START NOT FOUND" : goto s1 s2: Date2 = Application.InputBox("最後の日付を2012/11/31のように入力してください。") Set b2 = .Columns("B").Find(Date2, , xlValues, 1) if b2 is nothing then msgbox "END NOT FOUND" : goto s2 .Range(b1, b2).Select End With End Sub
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
>存在する日付を入力しても『START NOT FOUND』が表示されて進みません。 正しい日付のデータがセルに記入できていないからです。 または、INPUTBOXに、シート上に存在すると思い込んでいるけど実は間違った日付を記入しています。 手順: B4以下に記入済みのデータを全てDeleteする セルの書式設定を日付に設定する B4以下に日付を入れ直す 回答したマクロを実行する #他の方からのアドバイスと混乱しないように、よく注意して実施してください。 #ごちゃごちゃ書かれると混乱するようなら、以下は読み飛ばしてください 別の手順: B4以下を選択する 区切り位置を開始する そのまま何も設定せずに次々進め、ウィザードの最終画面で日付にマークして完了する
お礼
前の書式設定も日付になっていましたが、日付の表示方法を別のにして上手く動作する事が確認出来ました。こんな事もあるんですね。ありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようなマクロにしてはどうでしょう。 Sub 範囲の選択() Dim Date1 As Date Dim Date2 As Date Dim b1 As Variant Dim b2 As Variant Dim Row1 As Variant Dim Row2 As Variant Date1 = Application.InputBox("最初の日付を2012/11/1のように入力してください。") Date2 = Application.InputBox("最後の日付を2012/11/31のように入力してください。") With Worksheets("Sheet1").Range("B1:B100") Set b1 = .Find(Date1, LookIn:=xlValues) If Not b1 Is Nothing Then Row1 = b1.Address Set b2 = .Find(Date2, LookIn:=xlValues) If Not b2 Is Nothing Then Row2 = b2.Address Range(Row1, Row2).Select End If End If End With End Sub 日付が表にない日を入力した場合のことも考えてIf Not ・・・は必要ですね。 b1やb2は日付のままとなっていますのでAddressが必要ですね。
お礼
いつも回答ありがとうございます。 理由は分かりませんが、日付の入力箇所が全て選択されてしまいます。どうしてでしょうか?
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
Option Explicit Sub 範囲の選択() Dim Date1 As Date Dim Date2 As Date Dim xLast As Long Dim b1 As Variant Dim b2 As Variant Date1 = Application.InputBox("最初の日付を2012/11/1のように入力してください。") Date2 = Application.InputBox("最後の日付を2012/11/31のように入力してください。") 'Date1 = Date 'Date2 = Date + 30 With Worksheets("集計用") 'Set b1 = .Columns("B").Find(Date1, , xlValues, 1) 'Set b2 = .Columns("B").Find(Date2, , xlValues, 1) xLast = .Cells(Rows.Count, "B").End(xlUp).Row Set b1 = .Range(.Cells(4, "B"), .Cells(xLast, "B")).Find(Date1, , xlValues, 1) Set b2 = .Range(.Cells(4, "B"), .Cells(xLast, "B")).Find(Date2, , xlValues, 1) If (b1 Is Nothing) Then Set b1 = .Cells(4, "B") End If If (b2 Is Nothing) Then Set b2 = .Cells(xLast, "B") End If .Range(b1, b2).Select End With End Sub
お礼
回答ありがとうございました。 たぶん、ケースに応じて色々付け加えてくれてたと思いますが、自分には理解力がまだまだ足りないようです。少しずつひも解いて、回答して下さった内容を理解していきたいと思います。
お礼
いつも回答ありがとうございます。 存在する日付を入力しても『START NOT FOUND』が表示されて進みません。どうしてでしょうか?