No.2ベストアンサー
- 回答日時:
すみません
添付画像は選択時のイメージで文章があっているように思いました。
>C列に開始日、D列終了日を入力したら自動で同一行の日付範囲を選択できるようにしたい
>お知恵をお借りできませんでしょうか。
との事で考え方ややり方を提案できれば良いのですが、文書べたなので
例を2通り、
セルの変更で実行するのですから、対象シートのシートイベントを使用します。
①
日付行(E列より1行目)になっている行のセルを順次比較して
範囲を増やしていくロジック
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Dim rng As Range
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("D:D")) Is Nothing Or Target.Offset(, -1) = "" Then Exit Sub
Application.EnableEvents = False
For i = 5 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, i) >= Cells(Target.Row, 3) And Cells(1, i) <= Cells(Target.Row, 4) Then
If rng Is Nothing Then
Set rng = Cells(Target.Row, i)
Else
Set rng = Union(rng, Cells(Target.Row, i))
End If
End If
Next i
If Not rng Is Nothing Then rng.Select
Application.EnableEvents = True
End Sub
②
日付の行を対象にFindで検索してOffsetで範囲移動するロジック
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fdRng As Range
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("D:D")) Is Nothing _
Or Target.Offset(, -1) = "" Then Exit Sub
Application.EnableEvents = False
Set fdRng = Range("E1", Cells(1, Columns.Count).End(xlToLeft))
Range(fdRng.Find(Cells(Target.Row, 3)), _
fdRng.Find(Cells(Target.Row, 4))).Offset(Target.Row - 1).Select
Application.EnableEvents = True
End Sub
実行条件
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("D:D")) Is Nothing _
Or Target.Offset(, -1) = "" Then Exit Sub
D列の単セルが変更された時、その行のC列セルが空白でなければ実行されます。条件以外は Exit Sub この条件を変える事でC列変更時も実行させられます。
②は該当日付セルがない場合エラーが返りますので
On Error Resume next などで対策してください。
書き方は他にもあると思いますが、基本的には、該当セルを開始日、終了日共に探してカラム№を取得するかレンジオブジェクトを取得するなどして
変更セル行に移動または、該当行で範囲設定しセレクトすれば出来ると思います。
No.1
- 回答日時:
こんばんは、
添付画像の様に実行する場合は、ボタンなどからの実行が必要になると思います。
つまり、C列に開始日、D列終了日を入力したら自動でと言う事であれば
入力した行のみにしておいた方が良いように思います。
トリガーをWorksheet_Changeイベントにするかボタンにするかで
変わってきますが、取り敢えず中途半端ではありますが
C2セルD2セルを入力後、実行すると選択されるコードを書きますね。
まだ、なさりたい事を実現する為には手を加える必要があると思いますので
いじくってみてください。
ちなみに日付データの参照なので該当セルはシリアル値で入力されているものとします。
一例です
Sub a()
Dim stD As Date, endD As Date
Dim i As Integer
Dim rng As Range
Dim myRow As Long
myRow = Selection.Row
stD = Cells(myRow, 3)
endD = Cells(myRow, 4)
For i = 5 To Cells(1, Columns.Count).End(xlToLeft).Column
If Cells(1, i) >= stD And Cells(1, i) <= endD Then
If rng Is Nothing Then
Set rng = Cells(myRow, i)
Else
Set rng = Union(rng, Cells(myRow, i))
End If
End If
Next i
rng.Select
End Sub
変数名は適当です。
先ずは、実行トリガーの検討をしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Excel(エクセル) マクロ セルの選択 5 2022/08/12 22:47
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- その他(Microsoft Office) 選択行の列範囲に二重線を引く 3 2022/06/08 12:21
- Excel(エクセル) エクセルのマクロを教えてください。 4 2022/10/06 08:53
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- Visual Basic(VBA) A列の最終行に合わせて範囲をコピー 2 2022/09/04 19:10
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
VBAでセルをクリックする回...
-
Excelのハイパーリンクにマクロ...
-
【Excel VBA】指定行以降をクリ...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
Sub 要具ライフ() ActiveSheet....
-
TODAY()で設定したセルの日付...
-
【VBA】指定したセルと同じ値で...
-
エクセル マクロで セルの範...
-
VBAの計算で@が出てしまう件
-
DataGridViewのセル編集完了後...
-
任意フォルダから画像をすべて...
-
セルに抜けた番号の代わりに空...
-
DataGridViewで右寄せ左寄せが...
-
”戻り値”が変化したときに、マ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報