- 締切済み
エクセル cellから配列への取り込み
お世話になります。 環境は、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になってしまい、配列になりません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
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列の背景インデックスのリストが出来上がります。
お礼
ありがとうございます。 やはり、作業用の列なり、シートなりを使用しないとだめそうですね。