• ベストアンサー

VBAで列の比較をする

列Aを基準として、列Aと列Bを比較して異なっているセルがあればセルを赤くしたいプログラムを作りたいのですが、スキルが無い為にどのように作ってよいのかわかりません。 すみませんが、アドバイスをお願いいたします。

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

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

> 列Aを基準として、列Aと列Bを比較して異なっているセルがあればセルを赤くしたい これじゃ、No1さんのようにしか解釈できませんよ。 ご希望はこうですか? Sub test2() last = Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row 'A列最終行 last2 = Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Row 'B列最終行 For i = 1 To last2 'B列1行から最終行までを検索値とする Set x = ActiveSheet.Range("A1:A" & last).Find(What:=Cells(i, "B").Value, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 'A列1行から最終行までを検索 If x Is Nothing Then Cells(i, "B").Interior.ColorIndex = 3 '無ければ赤く Next End Sub

その他の回答 (6)

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.7

#5です #6さんの懸念事項が、見事自分が記述した条件付書式にハマってます orz #5で提示したことは忘れて#6さんの回答を参照して下さい or2

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.6

こんにちは。maruru01です。 私も条件付書式での方法を。 B1を選択して、条件付書式で、 「数式が」 「=NOT(COUNTIF(A:A,B1))*LEN(B1)」 として、書式を設定します。 あとは、これをB列下行へ書式コピー。 ところで、これだとアルファベットの大文字と小文字が区別されません。 大文字と小文字をきちんと区別したい場合は、条件付書式の数式を、 「=NOT(OR(EXACT(($A$1:$A$10),B1)))*LEN(B1)」 にします。 なお、A列の範囲は適宜変更して下さい。 ただし、後者の場合は、「A:A」のような列全体の指定は出来ません。 必ず、「$A$1:$A$10」のように、範囲で指定(かつ絶対参照で)して下さい。 (A列めいっぱい指定したいなら、「$A$1:$A$65535」にでもして下さい。)

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.5

すごいですね "専門家"と"一般人"が「自信あり」で入り乱れています 質問者さんが「VBA」でと要望されているので皆さんVBAのコードで回答されていますが、 VBAを使用しない方法を置いときますね 条件付書式: 「数式が」「=B1<>INDEX($A$1:$A$65535,MATCH(B1,$A$1:$A$65535))」

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

少し、質問の文章とご要望は違っているようですね。 後は、工夫してみてください。 Sub test()  Dim r As Range  Dim c As Range  Dim rtn As Variant 'Matchの戻り値  With ActiveSheet   Set r = .Range("A1", .Range("A65536").End(xlUp))   Set s = .Range("B1", .Range("B65536").End(xlUp))   For Each c In s    rtn = Application.Match(c.Value, r, 0)    If IsError(rtn) Then     c.Interior.ColorIndex = 3 'パターン赤    End If   Next c  End With End Sub

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

#1の方の式では列AとBが同じ値のセルが赤くなってしまいます。 B列を選択しメニューの書式の条件付き書式で [数式が]を選び =A1<>B1 と設定してください。書式はパターンで赤を選択。 これで列Aと列Bを比較して異なっているセルがあればセルを赤くできます。 または 条件付き書式で[セルの値が]を選び[次の値に等しくない]を選び=A1と設定してください。書式はパターンで赤を選択。 マクロを記述するならこんな感じです。 Sub Macro1() Columns("B:B").Select Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=A1<>B1" Selection.FormatConditions(1).Interior.ColorIndex = 3 End Sub

回答No.1

エクセルでしたらVBAを使用しなくても B列を選択した状態でメニューバーの[書式]→[条件付き書式] [数式が][=A1=B1]と設定して [書式]の[パターン]で背景を赤に設定すればできます。

arima8874
質問者

補足

A1セルとB1セルを対で比較するのではなく、 A列(ソートされていない)、B列(ソートされていない)ものでも異なっている部分を 発見し、セルを赤くさせるということです。 例 A B B C C F D A この場合FがA列に存在しないので、赤くする。 ということです。すみませんが、アドバイスをお願いします。

関連するQ&A

  • Excel VBAでの値の比較

    お世話になります。 Excel VBAでの値の比較方法についてご教授頂きたく存じます。 下記のような値がセルに入っていると仮定しまして、 セルA1とセルG1を比較する セルA2とセルG2を比較する セルB1とセルH1を比較する セルB2とセルH2を比較する 値が違う場合のみ、A列、又は、B列のセルの色を変更したいのですが・・・。 下記例の場合であれば、B1とA2がセルの色が変われば良いです。    A列 B列    G列 H列 1行  1  1     1   2 2行  2  2     3   2 VBAで実現したいと思います。 何卒、宜しくお願い申し上げます。

  • 列比較での値コピーについて

    エクセルに詳しくなく、2回に分けての操作でも構いませんので、簡単なやり方を教えてください。 A列の各セルに文字が並んでいます。 C列にも同様に文字が並んでいるのですが、A列とは並び順が異なります。 C列のセルをA列と比較し、文字が同一のセルがあれば、そのセルの隣のB列のセルの文字をC列の隣のD列のセルにコピーしたいと考えています。 具体的には、C1の文字をA列と比較し、仮にA300の文字と同一となれば、B300の文字をD1のセルにコピーをするということです。 同様に、C2の文字をA列と比較してを繰り返す感じです。 よろしくお願いします。

  • 文字列の比較

    excelvbaです。(excel2003) 3個のセル(a1,b1,c1)に文字列が入っています。 このそれぞれ文字列の右8桁を比較し、 最小の文字列が入っているセルに色を付けたいのです。 調べたら、minは使えませんし、dminがありましたが、 right(range("A1").value,8)をどう扱うかが分かりません。 出来ましたら、dminでなく他の方法が在ればベターです。 宜しくお願いします。

  • エクセル関数 複数列の比較

    エクセル2013を使用しております。 A列の中の値を比較し、同じ値のセルを探します。その中で、更にB列を比較し値が違うセルを知りたいのです。 どなたか、お知恵をお貸しください。

  • エクセルでの列と列の比較、重複データ個数抽出

    すいません。どなたか教えてください。 今、エクセル2003を使用しているのですが、ある条件でデータの個数が抽出出来ません。 お知恵をお貸しください。   A列 B列 1 あ   あ 2 い   う 3 う    い 4 え    5 お   か A列とB列を比べると、「あ、い、う」の3つのデータが重複しています。 そこで、一つのセルで3個とい値を返したいです。 条件として、 ・計算用のシートや別セルを使わずに、例えば、C1などの1つのセルの中で関数を使用して個数を出したいです。 ・できたらマクロも使用しないでやりたいです。 ・数字ではなく、文字列の比較で、空白行もあります。 やはり、列同士の比較は一つのセルの中でやることは不可能なのでしょうか? どなたかよろしくお願いいたします。

  • 列ごとの数値の一致と不一致を調べるVBAについて

    画像のように各列ごとにランダムな数値が入力されています。この時に各列ごとに同じ数値が入っているかいないかを調べたいのですが、どのようにプログラムを作ればいいかわからなく質問しました。 画像の内容としては、列Aのセル中の数値と列Bのセル中の数値は一致しないのでB15セルに"1" 列Aのセル中の数値と列Cのセル中の数値は『66』が一致するのでC15セルには何も入力せず というように D15セルは列Aと列Dの一致、不一致の結果 C16セルは列Bと列Cの一致、不一致の結果 D16セルは列Bと列Dの一致、不一致の結果 D17セルは列Cと列Dの一致、不一致の結果 を入力できるプログラムがあれば教えていただければ幸いです。よろしくお願いします。

  • VBAで文字列を分割して比較

    エクセルでこんな事をしたいんですけど、どうしたらいいか教えてください! A1 教えて!goo #1マイクロエクセル A2 教えてgoo #1マイクロアクセス A3 教えて!goo #1マイクロワード A4 新・教えて!goo #1マイクロエクセル A5 教えて!goo #2マイクロエクセル B1 ようこそ「教えて!goo 」へ C1 1 D1 マイクロソフト エクセル アクセス A列のセルの内容がB1,C1,D1の内容と比較して正しいかどうかチェックさせたいんです。 ポイント 1、A列は字数の制限がありB1とD1の内容をアットランダムに縮めてある   (A1の"マイクロエクセル"という文字列がD1にあるかどうかでは不十分) 2、B1の値は必ず半角整数で、A列では"#"の後に入っている 3、A列=B1&C1&D1という並びは固定 4、スペースは無視 上記の場合 A1=TRUE A2=TRUE A3=FALSE A4=FALSE A5=FALSE が返せればOKです。 特に教えて欲しいところはA列の区切り方 ("#"の左右で区切るには?) (整数とその後で区切るには?) と、アットランダムに縮められた文字列を どうやって照合させたらいいかという点です。 もしいくつかの方法があるのでしたら、 出来るだけ動きが軽いほうが嬉しいです。 (A列のデータが膨大なので) よろしくお願いします。

  • Excel 列と列の比較

    過去の質問を調べたのですが、分からなかったので教えてください。 ExcelでA列とB列を比較し、A列にもB列にもなかった数字を抽出したいです。 具体的には、 A列 B列 101 101 102 103 104 105 105 106 106 107 という値だと、 102 103 104 107 という数字を、C列とかに抽出したいのですが、どうすれば良いか分かるでしょうか?

  • 文字列を比較するプログラム

    キーボードより文字列aと文字列bを入力し、比較する(どちらが辞書並びで先かを表示する)プログラムを作れ。但し、strcmp関数を用いてはならない。 という問題があるんですが文字列の比較のしかたがまったくわかりません。わかりやすく教えていただけるとありがたいです。

  • 【マクロ】列比較し色塗りしていく

       A             B               C 1 豚汁           豚の角煮          カレー 2 カレーライス      クリームカレー        煮    3 味噌汁         ハンバーグシチュー    ライス   4 ハンバーグ       赤飯             シチュー 5 オムレツ        鯖の味噌煮 6 オムライス 7 豚汁   EXCELに上記のようにA列、B列、C列にメニューが書いてあります。 【やりたいこと2点】 (1)A列とC列を比較 上から順にC列に入っている文字がA列のいずれかに含まれて(部分一致して)いれば、 セルを赤色に色塗り。 例)C1の「カレー」はA列の「カレーライス」に部分一致していますので 『C1』のセルを赤塗り、続いてC2の「煮」はA列のいずれかにも一致していないので、そのまま。 C3の「ライス」は「カレーライス」「オムライス」に部分一致していますので 『C3』のセルを赤塗り・・・・・ というように、C列に入っている値を上から順に見て行き赤塗りorそのままというように チェックを行いたいです。 (2)A列とB列とC列を比較 上から順にC列に入っている文字がA列、B列のどちらにも含まれていれば(部分一致)していれば、 セルを緑色に色塗り。 ※(1)の作業で赤塗になった箇所は上書きで緑になってOKです。 例)C1の「カレー」はA列の「カレーライス」B列の「クリームカレー」に部分一致しているので 『C1』のセルを"赤塗り"⇒"緑塗り"に変更、続いてC2の「煮」はB列に部分一致するメニューがあるが A列には存在しないので、セルの色はそのまま。 というように、Cの列に入っている値を上から順に見て行き緑塗りorそのままというように チェックを行いたいです。 お手数おかけ致しますがご教示お願い出来ませんでしょうか。 どうぞよろしくお願い致します。