
初心者です。エクセル マクロで セルの範囲を指定する方法を教えてください。
下記のようなマクロがあります。
ーーーーーーー
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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
targetをA列のセルに限定するには?
Visual Basic(VBA)
-
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
☆Excelエクセルで入力した日の日付を表示したいです☆
Excel(エクセル)
-
4
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
5
エクセルVBA intersect columnsの複数列のやり方
Visual Basic(VBA)
-
6
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
7
EXCEL VBA 選択範囲をTargetに
会計ソフト・業務用ソフト
-
8
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
9
複数処理 Worksheet_Change(ByVal Target As Range)
Visual Basic(VBA)
-
10
同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか
Visual Basic(VBA)
-
11
データが入力されている隣のセルに当日日付と時刻を入力するExcel VBAプログラム
Visual Basic(VBA)
-
12
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
13
教えて For Each R In Target
Excel(エクセル)
-
14
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
15
Excelでマクロ実行中に画面を固定する方法
Visual Basic(VBA)
-
16
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
17
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
18
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
19
エクセルでセルをクリックすると“○”と入力
Excel(エクセル)
-
20
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
Excel vbaで特定の文字以外が入...
-
5
EXCELで変数をペーストしたい
-
6
ExcelVBAで、選択範囲内で同じ...
-
7
セル色なしの行一括削除
-
8
screenupdatingが機能しなくて...
-
9
Word版VBで表の任意の箇所を...
-
10
VBからEXCELのセルの値を取得す...
-
11
【VBA】指定したセルと同じ値で...
-
12
ユーザーフォーム内のテキスト...
-
13
クリックされたセルの位置を取...
-
14
ExcelのVBAで数字と文字列をマ...
-
15
VBSでエクセル内の行数を取得す...
-
16
Excel2003 複数セル1列の入力済...
-
17
特定行の色を変えたい(FlexGrid)
-
18
セルの値だけクリップボードに...
-
19
連続する複数のセル値がすべて0...
-
20
Excelのハイパーリンクにマクロ...
おすすめ情報
公式facebook
公式twitter