我不知道如何表述这个问题,但我遇到了一个问题,我需要将一组工作表中的名称列表加载到单独的数组中。

例如, Sheet 1Column A 有 10 个名称要加载到 array1 中, Sheet 2Column A 有 14 个名称要加载到 array2 中。

我知道这可能会被硬编码到一个宏中以将它们全部加载,但名称列表不是固定长度,而且我想知道是否可以缩短很多代码。

我的想法告诉我这样做的方式如下。

Dim tarray1 As Variant
Dim tarray2 As Variant
Dim tarray3 As Variant

For f = 1 To 3

    Sheets("Region " & f).Select
    With ActiveSheet
        lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        tarray& f = ActiveSheet.Range("A2:A" & lastrow)
    End With


Next

有问题的实际工作表有 10 个单独的工作表,以便读取从区域 1 到 10 的名称。因此将有 10 个单独的 tarrays。这样做是为了报告目的,并将在工作表周围来回传递。

然而 tarray & f 显然是无效的,会抛出编译错误。

任何人都可以想出一种方法来解决这个问题吗?

希望有人能帮忙。

最佳答案

以下例程向您展示了如何使用参差不齐的变体数组,我认为这是您需要的技术。

我已将工作表前十行中不同数量的单元格加载到 TArray。我使用 Debug.Print 来展示如何访问这些元素。

Sub Test()

  Dim InxCol As Integer
  Dim InxRow As Integer
  Dim InxTA As Integer
  Dim TArray() As Variant

  ReDim TArray(1 To 10)

  With Sheets("xxxxx")

  For InxTA = 1 To 10
    ' There must be at least two cells in each range if the result is to be an
    ' array.  The access code relies on TArray being a true array of arrays.
    ' If this is not possible, you can test for TArray(N) being an array
    ' or a variable using VarType
    TArray(InxTA) = .Range(.Cells(InxTA, 1), .Cells(InxTA, 12 - InxTA)).Value
  Next

  End With

  For InxTA = 1 To 10
    For InxRow = LBound(TArray(InxTA), 1) To UBound(TArray(InxTA), 1)
      For InxCol = LBound(TArray(InxTA), 2) To UBound(TArray(InxTA), 2)
        Debug.Print TArray(InxTA)(InxRow, InxCol) & " ";
      Next
    Next
    Debug.Print
  Next

End Sub

新 Material

我决定添加一个解释,这样我的答案就完整了。

您可以将变体设置为任何内容,然后将其设置为其他内容。以下可能是愚蠢的,但它的工作原理:
Dim V As Variant

V = 5
Debug.Print V
V = "Today"
Debug.Print V
V = Array(1, 2, 3)
Debug.Print V(0) & " " & V(1) & " " & V(2)

考虑:Range( xxx ).Value
如果 xxx 是单个单元格,则返回单个变量。在所有其他情况下,它返回一个二维数组。第一个维度用于行,第二个维度用于列。这与正常做法相反,但它匹配 Cells(R, C).Value

我已经声明:
Dim TArray() As Variant
Redim TArray(1 to 10)

所以 TArray 是一个变体数组

然后我设置 TArray(N) = Range( xxx ).Value
如果 xxx 是单个单元格,则 TArray(N) 将是单个值。

但是如果 xxx 是两个或多个单元格,则 TArray(N) 是一个二维数组。要访问 TArray 中的单个单元格,我必须指定 TArray 的一个元素,然后指定范围的行和列。因此:
TArray(Element)(Row, Column)

TArray 的每个元素都可以与其他每个元素具有不同的大小。一个可以是单个变量,另一个是单个行范围,另一个是单个列范围,另一个是矩形。

一开始很难理解这一点。不 - 删除“起初”。玩这个功能。做我所做的,从你的一张工作表中加载行、列和矩形。

关于Excel 宏加载数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8726625/

10-10 18:54