我正在尝试从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列)。
答案 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
确保您的价值观符合您的期望。