
お世話になります。
いろいろなところでお力を受けて、
以下のようなVBAを作ったのですが、
このような記述ですと、複数セルを選択してペーストすると
エラーが出てしまい一括処理ができなくて困っております。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F:F,K:K")) Is Nothing Then
With Application
.EnableEvents = False
With Target
.Value = Application.Substitute(.Value, "A", "B")
.Value = Application.Substitute(.Value, "C", "D")
.Value = Application.Substitute(.Value, "E", "F")
.Value = Application.Substitute(.Value, "G", "H")
.Value = Application.Substitute(.Value, "H", "I")
If Target.Value = "J" Then Target.Interior.Color = vbYellow
If Target.Value = "K" Then Target.Interior.Color = 3329330
.Value = Application.Substitute(.Value, "J", "CR")
.Value = Application.Substitute(.Value, "K", "CR")
.Value = Application.Substitute(.Value, "M", "CR")
End With
.EnableEvents = True
End With
End If
End Sub
複数セルを選択して処理をするためには、
どのような記述にしたらよいでしょうか?
ご指導宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは
>どのような記述にしたらよいでしょうか?
記述の内容が複数セルをまとめて処理できるような内容ではないので、For~Nextなどで個々のセルを処理するようにすれば良いでしょう。
例えばこんな感じ。
※ 記述法は変えましたが、処理内容はご提示のロジックのままです。
※ ですので、色に関してはセルに色を付ける処理しかしていないため、色の付いているセルの値を削除しても、色はそのままで残ります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c, v, R, i
Set Target = Intersect(Target, Range("F:F,K:K"))
If Not Target Is Nothing Then
Application.EnableEvents = False
R = Split("A,B,C,D,E,F,G,I,H,I,J,CR,K,CR,M,CR", ",")
For Each c In Target.Cells
If c <> Empty Then
v = c.Text
If v = "J" Then c.Interior.Color = vbYellow
If v = "K" Then c.Interior.Color = 3329330
For i = 0 To 14 Step 2
v = Replace(v, R(i), R(i + 1))
Next i
c.Value = v
End If
Next c
Application.EnableEvents = True
End If
End Sub
ご指導ありがとうございます!
まだ、作業に移れておりませんが、
勉強しながらやってみたいと思います。
お返事が遅れてしまい申し訳ございませんでした。
No.3
- 回答日時:
こんにちは
イベントなどで使われている Target As Range は範囲なので複数のセル情報が入る場合があります(#1様が回答されている通りです)
既に処理コードも示されているので参考程度の情報です
Targetは複数のセル範囲を示す場合があり、所謂Object型の変数です
Objectやコレクションなどに対して繰り返し処理をすれば1つ1つ処理する事が可能ですよね
For Each r In ・・
Next
既に単セルに対して問題がない 処理が完成されているのなら
その処理を繰り返せば良い事になります For Eachループの中に入れる
今回はTargetの構造?なりが判れば解決できると思いました
一応、このような考え方でコードを示すと
(すべて当該モジュールに)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F:F,K:K")) Is Nothing Then
Application.EnableEvents = False
Dim r As Range
For Each r In Target.Cells
Call Target_Cells(r)
Next
Application.EnableEvents = True
End If
End Sub
Private Sub Target_Cells(r As Range)
With r
.Value = Application.Substitute(.Value, "A", "B")
.Value = Application.Substitute(.Value, "C", "D")
.Value = Application.Substitute(.Value, "E", "F")
.Value = Application.Substitute(.Value, "G", "H")
.Value = Application.Substitute(.Value, "H", "I")
If .Value = "J" Then .Interior.Color = vbYellow
If .Value = "K" Then .Interior.Color = 3329330
.Value = Application.Substitute(.Value, "J", "CR")
.Value = Application.Substitute(.Value, "K", "CR")
.Value = Application.Substitute(.Value, "M", "CR")
End With
End Sub
(プロシージャに分けました。プロシージャ名は適時に)
本当は#2様の示されているようなコードがすんなり浮かべば良いのですが
大変勉強になりました。
ベストに選びたかったのですが、
二番の方がお早く回答して下さったので、
そちらにつけさせていただきました。
この度はありがとうございました。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
-
4
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
5
エクセルVBA intersect columnsの複数列のやり方
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
10
エクセルVBA 複数行にまたがっている選択を判定するには
Excel(エクセル)
-
11
エクセル:Worksheet_Changeのエラー回避
Excel(エクセル)
-
12
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
13
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
14
Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる
Visual Basic(VBA)
-
15
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
16
エクセルVBA/イベント発生でコピペ不能はなぜ?
Excel(エクセル)
-
17
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
18
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
19
エクセルVBA セルの入力後「Delete」キーを押したか判断するプログラム
Excel(エクセル)
-
20
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
どうやってもFor文を抜けてしま...
-
シグナル 6(SIGABRT)とは?
-
マクロで、次のコードへ行く前...
-
Word VBA。各マクロの間に待ち...
-
特定の名前のオートシェイプの...
-
IF文に時間(何時から何時ま...
-
C言語のGOTO文(組み込み系)
-
Excel VBA セルの名前があるか...
-
UWSCのTHREADについて
-
VB6.0で、ランタイムエラーを全...
-
エクセルVBAでロックをかけたい
-
¥マークを含むパスの処理につ...
-
フォルダのアクセス権確認について
-
Access プログレスバー 画面...
-
VBA For Each 〜 複数条件について
-
Functionで戻り値を複数返す方法
-
ドリブン??
-
VBA 複数の行を高速で削除する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
どう増強すべきか
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
特定の名前のオートシェイプの...
-
Excel VBA セルの名前があるか...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
特定のファイルを他のプロセス...
-
VB6にてネットワーク上にある共...
-
どうやってもFor文を抜けてしま...
-
Word VBA。各マクロの間に待ち...
-
エクセル VBAで複数セル選択時...
-
【VBA】エラー処理で別プロシー...
-
フォルダのアクセス権確認について
-
VBA For Each 〜 複数条件について
-
StatusStripの表示が更新されな...
-
【C#】Page_Loadさせない方法に...
おすすめ情報