エクセルに入力されている特定の文字を探し出して隣のセルに色をつけたいと考えています。
検索の対象となるセルは全てのシートのB列です。
検索する文字は色々な英数字の組み合わせの中に含まれています。
A B
1 10 ABC000012
2 20 AAC000013
3 30 ACC000014
上記のような値が入力されている状態で、B列の"ABC"か"AAC"の何れかが入力されているセルの隣のA列のセルの色を変えたいです。
この場合はA1とA2のセルの色が変わるというイメージです。
VBAを使って処理したいのですが、どなたかご教授頂けないでしょうか。宜しくお願いいたします。
No.3ベストアンサー
- 回答日時:
VBAとのご所望なので一例です。
Sub test01()
Dim myRng As Range, c As Range, fAd As String, i As Long
Dim myStr
Set myRng = Range("B1", Cells(Rows.Count, "B").End(xlUp)) 'B列の検索範囲設定
For Each myStr In Array("ABC", "AAC") '指定の各検索文字につき
Set c = myRng.Find(What:=myStr, LookAt:=xlPart, After:=myRng.Cells(myRng.Count)) '部分一致検索
If Not c Is Nothing Then 'あったたら
fAd = c.Address '開始セルを記録
Do '繰り返す
i = i + 1 'カウント
c.Offset(0, -1).Interior.ColorIndex = 8 'セル着色
Set c = myRng.FindNext(c) '連続検索
Loop Until c.Address = fAd '一巡するまで'繰り返し
End If
Next myStr '次の検索文字に
If i = 0 Then 'なかったら
MsgBox "ありません", vbCritical, "? ( ̄~ ̄;)う~ん "
Else
MsgBox i & "件を発見しました。", vbInformation, " ( ̄ー ̄)v"
End If
Set myRng = Nothing
Set c = Nothing
End Sub
No.5
- 回答日時:
理解しやすさ重視で、超シンプルにいくと、
Sub 特定セル色付け()
行 = 1 '何行目から処理するか指定。今回は「1」行目から
Do While Cells(行, 2) <> "" 'B列の値が無くなる行まで、DoWhileとLoopの中を繰り返す
文字列 = Cells(行, 2)
If InStr(文字列, "ABC") >= 1 Or _
InStr(文字列, "AAC") >= 1 Then '文字列を含むかどうかの判定
Cells(行, 1).Interior.ColorIndex = 3 '変更後の色を指定 赤の場合「3」
End If
行 = 行 + 1
Loop
End Sub
でしょうか。
もし分かりにくい点があるとすれば
Do While 「条件式」
~
Loop
の部分かもしれませんが、これは「条件式を満たしている間(満たさなくなるまで)、Do WhileとLoopの中を繰り返せ」という意味です。
上の例だと、条件式が「 Cells(行, 2) <> "" 」の部分で、「セルが空白("")じゃない間(空白になるまで)、Do WhileとLoopの中を繰り返せ」つまり「セルが空白になったら終~了~~」という命令になります。
それまでの間、文字列を含むかどうかの判定と、色付けと、行を1つずつ増やす作業とを繰り返すことによって、作業が1行目からどんどん下に降りていくわけです。
ちなみに色番号表は参考リンクにきれいにまとめてくださってます。
はやく中級者以上になって、みんなにアドバイスできるような立場になってください。応援してます。
参考URL:http://www.ne.jp/asahi/mabu-messages/greetings-2 …
ご回答有難う御座います。
初心者にとってはとてもシンプルで分かりやすかったです。
皆様のご意見とミックスさせて頂き、とても良いものが完成しました。
また、温かいお言葉をかけて頂き大変感謝しております。
重ねて御礼申し上げます。
No.4
- 回答日時:
現状の能力以上の課題を丸投げした感じ。
何から手をつけてよいのか判らないのかな。
まず文章でVBA向けのすべきことの書上げが出来るようになることが肝心。
>全てのシートのB列です
これは、標準モジュールに置いて
Sub test02()
Dim sh As Worksheet
For Each sh In Worksheets
MsgBox sh.Name
Next
End Sub
をテスト実行して、全シートがShで捉えられることを実感すること。
ーー
>B列の"ABC"か"AAC"の何れかが入力されている。
各シートの全データ行を1行ずつ判別することになるから
最終行を捉える必要が有る。
Sub test03()
Dim sh As Worksheet
For Each sh In Worksheets
MsgBox sh.Range("B65536").End(xlUp).Row
Next
End Sub
で、策シートのB列の最下行(数)を捉えることを実感すること。
ーー
第1(正確にはデータ最初)行から最下行までのB列セルの値(文字列)をを注目し
For i=1 to d
p=Instr(Cells(i,"B"),"ABC")
If p<>0 Then
Cells(i,"A").Interior.ColorIndex=6 'この場合黄色
End If
重ねてすぐ下のコード行に
p=instr(cells(i,"B"),"AAC")
If p<>0 then
Cells(i,"A").Interior.ColorIndex=6
End If
Instr関数で"ABC"か"AAC"を含むかどうか判別するわけ。
ーー
結局、必要な要素技術(お決まりの少数行のコード)が何か、切り分ける力が十分無いのであろう。それはまづ文章で認識されてもよいものだ。
例 全てのシートをもれなく対象にするには
ーー
ただ処理方法(処理ロジック)は色々かんがえられて、それによって、必要な要素技術は別のものとなる場合が多い。
その良否は、処理ロジックが簡単なもの・コード数が少ないもの・誤りが起こりにくい簡単なもの・自分の使い慣れたものなどが望ましいだろう。
それは経験を積むしかない。
ーー
文字列がABC、AACだけでなく多数(十以上か目安か)あるときはIFブロックを重ねるのでなく、私なら他の方法でやる。
そういうのも、日ごろからポケット(やり方のヴァリエーション)をこつこつ増やしておかないとプログラムを組めない。
ご回答有難う御座います。
ご指摘の通りどのように手をつけていくのかが分からなかったのが実情でした。
大変丁寧な説明で段階的に処理を実感する事が出来、大変勉強になりました。
No.2
- 回答日時:
こんにちは。
No.1さんと同じ意見ですが、検索対象の文字が文字列のどの位置にあっても対応可能にする場合です。条件付き書式の数式を次のようにします。
=OR(ISERROR(FIND("ABC",B2,1))=FALSE,ISERROR(FIND("AAC",B2,1))=FALSE)
No.1
- 回答日時:
VBAを使って処理したいとのことですが、なぜVBAを使いたいのでしょうか?
VBAを使わなくてもできますが、そのことを知っている上で、VBAを使いたいのでしょうか?
質問者様が、VBAをどれくらい知っているのかが書かれていませんが、どれくらい知っているのでしょうか?
Findメソッドで、部分一致で検索し、OffsetプロパティやInteriorプロパティなどを使えば良いのですが、解りますか?
参考までに、VBAを使わずに、条件付書式で処理する方法を書いておきます。
A1の条件付書式で
数式を
=OR(LEFT(B1,3)="ABC",LEFT(B1,3)="AAC")
として、
A1をコピーし、A2以下に、「形式を選択して貼り付け」で書式だけを貼り付ければ良いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
ロボットの住む世界で流行ってる罰ゲームとは?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBAで特定の文字を探して隣のセルに色を付けたい
Excel(エクセル)
-
EXCEL VBA で特定の文字に色をつけるマクロを書きたいのですが
Excel(エクセル)
-
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
-
4
エクセル 特定の文字を入れると他のセルの色が変わる
Excel(エクセル)
-
5
【VBA】特定の範囲で同じ値を含むセルの色を変える
その他(Microsoft Office)
-
6
エクセルのマクロで複数のセルに色付する方法
Excel(エクセル)
-
7
エクセルVBAでコピーして順番に張り付けをしたい!
Visual Basic(VBA)
-
8
エクセルで隣(右or左)のセルと同じ文字色にしたい
Excel(エクセル)
-
9
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルマクロで偶数行(又は...
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
特定の文字がある行以外を削除...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
サイズの違うセル 並べ変え
-
完全一致したら代入するマクロ...
-
セルの色によって条件文をつけ...
-
Excel ウインドウ枠の固定をす...
-
Excel2007で、指定範囲の行高さ...
-
エクセル マクロ オートフィ...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
エクセル 上下で列幅を変えるには
-
Excel VBAで「セルが選択された...
-
excel 小さすぎて見えないセル...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
AのセルとB行を比較して、一致...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
特定の文字がある行以外を削除...
-
エクセル マクロ オートフィ...
-
[EXCEL]ボタン押す→時刻が表に...
-
AのセルとB行を比較して、一致...
-
VBAで色の付いているセルの行削除
-
Excel グラフのプロットからデ...
-
エクセル マクロで数値が変っ...
-
excel 小さすぎて見えないセル...
-
エクセル 上下で列幅を変えるには
-
罫線の斜線を自動で引くマクロ
-
結合されたセルをプルダウンの...
-
セルの色によって条件文をつけ...
-
エクセルのマクロで意図しない...
-
エクセルVBA 最終行を選んで並...
-
excelのデータで色つき行の抽出...
-
Excelのフィルター後の一番上の...
-
エクセル 時間の表示形式AM/PM...
-
Excelでカタカナ・ひらがな・英...
おすすめ情報