2015-10-20 80 views
0

對不起,我想問一下關於循環使用vlookup行和列。這是我的代碼,但沒有工作。你能幫助糾正這個代碼嗎?謝謝。VBA查找循環行和列內

Private Sub CommandButton1_Click() 
    Dim ws As Worksheet 
    Dim i As Integer 
    Dim j As Integer 

Set ws = ThisWorkbook.Sheets("GROWTH PERUSAHAAN") 

With ws 
    For j = 3 To 100 
     For i = 2 To 600 
      If Application.WorksheetFunction.VLookup(ThisWorkbook.Sheets("GROWTH PERUSAHAAN").Cells(i, 1), ThisWorkbook.Sheets("INPUT KUANTITATIF").Range("A:AC"), j + 3, 0) = "" Then 
      ThisWorkbook.Sheets("GROWTH PERUSAHAAN").Cells(i, j) = 0 

      Else 
      ThisWorkbook.Sheets("GROWTH PERUSAHAAN").Cells(i, j) = (Application.WorksheetFunction.VLookup(ThisWorkbook.Sheets("GROWTH PERUSAHAAN").Cells(i, 1), ThisWorkbook.Sheets("INPUT KUANTITATIF").Range("A:AC"), j + 4, 0)/Application.WorksheetFunction.VLookup(ThisWorkbook.Sheets("GROWTH PERUSAHAAN").Cells(i, 1), ActiveWorkbook.Sheets("INPUT KUANTITATIF").Range("A:AC"), j + 3, 0)) - 1 
      End If 
     Next i 
    Next j 
End With 

End Sub 
+0

如果您已聲明變量'WS = ThisWorkbook.Sheets(「增長PERUSAHAAN」)',你不需要重複'ThisWorkbook.Sheets(」 GROWTH PERUSAHAAN「)在你的代碼中。你可以使用這個變量,例如'ws.Cells(i,j)= 0'。你的代碼將更加可讀。 – mielk

+0

「沒有工作」究竟以什麼方式?順便說一下,使用Match來獲得正確的結果行會更有效,然後在直接單元格引用中使用它,而不是多次查找相同的值。 – Rory

+0

如果我爲coloumn和row循環,則此代碼不起作用,但如果僅循環使用行或列,它將起作用。 –

回答

0

請在你的代碼 「的錯誤繼續下一步」 使用。請設置您的工作表,並設置你的範圍太容易理解

Private Sub CommandButton1_Click() 
    Dim ws As Worksheet 
    Dim i As Integer 
    Dim j As Integer 

Set ws = ThisWorkbook.Sheets("GROWTH PERUSAHAAN") 
Set ws1 = ThisWorkbook.Sheets("INPUT KUANTITATIF") 


With ws 
    For j = 3 To 100 
     For i = 2 To 600 

     On Error Resume Next 



      If Application.WorksheetFunction.VLookup(ws.Cells(i, 1), ws1.Range("A:AC"), j + 3, 0) = "" Then 
      ws.Cells(i, j) = 0 

      Else 


      ws.Cells(i, j) = (Application.WorksheetFunction.VLookup(ws.Cells(i, 1), ws1.Range("A:AC"), j + 4, 0)/Application.WorksheetFunction.VLookup(ws.Cells(i, 1), ws1.Range("A:AC"), j + 3, 0)) - 1 


      End If 


     Next i 
    Next j 
End With 

End Sub 
+0

感謝您的幫助,它的工作原理!!!!!做得好!!!!!!! –

0

這應該是更高效:

Private Sub CommandButton1_Click() 
    Dim ws     As Worksheet 
    Dim wsTable    As Worksheet 
    Dim i      As Long 
    Dim j      As Long 
    Dim vMatch 

    Set ws = ThisWorkbook.Sheets("GROWTH PERUSAHAAN") 
    Set wsTable = ThisWorkbook.Sheets("INPUT KUANTITATIF") 

    With ws 
     For i = 2 To 600 

      vMatch = Application.Match(ws.Cells(i, 1), wsTable.Range("A:A"), 0) 
      ' if lookup value isn't found, skip 
      If Not IsError(vMatch) Then 
       For j = 3 To 100 

        If wsTable.Cells(vMatch, j + 3).Value2 = "" Then 
         ws.Cells(i, j).Value2 = 0 

        Else 
         ws.Cells(i, j).Value2 = (wsTable.Cells(vMatch, j + 4).Value2/wsTable.Cells(vMatch, j + 3).Value2) - 1 
        End If 
       Next j 
      End If 
     Next i 
    End With 

End Sub