• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思ってお)

エクセルで特定の文字列の含まれるセルのある行の色を変更する方法

このQ&Aのポイント
  • エクセルで特定の文字列の含まれるセルのある行の色を変更するためには、VBAを使用する必要があります。関数では実現できないため、VBAで作業を行う必要があります。
  • 以下のようなVBAのコードを使用することで、特定の文字列の含まれるセルのある行の色を変更することができます。コードをシートの変更イベントで実行するように設定することで、全てのシートに反映させることができます。
  • ただし、上記のコードは1つのシートにしか反映されないため、全てのシートに対して同じ変更を行いたい場合は、コードを全てのシートに貼り付ける必要があります。複数のシートに対して同じ変更を行う場合は、ループ処理を使用するなどして、効率的に実現することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

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のマクロは消しておく。

kensansan
質問者

お礼

分かりやすいご説明、大変ありがとうございました! こちらのやり方で、実行が出来ました。 これからはVBAの勉強を少しずつ初めて行きたいと思っています。 助かりました!ありがとうございます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

こんなのエクセルー検索・置換で出来るのではないか。 >無知なので 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化したければ、この操作をマクロの記録を採ればよい。

kensansan
質問者

お礼

ご回答ありがとうございました。 そうですね、エクセルの機能をまずはもっと勉強すべきですね。おっしゃられる通りでございます。 頂きました内容、今後の参考に使わせていただきます。 ありがとうございました。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

このマクロで、本当に「特定の文字列の含まれるセルのある行の色を変更」出来たのでしょうか? Worksheet_Changeイベントは、セルが変更されたときに自動で実行されるもので、 この内容は、変更されたセルがA列の場合に、そのセルの行しか色は変わらないと思いますけど。 すべてのセルで[F2]とリターンを繰り返せば、出来ないこともありませんが。 それに、これは、「特定の文字列の含まれるセル」ではなく、「特定の文字列のセル」の処理ですよ。 部分一致ではなく、完全一致です。 それが望む仕様なら構わないのですが。 条件が○×△の3つだけなら、マクロを使わなくても、条件付き書式でできますよ。 シートの下にあるシートタブを右クリックして、「すべてのシートを選択」した状態のまま、 A2:L10000 を範囲選択し、 「書式 - 条件付き書式」で  「数式が」「=$A1="○"」    好きな書式を設定  「数式が」「=$A1="×"」    好きな書式を設定  「数式が」「=$A1="△"」    好きな書式を設定 にすれば良いです。 最初は条件が1つしか表示されないので、「追加(A)>>」ボタンで追加します。 そのあと、全シート選択を解除しないまま何かの処理をすると、全シートに反映されてしまうので、シートタブを触って、全シート選択を解除しましょう。

kensansan
質問者

お礼

VBAで更新が出来たのですが、データが重たくなってしまいましたので、教えていただいた通りの条件付き書式で対応が出来ました。 教えてくださいまして、ありがとうございました。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

提示されたマクロコードは、そのシートを変更したいときに自動的に実行されるようになっています。 したがって、他のシートでも実行したい場合は、このコードをコピーし、対象のシート名部分を右クリック「コードの表示」して「貼り付け」する必要がありあます。 あるいは、このイベントマクロが設定されているシートそのものをコピーして(シート名部分をドラッグ)、データ部分を後から追加あるいはコピー貼り付けする方法のほうが簡単かもしれません。

kensansan
質問者

お礼

ご回答ありがとうございました。 参考にさせていただきます。

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

VBを「Sheet1」にしか設定してないからですね。 Visual Basic Editorで開いたとき、左側のツリーでSheet1が選択され、その中に上記コードが書かれていると思います。 Sheet1用のコードなので、Sheet1にしか適用されません。 すべてのシートに適用したいなら、ツリー上に他のシート名もあるので、それぞれに同じコードを入力する必要があります。 ただ、上記の処理はVBを使わなくても条件付き書式でもできますね。 A2:L10000を選択した状態で、書式→条件付き書式を選択し、条件1を「数式が」にして「=$A2="○"」と入力し書式としてセル色のパターンを設定すれば、○がA列に入力したときにL列までのセル色が自動的に変わるようになります。 同様に×や△も条件を追加して設定すればまったく同じことができます。 ご参考まで。

kensansan
質問者

お礼

ご回答ありがとうございました。 皆様のご意見を聞いて、VBAのやり方と条件付き書式でそれぞれ実行してみました。 条件付き書式はご回答頂いたようなやり方で可能でした。 VBAにすると起動や保存に時間が結構かかってしまうのえ、条件付き書式を採用することにしました。 ご丁寧にありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

シートのモジュールに書き込んだと思います。 それを一旦消してから、 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) に変わってます。

kensansan
質問者

お礼

ご回答ありがとうございます。 >シートのモジュールに書き込んだと思います。 はい、その通りでした。 ThisWorkbookモジュールに記載したところ、全シートへの反映がされていました。 お手数おかけしました。ご親切にどうもありがとうございました。

関連するQ&A