• ベストアンサー

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

専門家に質問してみよう