エクセルマクロを始めたばかりです。次のコードのどこが間違っているか教えてください。
Sub color_red()
Dim range As range
For R = 1 To 20
If Cells(R, 1).Value = 1 Then range(R, R).Interior.ColorIndex = 3
Next R
End Sub
表示されるエラー メッセージ:
オブジェクト変数またはWithブロック変数が設定されていません
ご指導ありがとうございました。
キーワード、関数、オブジェクト名、コレクション名などの VBA である変数名は使用できません。変数名を から に変更してみてrangeくださいrngTable。
その投稿のさまざまな領域にコメントとして書かれた追加情報の後に編集します。
ifコード行を次のように変更します。
If Cells(R,1).Value = 1 Then Cells(R,1).EntireRow.Interior.ColorIndex =3
行内のすべてのシート列に色を付けますR。特定の範囲に色を付けるには、たとえば 10 列で、の代わりに次の行を使用できますif。
If Cells(R,1).Value = 1 Then Cells(R,1).Resize(1,10).Interior.ColorIndex =3
このコードにはまだ問題があるようです。この簡単なサブルーチンを試してみてください。これが必要かもしれません:
Public Sub ColorRowIf()
Dim r As Long
For r = 1 To 20
If Cells(r, 1).value = 1 Then
Cells(r, 1).EntireRow.Interior.ColorIndex = 3
End If
Next r
End Sub
また、 「Cells()」を使用するのは良い方法ではありませんが、簡単にするためにそれを含めました(尋ねられたとおり)。「Cells()」は常にアクティブなシート セルを参照しますが、常にそうであるとは限りません。したがって、代わりにシートの完全な参照 (コード名メソッドによる) を使用する必要があります。したがって、この例では、次のように言う必要があります: Sheet1.Cells(r,1).Value = 1。また、Sheet1はタブ名ではなく、プロジェクト ウィンドウに表示されるコード名であることを覚えておいてください。
@KazJaw は正しいです。キーワードを変数名として使用することはできません。ただし、rangeorrngTable変数は、設定される前に引き続き使用されます。
変数を使用することもできますがRange、if ステートメントと同じアドレス指定方法を使用してみませんか?
If Cells(r, 1).Value = 1 Then Cells(r, 1).Interior.ColorIndex = 3
それ以外の場合は、使用する前に範囲オブジェクトを設定する必要があります:
Set rngTable = Cells(r, 1)
変数「R」が666バイト以外に定義されていないという事実について、多くの人が収集したように感じます。
使用する変数を宣言することは、コードを機能させるために重要なことです。