投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/5/28 16:01:46
>  hani={A1:B2,F3:G6.....}
Dim r As Excel.Range = Sheet1.Range("A1:B2,F3:G6")
で、対象範囲を取得できます。

個々のエリアは、Areas プロパティ経由で切り出せます。
Dim oAreas As Excel.Areas = r.Areas
Dim r1 As Excel.Range = oAreas(1)   'A1から始まる横2×縦2の範囲
Dim r2 As Excel.Range = oAreas(2)   'F3から始まる横2×縦4の範囲

直接切り出してももちろん OK です。
Dim r1 As Excel.Range = Sheet1.Range("A1:B2") 
Dim r2 As Excel.Range = Sheet1.Range("F3:G6")


実際には切り出す個数が不定なので、r1,r2,r3… といった変数名では無く、
ループ処理するか、コレクションに蓄えるかすることになるでしょうけれども。


> hani={A1:B2,F3:G6.....}
>  たとえば、対象範囲が"A1:A2"の場合、
hani が A1:B2,F3:G6 で、対象範囲が "A1:A2" ということは、
B1:B2 などが含まれないことになりますよね。一列ずつ処理するという事ですか?


>   A1の集計
>   A2の集計
A1 や A2 を集計するのですか? 集計結果を A1 や A2 に書くのではなく?
"A1" も "A2" も単一セルなので、配列にする意味が思い当たらないのですが…。
("A1:B2" や "A1:B2,F3:G6" なら複数セルなので、集計という話も分かるのですが)


> ・集計対処のExcelは複数ファイルの複数シート。
Book1.xls(3シート) 上の Shet1!A1 + Sheet2!A1 + Sheet3!A1 と
Book2.xls(2シート) 上の Shet1!A1 + Sheet2!A1 を足し合わせた Book3 を作る感じですか?

あるいは、Book1.xls や Book2.xls を Result1.xls や Result2.xls などへと
個々のファイルごとに別名で保存する感じですか?


> ・集計対象の範囲(上記のhaniの部分)は複数あって、動的にしたい。
複数というのは、hani1 と hani2 と hani3 という意味では無く、
hani が複数のセル範囲("A1:B2,F3:G6" など)を含んでいるという意味ですか?


> 1ブロック目の結果をファイル数のシート数分、2次元配列に入れて書き込む。
> 次に2ブロック目・・・
状況がよく分かりませんが、同一シート上への書き込みであれば、
指定された A1:B2,F3:G6 という範囲を A1:G6(6行7列) に拡張してから
6行2列の二次元配列で処理することで、読み書きを一回で済ませられます。

もちろん、Areas などを通じて、A1:B2 エリアの処理と
F3:G6 エリアの処理に分けて処理しても構わないとは思いますが。


> 遅くなるのではと懸念しています。
まずは測定してみてください。
現在どの程度の時間がかかっていて、それをどの程度まで縮めたいのでしょうか?


> 苦手なので楽しい
被虐的…? (^^;