
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も見ています
-
VBAにてcolorindexを変数に格納する事は可能でしょうか?
Visual Basic(VBA)
-
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
配列のペースト出力結果の書式について
Visual Basic(VBA)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
VBAで配列の計算
Excel(エクセル)
-
7
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
8
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
9
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
10
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
11
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
12
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
13
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
14
Excelの入力規則で2列表示したい
Excel(エクセル)
-
15
UserForm1.Showでエラーになります。
工学
-
16
エクセルVBA Unionはなぜ遅い?
Visual Basic(VBA)
-
17
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
18
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表にフィルターをかけ、絞った...
-
【VBA】ユーザーフォーム リス...
-
16進数から2進数へ
-
配列に画像を格納
-
array関数で格納した配列の型を...
-
FileListBoxでの複数ファイル選択
-
[エクセル]連続する指定範囲か...
-
[VBA]改行入りのセルの値を配列...
-
C#での動的配列作成方法について
-
VB6.0 ファイルの一括読込み
-
INDEX(D:D,L3)の意味は?
-
エクセルの関数 一列おき 文...
-
【C#】二次元配列へのcsvファイ...
-
Excelでエラー#N/Aを含む最小値...
-
C#で、引数における一次元と二...
-
csv形式のファイルを配列に...
-
ExcelのINDEXとMATCH関数でスピ...
-
EXCEL VBA カンマ区切りの文字...
-
Vba Validationの選択状態を知...
-
CSVファイルの読み込みと表示(V...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
表にフィルターをかけ、絞った...
-
array関数で格納した配列の型を...
-
【VBA】ユーザーフォーム リス...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
読み込みで一行おきに配列に格納
-
エクセルでエラーを無視して一...
-
VBAでの100万行以上のデータの...
-
.NET - 配列変数を省略可能の引...
-
iniファイルのキーと値を取得す...
-
Excel オートフィルタのリスト...
-
SUMPRODUCT関数を用いた最小値
-
VBA 配列に格納した値の平均の...
-
Datatableへの代入
-
VB6.0 ファイルの一括読込み
-
[VBA]改行入りのセルの値を配列...
おすすめ情報