さまざまなワークシートに配置された数千の定義済みの名前領域を持つワークブックがあります。それらをすべて抽出して、別のワークブックに並べようとしています。
定義された名前領域のほとんどは 1 行の高さ (および数百列の幅) ですが、3 ~ 4 行の高さのものもいくつかあります。
たとえば、
名前1
10 5 10 12 30 10 12 10 5 10 12 30 10 12 ...
名前2
10 11 10 12 30 10 12 10 11 10 12 30 10 12 ...
10 11 10 12 30 10 12 10 11 10 12 30 10 12 ...
10 11 10 12 30 10 12 10 11 10 12 30 10 12 ...
リージョンの高さが複数行ある場合、列全体の SUM を取得して 1 行にまとめたいと思います。
したがって、Name2は次のように新しいワークブックにコピーされます。
30 33 30 36 90 30 36 30 33 30 36 90 30 36
リージョンの高さが 1 行の場合に完全に (そして高速に!) 動作する VBA/VBS を作成しましたが、より高いリージョンを効率的に合計する方法がわかりません。
以下の疑問符を埋める最良の方法は何ですか?
これまでのところ、私のコードでは、領域のセルを明示的にループする必要はありませんでした。ここでもそうならないことを願っています。アドバイスをいただければ幸いです。
Dim irow
irow = 0
Dim colsum
'rem Loop through all names and copy over the valid ones
For Each nm in wbSource.Names
'rem Dont copy any name that isnt visible
If nm.Visible = True Then
'rem Only copy valid references that start with "ByWeek"
If InStr(1, nm.RefersTo, "#REF") = 0 And InStr(1, nm.Name, "ByWeek") > 0 Then
'rem Only copy if the range is one row tall
If nm.RefersToRange.Row.Count = 1 Then
wsDest.Range("A3").Offset(irow, 0).Value = nm.Name
wsDest.Range("A3",wsDest.Cells(3,nm.RefersToRange.Columns.Count+1)).Offset(irow, 1).Value = nm.RefersToRange.Value
irow = irow + 1
' rem If the named region is several rows tall, then squish it into one row by taking SUM of each column
elseif nm.RefersToRange.Row.Count > 1 Then
wsDest.Range("A3").Offset(irow, 0).Value = nm.Name
???????????????????????????????????
irow = irow + 1
End If
End If
End if
Next