ページ 1 / 1
VBAのセルの色変更
Posted: 2015年11月13日(金) 21:35
by 夢幻ノ月夜
ループでB2~J10の値を取得し、その値+2の色をそのセルの背景色にしたいのですが、
エラー1004が出て動きません
どこが悪いのでしょうか?
コード:
Sub ChangeColor()
Dim V As Variant
Dim i As Long
Dim j As Long
For i = 1 To 10
For j = 1 To 10
V = Cells(i, j)
Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V
Next
Next
End Sub
Re: VBAのセルの色変更
Posted: 2015年11月13日(金) 22:12
by box
夢幻ノ月夜 さんが書きました:
コード:
Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V
Range("ij")
という書き方は認められていないように思います。
Cells(i, j)
にしてみるとか。
Re: VBAのセルの色変更
Posted: 2015年11月13日(金) 22:17
by 夢幻ノ月夜
box さんが書きました:夢幻ノ月夜 さんが書きました:
コード:
Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V
Range("ij")
という書き方は認められていないように思います。
Cells(i, j)
にしてみるとか。
Cells(i,j)ってセルのアドレス返してくれるんですか?
Re: VBAのセルの色変更
Posted: 2015年11月14日(土) 00:14
by YuO
夢幻ノ月夜 さんが書きました:
コード:
Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V
"ij"という表記では,変数iおよび変数jの値は利用されないことは理解されていますか。
変数iおよび変数jの値を文字列として扱うならば,
コード:
Trim(CStr(i)) & Trim(CStr(j))
のように,文字列化して連結する必要があります。
ただし,
Workspace.Range プロパティの第1引数は,
- A1形式のセル参照文字列
- A1:A1形式のセル範囲参照文字列
- A:A形式のセル範囲参照文字列 (列全体)
- 1:1形式のセル範囲参照文字列 (行全体)
- ローカルに定義した名前 ([数式]タブ - [定義された名前]の項目で定義された物)
- 上記を,で区切った組み合わせ
のみが許されます。
なので,先のように文字列化しても,"11"のようになるだけなので,許されない文字列になります。
box さんが書きました:Range("ij")
という書き方は認められていないように思います。
認められてはいるけれど,"ij"というローカルに定義した名前を参照することになります。
"ij"が定義されていなければ,当然エラーです。
夢幻ノ月夜 さんが書きました:Cells(i,j)ってセルのアドレス返してくれるんですか?
Worksheet.Cells プロパティは,対象となるWorksheet全てを表す
Range オブジェクトを返します。
そして,Rangeオブジェクトの既定のプロパティは
Item プロパティであるため,
コード:
sheet.Cells(row, column)
は
コード:
sheet.Cells.Item(row, column)
として扱われます。
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]