VBAのセルの色変更

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
夢幻ノ月夜
記事: 143
登録日時: 9年前
住所: Stens;Gate世界線

VBAのセルの色変更

#1

投稿記事 by 夢幻ノ月夜 » 8年前

ループで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
毎回ゲーム作ろうとするたびに壁にぶち当たる

box
記事: 2002
登録日時: 13年前

Re: VBAのセルの色変更

#2

投稿記事 by box » 8年前

夢幻ノ月夜 さんが書きました:

コード:

        Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V
Range("ij")
という書き方は認められていないように思います。
Cells(i, j)
にしてみるとか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
夢幻ノ月夜
記事: 143
登録日時: 9年前
住所: Stens;Gate世界線

Re: VBAのセルの色変更

#3

投稿記事 by 夢幻ノ月夜 » 8年前

box さんが書きました:
夢幻ノ月夜 さんが書きました:

コード:

        Worksheets("問1").Range("ij").Interior.ColorIndex = 2 + V
Range("ij")
という書き方は認められていないように思います。
Cells(i, j)
にしてみるとか。
Cells(i,j)ってセルのアドレス返してくれるんですか?
毎回ゲーム作ろうとするたびに壁にぶち当たる

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: VBAのセルの色変更

#4

投稿記事 by YuO » 8年前

夢幻ノ月夜 さんが書きました:

コード:

        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]

閉鎖

“C言語何でも質問掲示板” へ戻る