我用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