从范围创建二维数组

4

我在Excel工作表的单元格B6:H14中有文本数据。

有些行将拥有2个具有内容的单元格,而其他行则有4个或7个。我如何将它们复制到一个二维数组中?我已经知道了它们的维度,所以我可以接受不声明动态代码的维度。

我需要使用循环(我目前计划使用)吗?

还是有更简单/更优雅的方法?


4
我将这个投票降低了,因为你在请求帮助之前似乎没有尝试过任何方法。已有一些现成的答案,例如https://dev59.com/9GvXa4cB1Zd3GeqPKY93,可以提供帮助。 - brettdj
@brettdj实际上,你所链接的那个问题问的是如何将二维数组输出到范围中 - 这个问题是关于反向执行该操作的。 - Richard Le Mesurier
1
@RichardLeMesurier 这个问题展示了如何将一个范围放入数组中,对其进行操作,并将其转储回范围 - 也就是它同时实现了从范围到数组(这个问题所问的),以及从数组到范围的转换。这也是Mehow/VBA4All/It's been a Pleasure在回答时采用的相同方法。 - brettdj
1
@brettdj 好的,我只是觉得那些没有你或我的 VBA 知识的人可能会有困难意识到这一点。不过它们都是好答案。 - Richard Le Mesurier
@RichardLeMesurier 是的 - 你说得很有道理。 - brettdj
1个回答

46

假设您的电子表格看起来像这样

spreadsheet

有一种非常简单的方法可以将其放入2D数组中

Dim arr as Variant
arr = Range("B6:H14").Value

将这个数组打印回电子表格的最简单方法是:
Sub PrintVariantArr()

    Dim arr As Variant
    arr = Range("B6:H14")

    Range("B16").Resize(UBound(arr, 1), UBound(arr, 2)) = arr

End Sub

或者您可以迭代/循环数组

Sub RangeToArray()

    Dim arr As Variant
    arr = Range("B6:H14").Value
    Dim r As Long, c As Long

    r = 16
    c = 2

    Dim i, j
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            Cells(r, c) = arr(i, j)
            c = c + 1
        Next j
        c = 2
        r = r + 1
    Next i

End Sub

然后将您的数组打印回电子表格

result


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接