質問: excelのVBAで、セル範囲A1:B10の値で偶数のみ赤く塗りつぶす処理をコードにしたい 質問内容は上記の通りです。 ■実行すると以下のようなエラーが発生します。 ### 発生している問題・エラーメッセージ ``` 実行時エラー '13': 型が一致しません。 ``` ソースコード ------ Sub As() If Range("A1:B10") Mod 2=0 Then Range("A1:B10").Font.ColorIndex=3 Else End If End Sub
回答: エラーは、下記の行のIfの条件式 "Range("A1:B10") Mod 2=0"の部分で起きています。 Range("A1:B10")はセルの範囲(Range)なのに、整数に適用する剰余の演算子 Mod を使っているから「型が一致しません」(Modは、 3 Mod 2 のように 整数型の値 Mod 整数型の値というふうに使うもので、Range型の値 Mod 整数の値 という使い方はできません) ``` If Range("A1:B10") Mod 2=0 Then ``` Rangeに含まれる各セルは、RangeオブジェクトのCellsプロパティを使って参照します。 質問のコードを修正してみました。 ``` Sub As() '変数の定義 Dim row as Integer, col as Integer 'ループで使う 行と列のIndexの変数 for row=1 to 10 '1行目から10行目まで for col=1 to 2 'A列からB列まで If (Range("A1:B10").cells(row,col).value Mod 2) = 0 Then Range("A1:B10").cells(row,col).Font.ColorIndex = 3 End If next col next row End Sub ```