2013-08-02 26 views
1

所以我敢肯定這是容易的,如果你知道你周圍VBA你的方式,我只是havnet能夠得到它爲我工作。看A柱,配以E列,複製列B到F列

這是我有的表格的一個例子。如果列A相同,我想將所有內容都移動到一行中。這是表格,也是我期待的內容。

A B C   D   E  F   G  H   I 
11 Yes Yellow 8/1/2013 20:46 11 Yes 8/1/2013 20:46 Yellow 8/1/2013 20:46 
11 No Blue 8/1/2013 20:46 12 Yes 8/1/2013 20:46 Yellow 8/1/2013 20:46 
11 YY Red 8/1/2013 20:46  13 Yes 8/1/2013 20:46 Red 8/1/2013 20:46 
11 NN Yellow 8/1/2013 20:46     
11 YYY Yellow 8/1/2013 20:46     
11 NNN Blue 8/1/2013 20:46     
11 YYYYY Red 8/1/2013 20:46     
11 NNNN Yellow 8/1/2013 20:46     
12 Yes Yellow 8/1/2013 20:46     
12 No Blue 8/1/2013 20:46     
12 YY Red 8/1/2013 20:46     
12 NN Yellow 8/1/2013 20:46     
12 YYY Yellow 8/1/2013 20:46     
12 NNN Blue 8/1/2013 20:46     
13 Yes Red 8/1/2013 20:46     
13 No Yellow 8/1/2013 20:46     
13 YY Yellow 8/1/2013 20:46     
13 NN Blue 8/1/2013 20:46     
13 YYY Red 8/1/2013 20:46     
13 NNN Yellow 8/1/2013 20:46     

這就是我想用VBA做的事情。不是最好的,但我正在嘗試。

Sub Sample() 
    Dim lastRow As Long, i As Long 
    Dim ws As Worksheet 

    Set ws = Sheets("Sheet1") 

    lastRow = ws.range("A" & Rows.Count).End(xlDown).Row 


    With ws 
     For i = 1 To lastRow 
      If range("A" & i).Value = range("E" & i) Then range("f" & i).Value = range("b" & i).Value 
     Next i 
    End With 
End Sub 

有人可以幫助我完成這項工作所需的VBA。我有問題,與循環循環和每個值比較每個值在E.

+0

難道你是在比較A和C嗎?你的標題說a,e,b,f但你的循環說a,c,b,f ... – Grant

+0

對不起,應該是A到E,讓我調整代碼。我還將編輯以顯示我正在嘗試獲得的最終結果。 – user2644176

+0

如果我正確理解這一點,我會用excel中的公式來做到這一點 - 您的代碼表示如果E = A,則對每行都做F = B。從你的問題,我讀它,因爲你想從第一個列表中的所有項目水平對E表格開始E – RowanC

回答

0

我不是很確定你想要達到的目標。但是我根據自己的理解編寫了一個代碼。試試吧。

Sub Sample() 
    Dim lastRowA As Long, lastRowB As Long, i As Long 
    Dim ws As Worksheet 
    Set ws = Sheets("Sheet1") 
    With ws 
     lastRowA = .Cells(.Rows.Count, 1).End(xlUp).Row 
     lastRowE = .Cells(.Rows.Count, 5).End(xlUp).Row 
    End With 
    With ws 
     For i = 1 To lastRowE 
      CurrentEValue = Range("E" & i).Value 
      MatchFound = False 
      For j = 1 To lastRowA 
       CurrentAValue = Range("A" & j).Value 
       If CurrentAValue = CurrentEValue And Not MatchFound Then 
        Range("f" & i).Value = Range("b" & j).Value 
        MatchFound = True 
       End If 
      Next 
     Next 
    End With 
End Sub 
+0

完美工作。 幾件事我需要調整以滿足確切的需求並適應它。但這正是我想要完成的。感謝您對此的幫助。 – user2644176

0

所以,你要投入1-8行,B列到d的數據,到1號線,列F和以下,因爲對於第1到第8行,A列中的'11'與E1中的'11'匹配?
例如B1-> F1,C1-> H1(這就是我丟失了一些訂單第一的位置),D1-> G1,?? - > I1(?從哪裏專欄中,我來自做內容),
(追加下一源行的同一目標線:) B2-> J1,...

首先你需要澄清其中的cols F中的數據,我(和進一步)來自的。
然後:
如果我對你的意圖的假設是正確的,那麼這帶來了另一個問題:

  • 是否山坳è總是包含山坳的所有可能的值,也可能會有值(例如「14」)在col A中缺少col E?
  • col E中值的位置是否固定?

這裏有一些建議,代碼可能會澄清後如下:

  • 確定山坳線的數量
  • 確定山坳ë
  • 使用2路的行數:一個外部循環用於從列A和內部循環中搜索採用的數據列E
  • 使用ws.cells(row,col).value而不是range()
  • 如果要在同一個目標行中追加來自不同源代碼行的數據,請添加一個數組變量,以保留每個目標行的下一個空閒列的位置。

一般建議:

  • 不要使用變量的名字,如 '我'。不清楚的變量名稱會帶來許多缺點。使用iRow或類似的東西,而不是(容易處理的搜索和替換,鮮明的meaining,關於變量類型(I =整數)信息等)
  • 使用選項在模塊的頂部明確。這將迫使你明確聲明所有變量並確保變量的正確使用。
+0

謝謝你的建議,我將來會用到這個。 – user2644176

相關問題