• 締切済み

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

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サイドが重いので、 時間を要してしますので困っています。 分かる方、是非よろしくお願い致します。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

  • nza49739
  • ベストアンサー率46% (29/62)
回答No.1

Colorの型はLong型のため、残念ながら設定できません。 色を設定する関数がColorしかないのですから、それで対処するしかないでしょう。 要はスピードをあげれれば良いわけですね。どれぐらいのスピードを求めているのか不明ですあ、パフォーマンスを上げる方法としては、以下の2点がありますので、お試しください。 1 セルを変更中は自動計算をOFFにする。 2 セルを変更中は画面更新をOFFにする。 です。それぞれVBAでは 1 Application.Calculation = xlCalculationManual 2 Application.ScreenUpdating = False です。

kimiyoshi
質問者

お礼

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

関連するQ&A