【发布时间】:2017-08-16 22:51:17
【问题描述】:
我使用http://www.homeandlearn.org/arrays_and_loops.html 来帮助我解决这个问题。
我有过滤到一个表的数据连接。不幸的是,当程序将文件导出到 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
使用此代码,我得到编译错误:Next without For。在网上搜索时,我发现这可能是因为我有 2 个“For”,一个 if 语句,if 语句中的“next”语句,然后是循环外的另一个“next”语句。我在想必须这样做,以便 B 列中的每个单元格都针对所有数组可能性进行检查。
见下图。我需要将工作表中 P 列(实际帐单名称)的值:TMRtoSPIde 输入到工作表上的 D 列(帐单名称)中:当工作表中 K 列中的预留编号:TMRtoSPIde 与工作表中的预留匹配时:RawData:RawData。您会注意到工作表:RawData 在 Billing Name 列中有一个错误的 5 位序列日期。这些是我想要替换的。
【问题讨论】:
-
如果在
Worksheets("Sheet1").Range("B2").Value上找到预订号,则在Worksheets("Sheet2").Range("P2").Value = Worksheets("Sheet1").Range("E2").Value上找到。奇怪的是,您在Worksheets("Sheet2")上更新与Worksheets("Sheet1")上的预订号相同的行我认为您还必须在Worksheets("Sheet2")上找到预订号。 -
你是绝对正确的。我一会儿要回到这里的绘图板。感谢您了解这个。
-
MyArray()的目的是什么?这些是您想要限制代码使用的帐号子集吗?是否还有其他您不想使用的帐号? -
我将值存储在 MyArray 中,希望可以使用它来识别需要更新的行,因为我无法弄清楚如何进行 VBA 索引/匹配并让它粘贴这些值在我的桌子上。我拍了一些屏幕截图,希望能更容易理解。我将在上面编辑我的帖子。