我有一个工作簿,其中有数千个位于各种工作表中的已定义名称区域。我正在尝试将它们全部提取出来并将它们排列在另一个工作簿中。
大多数定义的名称区域都是 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 将其折叠为单行。
因此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