如何在excel vba

时间:2017-07-21 03:13:49

标签: arrays excel excel-vba matrix nested-loops vba

Current Excel Sheet Structure

filteredStartRow = A2 detailsS​​tartRow = D2

※i = x(获取filteredItemCount的值,例如:2,3,2) ※j = y(获取detailsItemCount的值,例如:4,5,3)

我被困住了,我可以有效地转移到第二个filterStartRow(A4)和detailsS​​tartRow(D10)。并继续,直到最后一个过滤器和详细信息StartRow。

我在做什么: 获取ItemCount(例如:x,y)以在过滤器和详细信息项中运行嵌套循环。 因为我已经知道过滤器和细节的下一个项目计数,所以我只需要更改我的NEXT filterStartRow和detailsS​​tartRow。 如何使用(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(※详细项目的起始行号)

但我无法安排此数组来保留行号值。

有谁可以帮助我,我非常感谢您的编程SMARTNESS。 如果您有任何疑问或了解问题,请告诉我。 非常感谢你。

1 个答案:

答案 0 :(得分:0)

我会尝试相同的想法。通过数字循环数组。请尝试以下代码:

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