如何对 excel vba 中的 Matrix 单元格使用嵌套循环
How to use nested loop for a Matrix cell in excel vba
Current Excel Sheet Structure
filteredStartRow = A2
detailsStartRow = D2
※i = x(获取filteredItemCount的值,例如:2, 3, 2)
※j = y(获取detailsItemCount的值,例如:4, 5, 3)
我被卡住了,我如何有效地移动到第二个 filteredStartRow (A4) 和 detailsStartRow (D10)。并继续直到最后一个过滤器和详细信息 StartRow。
我在做什么:
获取 ItemCount(例如:x、y)到 运行 过滤器和详细信息项中的嵌套循环。
因为我已经知道过滤器和详细信息的下一个项目计数,所以我只需要更改我的 NEXT filterStartRow 和 detailsStartRow。
如何使用 (i, j) 的任何动态设置以及设置 STARTROW 来构造我的循环?
谁能帮忙写代码。
这是我的代码,它只适用于第一个循环(绿色边框)。
startRow = 2
startRow1 = 2
nextDetailsRow = 0
For i = 1 To noOfFilteredItem (e.g:3)
mapFilteredItemCount = Worksheets("Sheet1").Cells(startRow, 3).Value
detailsItemCount = Worksheets("Sheet1").Cells(startRow1, 6).Value
With ThisWorkbook.Worksheets("Sheet1")
For m = 1 To mapFilteredItemCount
For n = 1 To detailsItemCount
If .Cells((startRow + m) - 1, 2) = .Cells((startRow1 + n) - 1, 5) Then
If IsEmpty(.Cells((startRow1 + n) - 1, 8).Value) = True Then
.Cells((startRow1 + n) - 1, 8).Value = "Deliver"
nextDetailsRow = nextDetailsRow + startRow + n
Else
GoTo NextIteration
End If
End If
NextIteration:
Next n
Next m
End With
Next i
我的问题是:
- 我需要在循环 (m, n) 完成后动态更新 STARTROW 和 STARTROW1。
- 如何分配 STARTROW 和 STARTROW1 变量以接收下一个起始行值。
我的逻辑:
- 我正在考虑将所有 STARTROW 和 STARTROW1 数字保存到一个数组中,然后从数组中获取值。
例如:
filteredItemRowArray() = 2, 4, 7(※筛选项的起始行号)
detailsItemRowArray() = 2, 6, 11(※详情项目的起始行号)
但我无法安排此数组来保留行号值。
任何人都可以帮助我,我真的很感谢你的编程智慧。
如果您有任何疑问或理解问题,请告诉我。
非常感谢。
我会尝试同样的想法。循环遍历带有数字的数组。请尝试以下代码:
Sub Outer_Loop()
Dim StartrowArr, Startrow1Arr, I As Integer
Dim Startrow As Long, Startrow1 As Long
StartrowArr = Array(2, 4, 7)
Startrow1Arr = Array(2, 6, 11)
For I = LBound(StartrowArr) To UBound(StartrowArr)
Startrow = StartrowArr(I)
Startrow1 = Startrow1Arr(I)
Debug.Print "Loop " & I, "Startrow: " & Startrow, "Startrow1: " & Startrow1
' your code
Next I
End Sub
Current Excel Sheet Structure
filteredStartRow = A2 detailsStartRow = D2
※i = x(获取filteredItemCount的值,例如:2, 3, 2)
※j = y(获取detailsItemCount的值,例如:4, 5, 3)
我被卡住了,我如何有效地移动到第二个 filteredStartRow (A4) 和 detailsStartRow (D10)。并继续直到最后一个过滤器和详细信息 StartRow。
我在做什么: 获取 ItemCount(例如:x、y)到 运行 过滤器和详细信息项中的嵌套循环。 因为我已经知道过滤器和详细信息的下一个项目计数,所以我只需要更改我的 NEXT filterStartRow 和 detailsStartRow。 如何使用 (i, j) 的任何动态设置以及设置 STARTROW 来构造我的循环? 谁能帮忙写代码。
这是我的代码,它只适用于第一个循环(绿色边框)。
startRow = 2
startRow1 = 2
nextDetailsRow = 0
For i = 1 To noOfFilteredItem (e.g:3)
mapFilteredItemCount = Worksheets("Sheet1").Cells(startRow, 3).Value
detailsItemCount = Worksheets("Sheet1").Cells(startRow1, 6).Value
With ThisWorkbook.Worksheets("Sheet1")
For m = 1 To mapFilteredItemCount
For n = 1 To detailsItemCount
If .Cells((startRow + m) - 1, 2) = .Cells((startRow1 + n) - 1, 5) Then
If IsEmpty(.Cells((startRow1 + n) - 1, 8).Value) = True Then
.Cells((startRow1 + n) - 1, 8).Value = "Deliver"
nextDetailsRow = nextDetailsRow + startRow + n
Else
GoTo NextIteration
End If
End If
NextIteration:
Next n
Next m
End With
Next i
我的问题是:
- 我需要在循环 (m, n) 完成后动态更新 STARTROW 和 STARTROW1。
- 如何分配 STARTROW 和 STARTROW1 变量以接收下一个起始行值。
我的逻辑:
- 我正在考虑将所有 STARTROW 和 STARTROW1 数字保存到一个数组中,然后从数组中获取值。
例如:
filteredItemRowArray() = 2, 4, 7(※筛选项的起始行号)
detailsItemRowArray() = 2, 6, 11(※详情项目的起始行号)
但我无法安排此数组来保留行号值。
任何人都可以帮助我,我真的很感谢你的编程智慧。 如果您有任何疑问或理解问题,请告诉我。 非常感谢。
我会尝试同样的想法。循环遍历带有数字的数组。请尝试以下代码:
Sub Outer_Loop()
Dim StartrowArr, Startrow1Arr, I As Integer
Dim Startrow As Long, Startrow1 As Long
StartrowArr = Array(2, 4, 7)
Startrow1Arr = Array(2, 6, 11)
For I = LBound(StartrowArr) To UBound(StartrowArr)
Startrow = StartrowArr(I)
Startrow1 = Startrow1Arr(I)
Debug.Print "Loop " & I, "Startrow: " & Startrow, "Startrow1: " & Startrow1
' your code
Next I
End Sub