別シートの対応するセルが空白ならフォント色を変更するには?

Question 78.1 Previous Next
どうもはじめまして。 今月より、仕事でVBAを使うことになり、右も左も分からないまま現在VBAでマクロを組んでいます。 その際どうしても解決できない問題があり、非常に困っています。 教えて頂けないでしょうか?
よろしくお願いします。

質問の内容は、シート1・シート2の間で同じ
カラムの値検索し、シート1にあってシート2に無い場合に、シート1の値を色を変えて表示するというものです。
ちなみにシート1とシート2のフォーマットは全然違うのですが、その
カラムの値だけは両方のシートで持っています。
Answer   Copyright (C) 2006.2.8 永井善王
回答に先立って、ちょっとだけ確認させてください。
ご質問文の中に
カラムの値 とありますのは「セルの値」のことであり、検索 とは「調べる」ことだと解釈して進めますが、よろしいでしょうか。
たとえば下図のように、Sheet1の A2セルが 空白でない(値がある)場合に、Sheet2の同じセル(A2)が空白だったら、Sheet1の A2セルのフォントの色を変えるとすると、次のようなマクロで可能になります。

Sub Sheet1の特定セルが空白でなくSheet2の同セルが空白ならフォント色を変更する()
10  セル = "A2"                                            '調査するセルを指定
20  With Worksheets("Sheet1")                              'Sheet1について処理
30     If .Range(セル).Value <> "" Then               '特定セルの値が空白でなければ
40        If Worksheets("Sheet2").Range(セル).Value = "" Then 'Sheet2の同セルが空白
50        .  Range(セル).Font.Color = RGB(255, 0, 255) '調査セルのフォント色設定
60        End If
70     End If
80  End With
End Sub
なお、今月からVBAを始められたということですので少し補足しておきます。
 1. 行番号はここでの説明用ですから本番では不要です。(有っても構いません)
 2. 30行目の空白セル、50行目のRGB関数などを知りたい場合は、末尾「参考ページ」をご覧ください。
  ここではフォント色の設定にRGB関数を使っていますが、カラーパレットのインデックス番号による方法もあります。
 3. 20~80行目の With制御構造は、その間のコードで
Worksheets("Sheet1") を省略して書くためのものです。
  省略しない書き方は下記のとおりで、どちらも機能は同等です。
Sub 対応するSheet2のセルが空白ならSheet1のセルのフォント色を変更する()
10  セル = "A2"
30      If Worksheets("Sheet1").Range(セル).Value <> "" Then
40          If Worksheets("Sheet2").Range(セル).Value = "" Then
50              Worksheets("Sheet1").Range(セル).Font.Color = RGB(255, 0, 255)
60          End If
70      End If
End Sub
参考ページ
 ・
セルの内容が空白か調べる
 ・色を指定する
 ・指定値以下のセルのフォント色を赤にするには
きっと上手くできると思いますから、今後も頑張ってください。 結果をお知らせくださると嬉しいです。

 

Excel VBA Macro