将值填充到下一个空行的数组

时间:2019-07-18 19:22:42

标签: arrays excel vba

我正在尝试从Excel工作表中的用户输入填充数组。目前,我的工作表仅列出了两个目标,但是我希望用户能够根据需要定义无数个目标。 我的代码:

可以在那里调试停止,我在目标(i,1)行上得到了下标超出范围的信息。 While会在特定的列中查找值,然后向下移动行,直到检测到空白,然后停止。一旦检测到要放入我的数组,我就不知道该如何获取它。

我尝试在循环内和while循环内移动目标的ReDim。

Dim max_I As Byte, tgt_N As Double
Dim Targets()
Dim RadarRangeDenomenator()
Dim RelativePower()
Dim PowerAmplitude()

Call Activ8_Sheet("Signal")

tgt_N = 0
max_I = 0

While Cells(max_I + 8, 3).Value <> ""
    tgt_N = tgt_N + 1
    max_I = max_I + 1
    For i = 1 To max_I
        Targets(i, 1) = Cells(max_I + 8, 3)
    Next i
    Stop
Wend

ReDim Targets(tgt_N)

MsgBox (Targets(1, 1))

我想要的是具有一个Excel表单上列出的值的单一维度数组(很多行,但只有1列)。

1 个答案:

答案 0 :(得分:0)

与其循环您的单元,不如直接将整个范围分配给数组。该方法会自动创建一个二维数组,因为工作表本身就是二维数组。

如果您希望列中的最后一个单元格,可以使用以下方法:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Signal")

Dim StartRng As Range, EndRng As Range
Set StartRng = ws.Range("C8")
Set EndRng = ws.Cells(Rows.Count, 3).End(xlUp)

Dim Targets() As Variant
Targets = ws.Range(StartRng, EndRng).Value

ws.Cells(Rows.Count, 3).End(xlUp)将从工作表的最后一行开始向上扫描该列。一旦找到一个非空单元格,它将使用该单元格作为范围。这意味着在此列上方仍可能有空单元格。

但是,如果只希望将单元格值添加到该列中的下一个空单元格,则可以改用以下方法:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)

Dim StartRng As Range, EndRng As Range
Set StartRng = ws.Range("C8")
Set EndRng = StartRng.End(xlDown)

Dim Targets() As Variant
Targets = ws.Range(StartRng, EndRng).Value

StartRng.End(xlDown)从您先前指定的起始范围开始,然后下降。它将向下扫描,直到找到包含值的最后一个单元格(在空格之前)并将其用作范围。这意味着仍然会有其他单元格的数据低于此范围-因为它仅在第一个空单元格之前拾取了该单元格。


您可以使用此循环测试阵列

Dim i As Long
For i = LBound(Targets) To UBound(Targets)
    Debug.Print Targets(i, 1)
Next

确保您的价值观符合您的期望。