エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思っておりますが、関数では出来ないようなのでVBAで作業をしております。なかなかうまくいかずで困ってしまっております。
下記のような関数でシート一枚は出来たのですが、それ以外のシートには反映がされません。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
If Application.Intersect(Target, Range("A2:A10000")) Is Nothing Then Exit Sub
For Each r In Target
If r.Column = 1 Then
Select Case r.Value
Case "○": r.Resize(1, 12).Interior.ColorIndex = 19
Case "×": r.Resize(1, 12).Interior.ColorIndex = 3
Case "△": r.Resize(1, 12).Interior.ColorIndex = 6
Case Else: r.Resize(1, 12).Interior.ColorIndex = xlNone
End Select
End If
Next r
End Sub
無知なので、ネットで調べて上記のような数式を拾ってきたのですが、どうやら1シート分の設定に書かれているようです。。。
全シートに反映がされるように設定をするにはどこをどのように書き換えればよろしいでしょうか。
お分かりの方がいらっしゃいましたら、よろしくお願いいたします。
ALT+F11でVBE画面を出す
プロジェクトエクスプローラで,当該のブックのVBAProjectの中にあるThisWorkbookをWクリックする
現れたシートに下記をコピー貼り付ける
private sub Workbook_SheetChange(byval Sh as object, byval Target as range)
dim h as range, hx as range
dim c
set hx = application.intersect(target, sh.range("A:A"))
if hx is nothing then exit sub
for each h in hx
select case h.value
case "○"
c = 19
case "×"
c = 3
case "△"
c = 6
case else
c = xlnone
end select
h.resize(1, 12).interior.colorindex = c
next
end sub
#作業グループで操作してもエラーにならない対応
#ループする範囲の効率化
シート1のマクロは消しておく。
こんなのエクセルー検索・置換で出来るのではないか。
>無知なので
VBA云々するより、自分でエクセルの本体の機能を良く勉強するほうが肝心と思うが。
ーー
データセル範囲を範囲指定
編集ー置換ー
検索する文字列 *a* セルの値の文字列にaガ含まれている場合
置換する文字列 なし 書式 フォントー赤
シート
行
数式
全て置換をクリック
ーー
最近のエクセルバージョンでは置換後の書式設定が出来るはず。
個の操作をマクロの記録を採れば、VBA化できるはず。
上記は>特定の文字列が複数ある場合は1度では出来ないが、VBA化して直線的に場合のコードを並べれば1ぱっつで成就する。
================
その行のセルを全てを色を着けるなら
操作は
例えばA2:D7に
xx a
- xc ad
- asd
a d f g
d f g hh
s a s d
(注ーは空白セルを示す)
セル範囲を指定し
書式ー条件付き書式ー数式が
=COUNTIF($A2:$D2,"*a*")>=1
書式設定(例えばセルパターンの色グリーン)
OK
第6行目以外はセルがグリーンになる。
VBA化したければ、この操作をマクロの記録を採ればよい。
シートのモジュールに書き込んだと思います。
それを一旦消してから、
ThisWorkbookモジュールに
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim r As Range
If Application.Intersect(Target, Range("A2:A10000")) Is Nothing Then Exit Sub
For Each r In Target
If r.Column = 1 Then
Select Case r.Value
Case "○": r.Resize(1, 12).Interior.ColorIndex = 19
Case "×": r.Resize(1, 12).Interior.ColorIndex = 3
Case "△": r.Resize(1, 12).Interior.ColorIndex = 6
Case Else: r.Resize(1, 12).Interior.ColorIndex = xlNone
End Select
End If
Next r
End Sub
をコピペしてみてください。
そっくりですが、
Private Sub Worksheet_Change(ByVal Target As Range)
↓
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
に変わってます。
お礼
分かりやすいご説明、大変ありがとうございました! こちらのやり方で、実行が出来ました。 これからはVBAの勉強を少しずつ初めて行きたいと思っています。 助かりました!ありがとうございます。