
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にてcolorindexを変数に格納する事は可能でしょうか?
Visual Basic(VBA)
-
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
配列のペースト出力結果の書式について
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
8
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
9
VBAで配列の計算
Excel(エクセル)
-
10
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
11
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
12
エラーになってないのにVBAが中断される
Excel(エクセル)
-
13
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
14
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
15
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
16
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
17
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
18
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
19
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
20
UserForm1.Showでエラーになります。
工学
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表にフィルターをかけ、絞った...
-
[エクセル]連続する指定範囲か...
-
array関数で格納した配列の型を...
-
エクセルで、絶対値の平均を算...
-
DataSetから、DataTableを取得...
-
CSVファイルの読み込みと表示(V...
-
スプレットシートのGetTextにつ...
-
C#で配列のフィールドを取得したい
-
Excel オートフィルタのリスト...
-
Datatableへの代入
-
VBAで指定期間の範囲を抽出し、...
-
配列の受け渡しについて
-
【VBA】ユーザーフォーム リス...
-
VB6.0 ファイルの一括読込み
-
[VBA]改行入りのセルの値を配列...
-
エクセル 条件を指定した標準...
-
Excelのオートフィルタで抽出し...
-
Excelのセルの色指定をVBAから...
-
SUMPRODUCT関数を用いた最小値
-
iniファイルのキーと値を取得す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのセルの色指定をVBAから...
-
array関数で格納した配列の型を...
-
【VBA】ユーザーフォーム リス...
-
Excel オートフィルタのリスト...
-
配列がとびとびである場合の書き方
-
iniファイルのキーと値を取得す...
-
.NET - 配列変数を省略可能の引...
-
DataSetから、DataTableを取得...
-
読み込みで一行おきに配列に格納
-
エクセルでエラーを無視して一...
-
VBAでの100万行以上のデータの...
-
配列のSession格納、及び取得方...
-
Datatableへの代入
-
[VBA]改行入りのセルの値を配列...
-
SUMPRODUCT関数を用いた最小値
-
エクセル 条件を指定した標準...
おすすめ情報