从范围中获取所有单个单元格地址的最快方法

问题描述 投票:0回答:1

我需要一种非常快速的方法来获取某个范围内所有单元格地址的数组或列表。所以假设我有一个范围“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()
excel vba vsto
1个回答
0
投票

代码:

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 秒。

© www.soinside.com 2019 - 2024. All rights reserved.