プロが教えるわが家の防犯対策術!

お世話になります。

環境は、WindowsXpSp3、VB6sp6、MS-excel2003です。

処理内容は「エクセルのセル情報を元に条件判定を行い、結果を出力する」ものです。

現状、cellsオブジェクトの値と色からAND判定を行っています。
cells(r,c).value
cells(r,c).Interior.ColorIndex

色々と調べたところ、配列にすると「劇的に速くなる」ということがわかりました。
想像してみて「確かに」と思い、試してみたところ、range().valueとvariant配列で試したところ約30倍の速度になりました。
(この時はvalueのみで試しました。)

「色情報もインデックスだから・・・」と思い、合わせて試してみました。
しかし、セルの色情報となると、これを配列にすることができません。
エクセルの仕様上どうにもならないものなのでしょうか。
もし「裏技」的なものがあればお願いします。

欲しい情報はcellのvalueとColorIndexが対応した配列です。

ソースは関連する部分だけ書きました。
--------------------------------------
Dim varValueRange As Variant
Dim varColorRange As Variant

varValueRange = Range(Cells(1, 1), Cells(10000,1)).Value
varColorRange = Range(Cells(1,1),Cells(10000,1)).Interior.ColorIndex
--------------------------------------
varValueRangeの方は問題なく配列になります。
varColorRangeがNullになってしまい、配列になりません。

A 回答 (1件)

Interiorの配列は取れない、と決め打ちして・・・(細かく調べていません)



取得する値(A1:A10000)の隣(B1:B10000)に、背景色のインデックス値を並べておく、というのはどうでしょうか?
これなら、背景色のインデックスもA列同様に値の配列として取得することができます。B列は非表示にでもしておけばよいかと。B列がダメならもっと離れたところや別シートでもかまいません。

背景色のインデックスを取得する関数があるかどうかは探していません。私は標準モジュールを追加して、GetBackColorという関数を自作して試してみました。

[Module1]
Function GetBackColor(target As Range) As Long
GetBackColor = target.Interior.ColorIndex
End Function

B1に「=GetBackColor(A1)」と書いてB10000までフィルすればA列の背景インデックスのリストが出来上がります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり、作業用の列なり、シートなりを使用しないとだめそうですね。

お礼日時:2009/11/21 23:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!