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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) excel vbaの配列なんですが・・・ 1 2022/12/26 18:50
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) vb.netです。2次元配列の要素をFor Eachでひとつづつ取得したい。 4 2022/07/05 11:30
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
VBAにてcolorindexを変数に格納する事は可能でしょうか?
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
エクセルVBAで複数セルの色を変更する方法
Excel(エクセル)
-
6
エクセルでエラーが出て困っています。
Excel(エクセル)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
9
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
10
VBAで配列の計算
Excel(エクセル)
-
11
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
12
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
13
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
14
cellsで特定の離れた範囲を選択する方法は?
Visual Basic(VBA)
-
15
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
16
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
17
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
18
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
19
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
20
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dictionaryを使い4つの条件の一...
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
構造体を使っての集約、並べ替...
-
エクセルでエラーを無視して一...
-
[VBA]改行入りのセルの値を配列...
-
SUMPRODUCT関数を用いた最小値
-
VBA 配列に格納した値の平均の...
-
最小値を求める方法
-
FileListBoxでの複数ファイル選択
-
エクセルで、絶対値の平均を算...
-
【VBA】ユーザーフォーム リス...
-
16進数から2進数へ
-
VBAで指定期間の範囲を抽出し、...
-
スプレットシートのGetTextにつ...
-
テキストファイルを配列に
-
Split関数でLong配列に格納する...
-
VBA listBoxについて
-
読み込みで一行おきに配列に格納
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
Excelのセルの色指定をVBAから...
-
[エクセル]連続する指定範囲か...
-
エクセルで、絶対値の平均を算...
-
VBA listBoxについて
-
表にフィルターをかけ、絞った...
-
VBA 配列に格納した値の平均の...
-
iniファイルのキーと値を取得す...
-
[VBA]改行入りのセルの値を配列...
-
配列がとびとびである場合の書き方
-
エクセルでエラーを無視して一...
-
DataSetから、DataTableを取得...
-
Excel オートフィルタのリスト...
-
Split関数でLong配列に格納する...
-
読み込みで一行おきに配列に格納
-
VB6.0 ファイルの一括読込み
-
SUMPRODUCT関数を用いた最小値
-
For Nextマクロの高速化につい...
-
Dictionaryを使い4つの条件の一...
おすすめ情報