For循环跳过特定行

时间:2018-02-12 09:26:03

标签: excel vba excel-vba

我正在编写一个vba代码来生成Avaya CMS脚本,该脚本为每位员工分配特定优先级的技能。

A列具有技能编号,B列具有技能优先级。

Excel示例:

queryAndPrintResult(L"SELECT * FROM Win32_DiskDrive", L"Name");

这就是CMS代码的样子:

A       |       B
999     |       1
163     |       3
164     |       16
394     |       1

每次迭代的第一行都有技能编号,而第二行具有优先级。但是,进入SetArr(X,Y)X应该每4次迭代增加一次,Y应该从1-4开始计数并重置。

我的问题是在前4次迭代后for循环停止。

这是我到目前为止所拥有的......

SetArr(1,1)= 999    
SetArr(1,2)= 1  
SetArr(1,3)= 0
SetArr(1,4)= 0  
SetArr(2,1)= 163    
SetArr(2,2)= 3
SetArr(2,3)= 0
SetArr(2,4)= 0  
SetArr(3,1)= 164    
SetArr(3,2)= 16
SetArr(3,3)= 0
SetArr(3,4)= 0  
SetArr(4,1)= 394    
SetArr(4,2)= 1  
SetArr(4,3)= 0

2 个答案:

答案 0 :(得分:2)

在像这样的矩阵情况下,您只需要为列和行提供嵌套循环,以使其真正可以理解:

Public Sub TestMe()

    Dim myCol   As Long
    Dim myRow   As Long

    For myRow = 1 To 10 '500
        For myCol = 1 To 4
            Dim strOutput As String
            strOutput = "SetArr(" & myCol & "," & myRow & ")= " & Cells(myRow, myCol)
            If Cells(myRow, myCol) = vbNullString Then strOutput = _
                                            "SetArr(" & myCol & "," & myRow & ")= 0"
            Debug.Print strOutput
        Next myCol
    Next myRow

End Sub

这是即时窗口中的输出:

SetArr(1,1)= 999
SetArr(2,1)= 1
SetArr(3,1)= 0
SetArr(4,1)= 0
SetArr(1,2)= 163
SetArr(2,2)= 3
SetArr(3,2)= 0
SetArr(4,2)= 0
SetArr(1,3)= 164

答案 1 :(得分:0)

通过使用上面公布的数据的以下公式,可以实现此结果。

假设数据在网格$A$2:$D$5中,下面的公式可以放在任何单元格中:

=CONCATENATE("SetArr(",CEILING(ROWS($A$1:A1)/4,1),",",MOD(ROWS($A$1:A1)-1,4)+1,")= ",INDEX($A$2:$D$5,CEILING(ROWS($A$1:A1)/4,1),MOD(ROWS($A$1:A1)-1,4)+1)+0)

然后根据需要复制。