
初心者です。エクセル マクロで セルの範囲を指定する方法を教えてください。
下記のようなマクロがあります。
ーーーーーーー
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then '←の2はB列のこと
If Target.Value = "" Then
Cells(Target.Row, 6).Value = ""
Else
Cells(Target.Row, 6).Value = Date '←の6はF列に日付
Cells(Target.Row, 5).Activate '←の5はE列へ移動
End If
End If
End Sub
ーーーーーーー
この場合の「2のB列」を「2から4、B列からD列」まで、
いずれに入力しても日付が表示されるようにしたいのです。
一つのセルではなく、複数のセルに対応できるように変えるには
どうしたらいいでしょうか。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
wasi05さんが書いたマクロには、致命的な欠点があります。
Worksheet_ChangeイベントのTargetパラメータには、変更があったセル(Rangeオブジェクト)が渡されますが、例えば、B1に入力されている値を下へオートフィルするなど、一度に複数のセルが変更されると、当然、複数のRangeが渡ってきます。wasi05さんが書いたマクロは、複数のセルが渡ってきた場合の考慮が無いので、エラーになってしまいます。
複数のセルすべてを処理したい場合は、こんな感じにする必要があります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Dim r As Range
Set myRng = Intersect(Target, Range("B:D"))
If myRng Is Nothing Then Exit Sub
For Each r In myRng
If r.Value = "" Then
Cells(r.Row, 6).Value = ""
Else
Cells(r.Row, 6).Value = Date '←の6はF列に日付
Cells(r.Row, 5).Activate '←の5はE列へ移動
End If
Next
End Sub
No.1
- 回答日時:
「2から4、B列からD列」以外は処理しないという考え方にすればいいです。
具体的にはこんな感じです。--------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column < 2 Then Exit Sub
If Target.Column > 4 Then Exit Sub
If Target.Value = "" Then
Cells(Target.Row, 6).Value = ""
Else
Cells(Target.Row, 6).Value = Date '←の6はF列に日付
Cells(Target.Row, 5).Activate '←の5はE列へ移動
End If
End Sub
--------------------------------------------------------------------
的確に回答いただきまして、ありがとうございます。
時間の差でベストアンサーにできませんでしたが、
同じくらいの回答です。勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】指定行以降をクリ...
-
エクセルVBAでコピーして順...
-
特定のセルが空白だったら、そ...
-
VB.NETで、EXCELの右寄せ
-
i=cells(Rows.Count, 1)とi=cel...
-
ExcelVBAを使って、値...
-
VBA実行後に元のセルに戻りたい
-
Excelで指定した日付から過去の...
-
VBA初心者です。結合セルを保持...
-
VBAでセルをクリックする回...
-
Excelのプルダウンで2列分の情...
-
vbsのセル値の取得について
-
VBA コピーして次の値まで貼り...
-
DataGridViewで列、行、セルの選択
-
[EXCEL2003]セルのリストの文字...
-
Excel vbaで特定の文字以外が入...
-
エクセルの複数データーをダブ...
-
エクセルvba:自己セルの情報取...
-
エクセル マクロで セルの範...
-
エクセルvbaで、別シートの最下...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
Excelで指定した日付から過去の...
-
VBA実行後に元のセルに戻りたい
-
i=cells(Rows.Count, 1)とi=cel...
-
任意フォルダから画像をすべて...
-
【Excel VBA】指定行以降をクリ...
-
エクセルvbaで、別シートの最下...
-
【Excel】指定したセルの名前で...
-
VBAでセルをクリックする回...
-
Excelのプルダウンで2列分の情...
-
DataGridViewの各セル幅を自由...
-
特定の文字を条件に行挿入とそ...
-
VBA ユーザーフォーム ボタンク...
-
TODAY()で設定したセルの日付...
-
VBからEXCELのセルの値を取得す...
-
特定行の色を変えたい(FlexGrid)
-
ExcelのVBAで数字と文字列をマ...
-
Excel vbaで特定の文字以外が入...
-
VBA初心者です。結合セルを保持...
おすすめ情報