Arrays VBA如何运行代码直到达到最后一个max函数 我有一个数组的代码,它将所有数据从我的电子表格中保存到D栏中,但是它也保存了我不想要的所有空白单元格。所有列的行数相同,但理想情况下,我希望从第二行开始为每一行创建一个数组,直到它找到从列D计算出的最大值的最后一个重复。我的代码是: Sub PopulatingArrayVariable() Dim myArray() As Variant Dim DataRange As Range Dim cell As Range Dim x As Long Dim TotalTargets As Double TotalTargets = WorksheetFunction.Max(Columns("D")) Set DataRange = Sheets("Result").Range("D:I") For Each cell In DataRange.Cells ReDim Preserve myArray(x) myArray(x) = cell.Value x = x + 1 Next cell End Sub

Arrays VBA如何运行代码直到达到最后一个max函数 我有一个数组的代码,它将所有数据从我的电子表格中保存到D栏中,但是它也保存了我不想要的所有空白单元格。所有列的行数相同,但理想情况下,我希望从第二行开始为每一行创建一个数组,直到它找到从列D计算出的最大值的最后一个重复。我的代码是: Sub PopulatingArrayVariable() Dim myArray() As Variant Dim DataRange As Range Dim cell As Range Dim x As Long Dim TotalTargets As Double TotalTargets = WorksheetFunction.Max(Columns("D")) Set DataRange = Sheets("Result").Range("D:I") For Each cell In DataRange.Cells ReDim Preserve myArray(x) myArray(x) = cell.Value x = x + 1 Next cell End Sub,arrays,vba,excel,max,Arrays,Vba,Excel,Max,在添加到数组之前,添加单元格长度的条件: For Each cell In DataRange.Cells If Len(Trim(Cells)) > 0 Then ReDim Preserve myArray(x) myArray(x) = cell.Value x = x + 1 End If Next cell Trim()会删除左右两侧的空格,因此,如果有一个单元格只有一个空格,那么它仍然会给出0,并且不会被考虑在内

在添加到数组之前,添加单元格长度的条件:

For Each cell In DataRange.Cells
    If Len(Trim(Cells)) > 0 Then
        ReDim Preserve myArray(x)
        myArray(x) = cell.Value
        x = x + 1
    End If
Next cell
Trim()
会删除左右两侧的空格,因此,如果有一个单元格只有一个空格,那么它仍然会给出0,并且不会被考虑在内


这里有一种替代方法,它应该完全跳过
ReDim-Preserve

看看这是否有助于你的处境

Sub BuildArray()
Dim lngLastRow As Long
Dim rng As Range
Dim arList As Object
Dim varOut As Variant

lngLastRow = Sheets("Result").Range("D:I").Find("*", Sheets("Result").Range("D1"), , , xlByRows, xlPrevious).Row
Set arList = CreateObject("System.Collections.ArrayList")
For Each rng In Sheets("Result").Range("D1:I" & lngLastRow)
    If Len(Trim(rng.Value)) > 0 Then
        arList.Add rng.Value
    End If
Next
varOut = arList.ToArray

End Sub

max
与您的问题有什么关系?你在问题和题目中都提到了它,但你所问的循环似乎根本没有涉及到它。短语“最大值的最后一次重复”表明,这应该以某种方式或其他方式与循环有关——但如何进行?并不是真正回答您的问题,但每一步在循环内执行
ReDim Preserve
并不被视为良好做法。您的意图似乎是将非空数据从数组中的D列加载到I列。理解正确吗?在@shrivallabha.redij的注释中添加—使用
ReDim Preserve
这样做会使复杂性增加二次,因为在每个阶段,您都在分配新数组并复制旧元素。更好的策略是过度分配原始数组,然后使用单个
ReDim Preserve
。或者,只使用一个集合。max稍后会出现在代码中,但它也是最后一行数据所在的位置,是否在那里,以便我可以指定代码一直工作到最后一行@JohnColemanSomething类似于
单元格(Rows.Count,“D”).End(xlUp)。Row
是获取活动工作表中包含数据的D列中最后一行的标准方法。如果D列全部为空,它将给出1。