ループでB2~J10の値を取得し、その値+2の色をそのセルの背景色にしたいのですが、
エラー1004が出て動きません
どこが悪いのでしょうか?
VBAのセルの色変更
Re: VBAのセルの色変更
Range("ij")
という書き方は認められていないように思います。
Cells(i, j)
にしてみるとか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: VBAのセルの色変更
"ij"という表記では,変数iおよび変数jの値は利用されないことは理解されていますか。
変数iおよび変数jの値を文字列として扱うならば,のように,文字列化して連結する必要があります。
ただし,Workspace.Range プロパティの第1引数は,
- A1形式のセル参照文字列
- A1:A1形式のセル範囲参照文字列
- A:A形式のセル範囲参照文字列 (列全体)
- 1:1形式のセル範囲参照文字列 (行全体)
- ローカルに定義した名前 ([数式]タブ - [定義された名前]の項目で定義された物)
- 上記を,で区切った組み合わせ
なので,先のように文字列化しても,"11"のようになるだけなので,許されない文字列になります。
認められてはいるけれど,"ij"というローカルに定義した名前を参照することになります。box さんが書きました:Range("ij")
という書き方は認められていないように思います。
"ij"が定義されていなければ,当然エラーです。
Worksheet.Cells プロパティは,対象となるWorksheet全てを表すRange オブジェクトを返します。夢幻ノ月夜 さんが書きました:Cells(i,j)ってセルのアドレス返してくれるんですか?
そして,Rangeオブジェクトの既定のプロパティはItem プロパティであるため,はとして扱われます。
MSDNにあるように,Itemプロパティは,Range内のrow行目,column列目のセルを参照するRangeオブジェクトを返しますから,ワークシート全体からrow行column列目のRangeを取得することが出来ます。
……というか……
夢幻ノ月夜 さんが書きました:V = Cells(i, j) Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V [/quote] Vの取得にCellsプロパティ (対象オブジェクトを省略しているのでActiveSheet.Cells) を使っていますよね。 Vの型がVariantであるところや2 + Vのように使われているところをみると,Cells(i, j)がどういう型かを意識していないように思えますが, Cells(i, j)はRange型で,2 + Vではおそらく2 + CInt(V.Value)のように扱われているはずです。 [offtopic]そもそも,Worksheets("問1").Range("ij")はVではだめなのか,という疑問もありますが……[/offtopic]