
『A列のセルに変更があったときのみ実行する』マクロを組みたいと思っています。
『If Target.Column = 1 Then』で条件をつけたのですが、これではA列と同時に他の列を同時に変更した場合、A列以外のセルも対象になってしまいます。
文章ではうまく説明できないので、具体例を挙げたいと思います。
シートに下記マクロを設定しました。
(1)A1~A30を選択しDeleteボタンを押すとB1~B30に1~30の数値が入力されます。
(2)次にA1:J30を選択しDeleteボタンを押すとB1:B30に(1)の時の10倍の数値が入力されます。
A1:J30を選択した場合でも(1)の時と同じ結果を出すにはどうすればよろしいでしょうか?
また、このマクロを実行したときに処理に時間がかかるときとかからないときがあるのですが、その理由もわかる方がいらっしゃれば是非教えていただけないでしょうか?
拙い文章でわかりづらくなってしまいましたが、どうか宜しくお願い致します。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Dim tRANGE As Range
i = 1
If Selection.Count > 1 Then
For Each tRANGE In Target
Range("A1").Offset(tRANGE.Row - 1, 1) = i
i = i + 1
Next
End If
End If
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは、
デリートボタンとなっていますが、単なる、削除ですよね。
*********************引用**********************
(1)A1~A30を選択しDeleteボタンを押すとB1~B30に1~30の数値が入力されます。
(2)次にA1:J30を選択しDeleteボタンを押すとB1:B30に(1)の時の10倍の数値が入力されます。
A1:J30を選択した場合でも(1)の時と同じ結果を出すにはどうすればよろしいでしょうか?
************************************************
言葉のとおりに、コードを改良すると以下のようになりました。
一行しか、変えていませんが、
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Dim tRANGE As Range
i = 1
If Selection.Count > 1 Then
For Each tRANGE In Range(Target.Columns(1).Address)
Range("A1").Offset(tRANGE.Row - 1, 1) = i
i = i + 1
Next
End If
End If
End Sub
ほとんどコードは変わっていませんが、
これだと、a1:a30を削除しても、a1:j30を削除しても
b1:b30に、1~30が、入ります。
tom11さん、ありがとうございます!!
Target.Columns(1).Addressという記述もあるんですね。
まさに僕が欲しかった解決方法そのものです。
これはいろいろと応用できそうです。
本当に分かりづらい質問文にも関わらず、
丁寧でシンプルで的確なご回答、本当にありがとうございました!
No.1
- 回答日時:
どういう状況で使う必要があるのか理解できないが
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Selection.Columns.Count
If Target.Column = 1 And Selection.Columns.Count = 1 Then
MsgBox "A"
End If
End Sub
など参考になりませんか。
A.For Each tRANGE In Target
と全セルを繰り回していれば、時間かかる場合があろう。
B.Application.ScreenUpdating = False
を入れてみるとか
C.セルの削除のDeleteは時間がかかるようです。
ーー
A列と加えて他の列を範囲指定してA列の値を変更したとき
A列は触らず
B列に連番を振る。質問の意味が良くわからないのでこうした。
自信なし。都合の良いように修正してください。根本的に的外れなら
無視してください。
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "A"
Dim tRANGE As Range
If Target.Column = 1 And Selection.Columns.Count > 1 Then
Application.EnableEvents = False
i = 1
u = Target(1).Row
MsgBox u
h = Selection.Rows.Count
MsgBox h
d = u + h - 1
MsgBox d
For Each tRANGE In Range(Cells(1, "B"), Cells(d, "B"))
tRANGE = i
i = i + 1
Next
Application.EnableEvents = True
End If
End Sub
分かりづらい質問文にもかかわらず、早速のご回答を頂き、ありがとうございました。
EnableEventsは知らなかったので大変参考になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBA 選択範囲をTargetに
会計ソフト・業務用ソフト
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
エクセル マクロで セルの範囲を指定する方法
Visual Basic(VBA)
-
-
4
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
5
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
6
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
7
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
8
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
9
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
10
VBA たまに変数がempty値になるエラー
Excel(エクセル)
-
11
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
12
特定のセルがアクティブになったときのイベント?
Excel(エクセル)
-
13
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
14
エクセルVBA intersect columnsの複数列のやり方
Visual Basic(VBA)
-
15
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
-
16
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
17
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
18
エクセル:Targetの列番号を英字で出す
Excel(エクセル)
-
19
エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?
Excel(エクセル)
-
20
Excelでの名前定義に空白を使いたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
IIF関数の使い方
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
別シートのデータを参照して値...
-
VBAで、離れた複数の列に対して...
-
【Excel VBA】特定列相違により...
-
【VBA】2つのシートの値を比較...
-
VBAのFind関数で結合セルを検索...
-
Cellsのかっこの中はどっちが行...
-
VBAで条件から範囲を指定して色...
-
エラーコード1004
-
DataGridViewに空白がある場合...
-
VBAで重複データを確認したい
-
複数条件でのカウント
-
rowsとcolsの意味
-
データグリッドビューの一番最...
-
エクセルで結合セルがあるため...
-
【VBA】複数行あるカンマ区切り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
Changeイベントでの複数セルの...
-
【VBA】2つのシートの値を比較...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
DataGridViewに空白がある場合...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBA 列が空白なら別のマクロへ...
おすすめ情報