
エクセルに入力されている特定の文字を探し出して隣のセルに色をつけたいと考えています。
検索の対象となるセルは全てのシートの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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) Excelについて▶あるセルに文字を入力すると、別のセルに色がつく(条件付き書式) 1 2022/03/27 16:43
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- その他(Microsoft Office) Excel2003,2007の作業です 2 2023/05/17 09:58
- その他(Microsoft Office) Excelの条件付き書式についての質問です。 2 2022/09/08 01:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
excel 小さすぎて見えないセル...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル マクロ オートフィ...
-
特定の文字がある行以外を削除...
-
Excelで非表示のセルをとばして...
-
エクセルVBA 最終行を選んで並...
-
A1に入力された文字列と同じ文...
-
excelのデータで色つき行の抽出...
-
エクセル 時間の表示形式AM/PM...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
Excel VBA 異なるファイルのシ...
-
エクセルマクロ オートSUM(合...
-
エクセル2016で時間を入力して...
-
Excelマクロ 期間を指定してデ...
-
Excel2007で、指定範囲の行高さ...
-
Excelのフィルター後の一番上の...
-
Excelで結合されたセルの間に列...
-
連続データが入った行の一番右...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル 上下で列幅を変えるには
-
[EXCEL]ボタン押す→時刻が表に...
-
Excelのフィルター後の一番上の...
-
エクセルで特定の文字列が入っ...
-
excelのデータで色つき行の抽出...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
結合されたセルをプルダウンの...
-
エクセル マクロ オートフィ...
-
excel 小さすぎて見えないセル...
-
Excel ウインドウ枠の固定をす...
-
EXCELで最後の行を固定
-
電話番号の入力方式が違うデー...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセル 時間の表示形式AM/PM...
-
連続データが入った行の一番右...
-
Excelで非表示のセルをとばして...
おすすめ情報