我正在编写一个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
答案 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)
然后根据需要复制。