任何人都可以幫助解決我的編碼問題嗎? If語句需要三個單獨的條件= true,或者它檢查下一個if語句並循環返回數組的所有單元格。沒有錯誤,所以很難確定問題,再加上我對VBA很陌生,所以可能有更好的方法來實現這一點。VBA如果和多個條件
注:數組中所需的單元格不是靜態的,因此Find。
Sub test()
Dim i As Integer
Dim col1 As Range, col2 As Range, col3 As Range, col4 As Range, col5 As Range, col6 As Range
Dim c1arr, c2arr, c3arr, c4arr, c5arr, c6arr As Variant
Set col1 = ActiveSheet.Cells.find("Reference", , xlValues, xlWhole)
Set col2 = ActiveSheet.Cells.find("Amount", , xlValues, xlWhole)
Set col3 = ActiveSheet.Cells.find("Action", , xlValues, xlWhole)
Set col4 = ActiveSheet.Cells.find("Reference2", , xlValues, xlWhole)
Set col5 = ActiveSheet.Cells.find("Amount2", , xlValues, xlWhole)
Set col6 = ActiveSheet.Cells.find("Action2", , xlValues, xlWhole)
lastrow = Cells(Rows.Count, col1.Column).End(xlUp).Row
c1arr = Range(Cells(2, col1.Column), Cells(lastrow, col1.Column)).Value
c2arr = Range(Cells(2, col2.Column), Cells(lastrow, col2.Column)).Value
c3arr = Range(Cells(2, col3.Column), Cells(lastrow, col3.Column)).Value
c4arr = Range(Cells(2, col4.Column), Cells(lastrow, col4.Column)).Value
c5arr = Range(Cells(2, col5.Column), Cells(lastrow, col5.Column)).Value
c6arr = Range(Cells(2, col6.Column), Cells(lastrow, col6.Column)).Value
For i = 1 To UBound(c1arr)
If c2arr(i, 1) > 0 And c1arr(i, 1) = c4arr(i, 1) And c2arr(i, 1) = c5arr(i, 1) Then
c6arr(i, 1) = c3arr(i, 1)
ElseIf c2arr(i, 1) > 0 And c1arr(i, 1) <> c4arr(i, 1) And c2arr(i, 1) <> c5arr(i, 1) Then
c6arr(i, 1) = "Manual Review"
End If
Next
Range(Cells(2, col6.Column), Cells(lastrow, col6.Column)).Value = c6arr
End Sub
那麼一點點調試需要。將光標放在For i行並按F9。然後運行代碼。它會停在這條線上。在VB中,您可以在「本地」窗口中看到所有內容的值。您可以展開所有陣列並確保有數據。如果不檢查所有其他變量以確保它們返回正確的數字。然後如果一切順利,就按F8一步一步來驗證每一步。我也不相信你想在那裏出口。你也知道你是逐行比較而不是一個數組中的每個值與其他值中的所有值進行比較? –
您從不將'c6arr'的內容寫回工作表。另外,在數據的第1行中,「c2arr」是負數,因此兩個測試都會失敗。另外,在你的代碼中,'c1arr'永遠不會等於'c4arr'和'c5arr',所以如果'c2arr'> 0,那麼「Manual Review」將始終是結果。正如Scott寫道,如果您通過第一個測試並停止處理其餘行,則「Exit For」將退出循環。您的預期結果似乎也存在錯誤,因爲您有一個result2既不是「手動審查」也不是c3arr的實例。 –
所有數據均正確返回。我輸入Exit For,因爲我認爲第二個陳述可能會覆蓋第一個陳述。看起來問題如你所述:逐行比較每個數組的值與另一個數組的值。這是一個簡單的修復? –