お世話になります。
いろいろなところでお力を受けて、
以下のような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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
6
エクセル ダブルクリック入力の範囲が複数の場合
Excel(エクセル)
-
7
Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
10
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
11
TextBoxから数字が文字として入力される?
Visual Basic(VBA)
-
12
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
13
エクセル UserForm 呼び出しでフリーズしてしまいます
その他(Microsoft Office)
-
14
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
-
15
Excel Vbaを使って 結合セルをダブルクリックでチェックマークしたいのですが手順を教えてくださ
Excel(エクセル)
-
16
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
17
エクセルマクロで結合されたセルをダブルクリックで指定文字を入力
Excel(エクセル)
-
18
VBA target.offset セル結合
Excel(エクセル)
-
19
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どう増強すべきか
-
シェルスクリプトでファイル内...
-
iPhoneのニューラルエンジンっ...
-
Functionで戻り値を複数返す方法
-
private subモジュールを他のモ...
-
VCでビープ音を鳴らし続ける
-
フォルダのアクセス権確認について
-
VBA Column型は存在しないの?
-
StatusStripの表示が更新されな...
-
エクセル画面のちらつきなくす...
-
エクセルVBAでプロシージャ名を...
-
特定の名前のオートシェイプの...
-
マクロで、次のコードへ行く前...
-
特定のファイルを他のプロセス...
-
VBAでのマクロ実行中のオーバー...
-
ExcelのVBAで、選択したファイ...
-
【VBA】エラー処理で別プロシー...
-
ASP.NETで特定のページだけ文字...
-
For ~ Next文
-
時間間隔の計算方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
シグナル 6(SIGABRT)とは?
-
Functionで戻り値を複数返す方法
-
特定の名前のオートシェイプの...
-
ExcelのVBAで、選択したファイ...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
VBA 複数の行を高速で削除する...
-
Excel VBA セルの名前があるか...
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
シェルスクリプトでファイル内...
-
【Vb.net】プリンタジョブの取得
-
vbaのエラー対応(実行時エラー...
-
VBAでBook読み込み時の非表示方...
おすすめ情報