
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件)
- 最新から表示
- 回答順に表示
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
No.1
- 回答日時:
Colorの型はLong型のため、残念ながら設定できません。
色を設定する関数がColorしかないのですから、それで対処するしかないでしょう。
要はスピードをあげれれば良いわけですね。どれぐらいのスピードを求めているのか不明ですあ、パフォーマンスを上げる方法としては、以下の2点がありますので、お試しください。
1 セルを変更中は自動計算をOFFにする。
2 セルを変更中は画面更新をOFFにする。
です。それぞれVBAでは
1 Application.Calculation = xlCalculationManual
2 Application.ScreenUpdating = False
です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
VBAにてcolorindexを変数に格納する事は可能でしょうか?
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセルへのデータの貼付時に書式が反映されない!
Visual Basic(VBA)
-
5
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
6
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
7
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
8
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
9
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
10
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
11
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
12
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
13
VBAで配列の計算
Excel(エクセル)
-
14
エクセルVBAで複数セルの色を変更する方法
Excel(エクセル)
-
15
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
16
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
17
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
18
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
19
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
20
array関数で格納した配列の型を変更する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
16進数から2進数へ
-
Split関数でLong配列に格納する...
-
DataSetから、DataTableを取得...
-
【VBA】ユーザーフォーム リス...
-
VBAでの100万行以上のデータの...
-
SUMPRODUCT関数を用いた最小値
-
仮想リストコントロールの表示
-
Dictionaryを使い4つの条件の一...
-
Dictionaryのitemを効率よく配...
-
Excel VBA 配列の分割について
-
表にフィルターをかけ、絞った...
-
Commandの分解
-
EXCEL VBA 2次元配列に格納さ...
-
Excel オートフィルタのリスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
エクセルで、絶対値の平均を算...
-
C言語で、変数名を引数として渡...
-
iniファイルのキーと値を取得す...
-
[VBA]改行入りのセルの値を配列...
-
配列がとびとびである場合の書き方
-
VBA 配列に格納した値の平均の...
-
【VBA】ユーザーフォーム リス...
-
DataSetから、DataTableを取得...
-
EXCEL VBA 2次元配列に格納さ...
-
スプレットシートのGetTextにつ...
-
VBAでの100万行以上のデータの...
-
VB6.0 ファイルの一括読込み
-
Split関数でLong配列に格納する...
-
Excel VBA 配列の分割について
-
Dictionaryを使い4つの条件の一...
-
配列のSession格納、及び取得方...
おすすめ情報