餃子を食べるとき、何をつけますか?

Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はありませんか?


例えば、セルに値を代入場合であれば、

Sub test()
Dim arr(2, 2) As Integer
Dim rg As Range
Set rg = Worksheets(1).Range("A1:B2")
arr(0, 0) = 1
arr(0, 1) = 0
arr(1, 0) = 0
arr(1, 1) = 1
rg.Value = arr  '<- これと同じように
End Sub

というように、セルへの値代入を配列を用いて、プロパティ呼出し1回で済ませることが出来ますよね。。

で、セルの色の場合も、同じように、

Sub test2()
Dim arr(2, 2) As Long
Dim rg As Range
Set rg = Worksheets(1).Range("A1:B2")

arr(0, 0) = RGB(0, 0, 0)
arr(0, 1) = RGB(0, 255, 0)
arr(1, 0) = RGB(0, 0, 255)
arr(1, 1) = RGB(255, 0, 0)
rg.Interior.Color = arr ' <- これをやりたい

End Sub

など、と書きたいのですが、最後の
rg.Interior.Color = arr
の所でエラー(型が一致しません)が出ます。

(全セレクトエリアが同カラーで指定だと、
rg.Interior.Color =RGB(0,0,0)
などと出来るのですが。。。)


オブジェクトの下のプロパティのプロパティを配列で
指定するうまい方法はありませんか?

セル毎にループで回すと、Excelサイドが重いので、
時間を要してしますので困っています。


分かる方、是非よろしくお願い致します。

A 回答 (2件)

こんにちは。



>rg.Interior.Color =RGB(0,0,0)

これは、ありえないです。配列には、受ける側も、同形の配列構造を持っているものでしか、配列構造を受け入れるようにはできておりません。考え方を変えるしかありません。

最初にひとつのパターンを作っておいて、範囲を選択して、プロパティのInterior.Color(または ColorIndex) を換えます。また、同じ色の場合だけを、Union やSelectで選択しておいて、一括して色を設定します。ループを使えば遅くなります。
例:
'-------------------------------------------
Sub Test2R()
  Dim arr(2, 2) As Long
  Dim rg As Range
  Set rg = ActiveSheet.Range("A1:B2")
  rg(1, 1).Interior.Color = RGB(0, 0, 0)
  rg(1, 2).Interior.Color = RGB(0, 255, 0)
  rg(2, 1).Interior.Color = RGB(0, 0, 255)
  rg(2, 2).Interior.Color = RGB(255, 0, 0)
  '上記をひとつのパターンとしておくなら
  rg.Copy Range("A3:B100") '←こうして広げます。
End Sub
    • good
    • 3

Colorの型はLong型のため、残念ながら設定できません。


色を設定する関数がColorしかないのですから、それで対処するしかないでしょう。
要はスピードをあげれれば良いわけですね。どれぐらいのスピードを求めているのか不明ですあ、パフォーマンスを上げる方法としては、以下の2点がありますので、お試しください。

1 セルを変更中は自動計算をOFFにする。
2 セルを変更中は画面更新をOFFにする。

です。それぞれVBAでは

1 Application.Calculation = xlCalculationManual
2 Application.ScreenUpdating = False

です。
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございました。
結構早くなりました。

お礼日時:2010/02/10 22:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A