エクセルVBAでリストにある文字列と他のセルの文字列が末尾まで完全に同一の場合、セルに色を塗る方法

このQ&Aのポイント
  • エクセルVBAを使用して、特定のリストにある文字列と他のセルの文字列が末尾まで完全に同一の場合、セルに色を塗る方法を紹介します。
  • 具体的には、G列にあるリストの文字列とB2:B7とE2:E7の範囲の文字列を比較し、完全に同一の場合はB2:B7とE2:E7のセルに黄色で色を塗ります。
  • また、リストにはあるけれども、B2:B7とE2:E7のセルに存在しない文字列がある場合は、リストの該当するセルに緑で色を塗ります。
回答を見る
  • ベストアンサー

文字列が同じ場合、セルに色を塗りたい

エクセル VBAでリストにある文字列と他のセルの文字列が末尾まで完全に同一の場合、 セルに色を塗るにはどのようなコードを記入すればよろしいでしょうか? 具体的には下記のような動きができればと考えております。 G列にリストがあります。(G列のリストの数は変動します) このリストの文字列とB2:B7とE2:E7の範囲の文字列が末尾まで完全に同一の場合、 B2:B7とE2:E7のセルに黄色で色を塗る。 また、リストにはあるけど、B2:B7とE2:E7のセルにない文字列がある場合、 リストのその文字列があるセルに緑で色を塗る。 上記のような動きをするには、エクセル VBA でどのようなコードを記入すればよろしいでしょうか? エクセルは2010及び2007を使用しております。 よろしくお願いします。

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

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

黄色も緑もやることは一緒です。参考にして、適切に応用してください。 sub macro1()  dim h as range  dim target as range  dim lastrow as long  set target = range("B2:B7,E2:E7")  lastrow = range("G65536").end(xlup).row  for each h in target   if h <> "" and application.countif(range("G2:G" & lastrow), h) > 0 then    h.interior.colorindex = 6   else    h.interior.colorindex = xlnone   end if  next  for each h in range("G2:G" & lastrow)   if h <> "" and application.countif(target.areas(1), h) = 0 and application.countif(target.areas(2), h)=0 then    h.interior.colorindex = 4   else    h.interior.colorindex = xlnone   end if  next end sub #もっとも、わざわざマクロなど持ち出さなくても、条件付き書式で十分に出来ます。が、まぁマクロでやりたいなら。

n151713m
質問者

お礼

ありがとうございます。 勉強になります。

関連するQ&A

  • Excel 複数セルから文字列の検索、表示

    エクセル初心者です。 過去のものを探しては見ましたが、うまくキーワードを見つけられなかったので 質問させてください。 リストで次のようなものがあるとします。  A   B  C  D  E  F  G 1○ 12 45 - 98 - 2■ - - 12 - 06 3◇ 35 12 01 99 - 4× - - - - 12 5☆ 08 61 20 12 - このリストで各行ごとにB~F列のセルにある「1」で始まる文字列を検索して 該当する文字列をG列に表示する方法はありますでしょうか? 関数とかVBAについては???なので、わかり易くお教え頂けると助かります。 よろしくお願いいたします。

  • 隣りの列の文字を認識して連番を記入したい

    エクセル VBAで隣りの列の文字を認識して連番を記入するには どのようにすればよろしいでしょうか? 例えば、B列に文字や数字が適当にセルをあけて書いてあります。 この場合B列の文字や数字を認識して、文字、数字がある箇所のA列に 連番を記入するにはどのようにVBAのコードを記入すればよろしいでしょうか? (図を参照ください) 回答よろしくお願い致します。

  • 表にリストの文字列を含むセルに着色したい

    いつも大変お世話になっております。 添付図のような文字列がちりばめられた表から、範囲を指定してリストに入力した文字列を含むセルにリストの色で着色したい。 これを今まで手作業してましたが、ソロソロ限界ですので何とかならないかと。。。 例えば、A列からD列の表で、B5:C10の範囲を指定して、別に枠取りしたリストに文字列を入力すると、リストの色を前方一致で、図の場合、B7とC8が緑、B9は青に・・というように着色したいのです。 表の大きさやリストの対象文字列の数はシートによってマチマチです。 検索対象範囲、リストの範囲はコード中で指定出来れば汎用性がでるのでありがたいです。

  • 同じ文字列がある場合、行を合わせたい

    A列に品番、B列に型式、C列に数量、D列に品番、E列に型式、F列に数量の 項目があります。 A列~C列とD列~F列をそれぞれ一つの固まりとします。 A列(赤枠)とD列(青枠)の品番がそれぞれ同じ場合、 A列~C列とD列~F列の行を合わせたいのですが、 その場合、エクセル、VBAではどのようなコードを記入すればよろしいでしょうか? ※添付図参照ください ※リストの数は、毎回違います。 エクセルは2010,2007を使用しております。 回答よろしくお願い致します。

  • 塗りつぶしをしたセル色を特定のセルのフォント文字に

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Protect UserInterfaceOnly:=True Dim mycolor If Target.Column Mod 1 = 0 And Target.Column >= 4 And Target.Column <= 24 Then mycolor = Target.Interior.ColorIndex Range("B5:B38").Font.ColorIndex = xlAutomatic Range("B" & Target.Row).Font.ColorIndex = mycolor Else mycolor = xlAutomatic Range("B5:B38").Font.ColorIndex = xlAutomatic End If End Sub お世話になります、このコードは列D~Uまでの4~24列の特定の箇所のセルを塗りつぶしにしています。 その塗りつぶしたセルを選択されているとB5~B38に記入されている文字が塗りつぶされた文字と一緒になると言うVBAです。 質問がいくつかあります。 (1)D列~U列の38行目以降のセルを選択すると「FontクラスのColor Indexプロパティを設定出来ません。」となります。多分B38以降にはセルが塗りつぶしされておらず、B38以降に文字が書かれていないのでエラーとなってしまうのではないかと思います。これの解決策はありますか? (2)E5~E38のセルのどこでも良いので数字を入力したら、E5~E38が同じ数字に自動変換するVBAは出来るのでしょうか? (3)同じようにT5~T38のセルのどこでも良いので数字を入力したら、T5~T38が同じ数字に自動変換するVBAは出来るのでしょうか? (4)同じようにD6~D38のセルのどこでも良いので数字を入力したら、D6~D38が同じ数字に自動変換するVBAは出来るのでしょうか?

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • Excel VBA セル内の文字列操作について

    例えば、A列(A2より下のセル)のセル内にある文字列が、それぞれ対応するB列(B2より下のセル)のセル内にあった場合、該当文字列のフォントの色を変えたい(例えば「赤」)のですが、VBAで一括処理とかできるのでしょうか? <例> A列      B列 テスト     このテストは・・・ → 「テスト」の部分のみ赤色にしたい。 サンプル   サンプル     → 文字列全部分の「サンプル」を赤色にしたい。 どうかご教示の程よろしくお願いいたします。

  • Excelでセル内の文字列のみをコピーする方法

    Excelでセル内の文字列のみをクリップボードにコピーする方法を教えてください。 ※クリップボードにコピーをする方法であり、他のセルに値のみをペーストする方法ではありません。 満たしたい点は2つです。 ・表示している文字列のみを取得 ・複数のセルを同時にコピー 一つのセルに以下の文字列が入っていた場合(#以外) #123 #"abc" コピーするとクリップボードを文字列として取得すると以下の文字列が得られます #"123 #""abc""" これを以下の文字列が得られるようにしたいのです。 #123 #"abc" 1つのセルだけでいい場合は、セルを編集状態にしてコピーしたり アクティブセルの数式バーをコピーすればいいのですが、 これは当然、複数のセルを同時に選択する場合には使えません。 VBAを使う方法でもそうでなくてもかまいません。 (VBAの場合はコードもお願いしたいです) よろしくお願いします。

  • 300個の文字列を結合し1個のセルに

    ファイル名変更ソフト「Namery」に使うのですが、セル1個に 001> 001a|002> 001b|003> 001c|004> 002a|005> 002a|006> 002c このようにして 300> 100c| までの文字列つくれませんか? VBAをお願いしたいのです。あるいは下記のD1からD300のセルの文字列を合体してE1に表示、でも良いのですが。 VBAを知らないので、次のような作業を始めましたが途中で疲労困憊です。 A1に001をいれオートフィルでA300までつくり B1に半角スペース+001a B2に半角スペース+002b B3に半角スペース+003c としてから 100c迄オートフィルし C1 に=CONCATENATE(A1,B1) C1をコピーD1に「値のみ貼り付け」してからオートフィル。 出来たD1からD300の文字列を1セルの文字列にするために、エクセルの30個までの制限のため何段階にも作業を分けなければなりません。 ファイル名変更ソフト=Namery の[連続置換・正規表現]に文字列を入れ目的を果たしたいのです。 http://www.vector.co.jp/soft/win95/util/se217399.html

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

専門家に質問してみよう