2015-06-03 203 views
0

我需要一些幫助,我想寫一些代碼。我在VBA方面不是很有經驗,我以爲VLookup是我需要的,但想過之後。我認爲找工作更好的循環。Excel VBA循環列和複製數據

單擊工作表1上會出現一個按鈕。

代碼將需要執行以下操作,在表「全局」中使用列B和搜索範圍,每行都會有一個不同的值,它將需要逐行搜索單元格值,在Sheet「Details」如果找到匹配,則複製列H,F & E中的數據並粘貼到全局表格中的O,P & Q中。 H = O,E = P,D = Q。循環直到第一個空行。

在Details列表的B列中,如果沒有與Details匹配的數據,那麼該行將被刪除。

例如:

全球前: enter image description here

細節之前: enter image description here

後代碼運行:

全球后: enter image description here

詳情後: enter image description here

希望這說明它不夠好,你可以看到它已經找到了匹配的數據,並將其複製到相關的行,所有的非匹配的數據已被刪除。

我目前沒有代碼,因爲如果我誠實地說我不知道​​從哪裏開始!所有的幫助非常感謝!

+0

從閱讀它,我會認爲Vlookup應該做你需要的。是什麼讓你覺得不對? –

回答

1

試試這個。請注意,如果已找到該行中的值,則需要有一個空列,該列將臨時保存一個標記 - 在我的示例中,我使用了「I」列,如果該列不爲空,則需要對其進行修改。

Private Sub pasteValues() 
Dim i, j, lastG, lastD As Long 

' find last row 
lastG = Sheets("Global").Cells(Rows.Count, "B").End(xlUp).Row 
lastD = Sheets("Details").Cells(Rows.Count, "B").End(xlUp).Row 

' loop over values in "Global" 
For i = 1 To lastG 
    lookupVal = Sheets("Global").Cells(i, "B") ' value to find 

    ' loop over values in "details" 
    For j = 1 To lastD 
     currVal = Sheets("Details").Cells(j, "B") 

     If lookupVal = currVal Then 
      Sheets("Global").Cells(i, "O") = Sheets("Details").Cells(j, "H") 
      Sheets("Global").Cells(i, "P") = Sheets("Details").Cells(j, "E") 
      Sheets("Global").Cells(i, "Q") = Sheets("Details").Cells(j, "D") 
      ' mark the row 
      Sheets("Details").Cells(j, "I") = "marked" 

     End If 
    Next j 
Next i 

' loop over rows in "details" and delete rows which have not been marked 
For j = 1 To lastD 
    If Sheets("Details").Cells(j, "I") <> "marked" Then 
     ' delete unmarked rows 
     Sheets("Details").Cells(j, "A").EntireRow.Delete 
     If Sheets("Details").Cells(j, "B") <> "" Then 
      j = j - 1 ' revert iterator so it doesn't skip rows 
     End If 
    Else: 
     ' remove the mark 
     Sheets("Details").Cells(j, "I") = "" 
    End If 
Next j 
End Sub 
+0

謝謝你這個代碼完美地工作!!!!!!!! – atame