我需要一种非常快速的方法来获取某个范围内所有单元格地址的数组或列表。所以假设我有一个范围“A2:B4”我需要一个数组A2,A3,A4,B2,B3,B4。现在我可以通过循环来做到这一点,但是当有 400.000 个单元格时,它将永远需要。有没有更智能、更快的方法? 我正在使用 C#,但 VBA 解决方案也很好。
我已经尝试了很多(通过并行处理、linq 等),但到目前为止它都太慢了,例如:
For Each cell In xlRange
addressTemp += cell.address.replace("$", "") & ";"
Next
or
Parallel.ForEach(xlRange.Cells.Cast(Of Excel.Range)(), Sub(cell) addressTemp .Add(cell.Address.Replace("$", ""))
End Sub)
or
addressTemp = Enumerable.Range(1, _xlRange.Cells.Count) _
.Select(Function(i) _xlRange.Cells(i).Address(False, False)) .ToList()
代码:
Sub CellAddresses()
Dim A, i As Long, j As Long, t As Double
Dim InputRng As Range
Set InputRng = Range("A2:B400000")
A = InputRng.Value
t = Timer
For i = 1 To UBound(A)
For j = 1 To UBound(A, 2)
A(i, j) = InputRng(i, j).Address(False, False)
Next j, i
MsgBox "Duration = " & Format(Timer - t, "0.00 s")
t = Timer
InputRng.Value = A
MsgBox "Duration = " & Format(Timer - t, "0.00 s")
End Sub
这 2 个部分中的每一个大约需要 2.5 秒。