プロが教える店舗&オフィスのセキュリティ対策術

初心者です。エクセル マクロで セルの範囲を指定する方法を教えてください。
下記のようなマクロがあります。
ーーーーーーー
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列」まで、
いずれに入力しても日付が表示されるようにしたいのです。
一つのセルではなく、複数のセルに対応できるように変えるには
どうしたらいいでしょうか。

よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

素早く、的確に回答いただきまして、ほんとにありがとうございます。
助かりました。敬服いたします。

お礼日時:2016/10/08 23:42

「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
--------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

的確に回答いただきまして、ありがとうございます。
時間の差でベストアンサーにできませんでしたが、
同じくらいの回答です。勉強になりました。

お礼日時:2016/10/08 23:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A