【问题标题】:how to populate and array with a loop如何使用循环填充和排列
【发布时间】:2019-08-12 15:52:20
【问题描述】:

我在“C”列中有一个字符串,从 C2 开始(例如:Cat、Dog、Bird 等),但我不知道有多少。所以我使用 LRow 函数来查找最后一行数据。目前,最后一行是 C63,但如果我在下周或下个月运行子例程,这预计会有所不同(因此我说“我不知道有多少”)。我想创建一个数组,例如 RTArr = Array("Cat", "Dog", "Bird", etc...) 所以...我在想这样的事情:

Dim RTArr As Variant

LRow = r.End(xlDown).Offset(x, y).Row

With ActiveSheet
    For i = 2 To LRow
        str = .Range("C" & i).Value
    Next i
End With

我可以用类似的东西填充数组吗:

Dim RTArr As Variant

LRow = r.End(xlDown).Offset(x, y).Row

With ActiveSheet
    For i = 2 To LRow
        ArrNum = (i - 1)
        str = .Range("C" & i).Value
        RTArr(ArrNum) = str
    Next i
End With

或者由于数组的大小未知,这不起作用?还是我必须在循环中使用“修改”?在这种情况下使用“集合”会更好吗?还是以其他方式解决?我可以简单地将一系列单元格设置为数组而不需要循环吗?

【问题讨论】:

  • RTArr = Range("C2:C" & LRow).Value 会给你一个二维数组。
  • 你想要一维数组还是二维数组?如果是 2D,SJRs 解决方案消除了对循环的需要。对于一维解决方案,您需要在使用循环向其中输入值之前设置数组的大小。
  • @ARL - 或 RTArr =Application.Transpose(Range("C2:C" & LRow).Value) 会给你一个没有循环的一维数组。

标签: arrays excel vba loops


【解决方案1】:

如果您首先声明一个动态数组(没有大小),您需要在填充它之前将其重新调整为所需的大小,在您的情况下将是行数,例如ReDim RTArr(项目数)。或者使用二维数组 ReDim RTArr(numbercolumns, numberrows)。

请记住,标准数组从元素 0 开始,但您可以随意定义它。

记住,将范围输入数组时,Excel 默认会创建一个二维数组

当然,更高级的技术也是可能的,您可以对 VBA 数组进行更多研究:

1) 您可以在循环内添加的每个元素之后重新调整数组,但这对于一维数组最有用。

2) 您可以在填充之前定义比所需更大的数组大小,填充它,然后将数组缩小到所需的实际大小。

3) 请注意,当使用两个(或更多)维度时,ReDim Preserve 仅适用于最后一个维度。

基本填充的伪代码:

Dim arr() as Variant

'we know we want to populate array with 10 elements
ReDim arr(1 to 10)

    For i = 1 to 10

    'This part will insert the count from the loop into the count position in array
    ' eg. first element of array will be a 1, second a 2 etc. until 10
    arr(i) = i
    Next i

【讨论】:

  • 最终......我认为这是我需要的......虽然我的帖子不清楚,因为我试图提供一个我实际在做什么的简化示例。但我想我需要循环使用 for/next 来填充数组。
  • 是的,用 For Next 填充很容易。要获取单元格的内容,只需使用 Cells(rowcounter, columncounter) 例如从第二行的 A 列抓取:单元格(i + 1, 1)。祝你好运!
【解决方案2】:

如果您的 Excel 版本支持 TEXTJOIN 函数:

Sub Kolumn2Array()
    Dim r As Range
    Dim N As Long
    Dim RTArray
    Dim comma As String

    comma = ","
    N = Cells(Rows.Count, "C").End(xlUp).Row
    Set r = Range("C2:C" & N)

    With Application.WorksheetFunction
        RTArray = Split(.TextJoin(comma, True, r), comma)
    End With

End Sub

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2016-02-23
    • 2017-12-08
    • 2021-02-14
    相关资源
    最近更新 更多