我用http://www.homeandlearn.org/arrays_and_loops.html来帮我解决这个问题。Visual Basic,VBA数组循环
我有过滤到一个表的数据连接。不幸的是,当程序将文件导出到Excel时,其中一个源随机地将错误的数据(通常是日期)放在错误的列(客户端列)中。我想要做的是类似于索引/匹配功能。我想在同一工作簿中检查此主表(A)中的每个预留号码与另一个表(B)。如果来自其他工作表(B)的预订号码与主表(A)中的预留号码相匹配,我希望将正确的客户端值输入到主表(A)中。对于VBA,我仍然很新,所以对我们的帮助表示感谢。我试图修改我的代码,但无济于事。此外,我原本是在没有真实数据的情况下将其作为练习来运行,所以我没有弄乱我的原始文件。我试图添加适当的语法来引用其他工作表,以及我认为可能输入错误的东西。这里是我想出的最接近的原始代码:
Sub TransferData()
Dim MyArray(1 To 19) As Single
MyArray(1) = 81899
MyArray(2) = 87172
MyArray(3) = 87275
MyArray(4) = 87394
MyArray(5) = 87446
MyArray(6) = 87496
MyArray(7) = 87621
MyArray(8) = 87631
MyArray(9) = 87726
MyArray(10) = 87822
MyArray(11) = 87858
MyArray(12) = 88041
MyArray(13) = 88097
MyArray(14) = 88127
MyArray(15) = 88160
MyArray(16) = 88191
MyArray(17) = 88359
MyArray(18) = 88487
MyArray(19) = 88545
For i = 1 To 19
If Worksheets("Sheet1").Range("B" & i).Value = MyArray(i) Then
Worksheets("Sheet2").Range("P" & i).Value = _
Worksheets("Sheet1").Range("E" & i).Value
End If
Next i
End Sub
我不记得错误,因为代码不完全如上,但接近它。我相信它遇到的问题是,当i变量超过19时,系统找不到数组> 19.我需要VBA检查当前处于3k +的行数不断变化的19个数组。我试图添加另一个变量,如果我保持变量分离,我可以让VBA检查所有行上的19个数组。这是我想出的代码....
Sub TransferData()
Dim MyArray(1 To 19) As Single
MyArray(1) = 81899
MyArray(2) = 87172
MyArray(3) = 87275
MyArray(4) = 87394
MyArray(5) = 87446
MyArray(6) = 87496
MyArray(7) = 87621
MyArray(8) = 87631
MyArray(9) = 87726
MyArray(10) = 87822
MyArray(11) = 87858
MyArray(12) = 88041
MyArray(13) = 88097
MyArray(14) = 88127
MyArray(15) = 88160
MyArray(16) = 88191
MyArray(17) = 88359
MyArray(18) = 88487
MyArray(19) = 88545
For i = 1 To 5000
For j = 1 To 19
If Worksheets("Sheet1").Range("B" & i).Value = MyArray(j) Then
Worksheets("Sheet2").Range(i, 16).Value = Worksheets("Sheet1"). _
Range(i,5).Value
Next j
End If
Next i
End Sub
有了这段代码,我得到了编译错误:下一个没有For。在网上搜索时,我发现它可能是因为我有2个“For”,一个if语句,if语句中的“next”语句,然后是循环之外的另一个“next”语句。我认为必须这样做,以便B列中的每个单元格都可以检查所有数组的可能性。
查看下面的图片。我需要工作表中的P列(实际帐单名称)的值:TMRtoSPIde在工作表:TMRtoSPIde中K列中的预订编号与工作表中的预留:RawData匹配时,可以在工作表上输入到列D(出具发票名称)中的RawData:RawData。您会注意到该表单:RawData在“结算名称”列中有一个错误的5位数序列日期。这些是我想要取代的。
如果'工作表( “工作表Sheet”)被发现的预订号码。范围( “B2”)。Value'然后'工作表( “Sheet 2中”)。范围( “P2”)。值= 工作表(“Sheet1”)。范围(“E2”)。值。奇怪的是,您正在更新'Worksheets(“Sheet2”)上的同一行作为'Worksheets(“Sheet1”)上的保留号''我认为您必须在'Worksheets(“ Sheet2“)'。 – 2017-08-16 23:43:22
你绝对正确。我要回到这里的绘图板。感谢您接受这一点。 – Craig
'MyArray()'的目的是什么?这些是您希望限制代码使用的帐号的子集吗?是否有其他帐号不想使用? – 2017-08-17 17:02:30