2015-09-24 20 views
0

我有一個宏,它主要在Sheet1中的列C中搜索值「Rec」並複製列D中的相應值,然後將其粘貼到列B中最後一個打開的單元格中Sheet2中。它不只是什麼是應該做的,如下:在Vlookup中使用循環和求和函數

Sub FindPasteGSVInNextCell() 

Worksheets("Sheet2").Activate 

Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = _ 
WorksheetFunction.VLookup("Rec", Sheet1.Range("C2:H25"), 2, False) 

End Sub 

我現在想要的代碼,而不是隻是在尋找一個單一的「REC」值,以搜索與「REC」的所有行的列C並總結列D中的所有相應值,然後將該總和放入Sheet2中。

我假設我需要某種Do Until循環或某種東西,但我不確定如何格式化它...我是VBA的初學者,所以任何幫助都將不勝感激。

+1

你可以簡單地使用'sumif'方程,第二片。 –

+0

我同意@ScottCraner這可以使用SUMIF公式輕鬆完成,不需要vba。您是否嘗試使用VBA執行此任務的具體原因? – tigeravatar

+0

我認爲它需要結合VBA,因爲它將成爲一個大型的電子表格,當新的數據填充Sheet1時每天更新。它必須運行大約40個不同類別的數據總和,並將它們中的每一個導入Sheet2的相應日期。所以我不認爲一個基本的sumif會起作用,因爲它計算的主數據集將在每天變化,如果這是有道理的話..可能會更復雜,但從長遠來看,我認爲vba會使它成爲很多更容易 - 只需要弄清楚這個循環的東西。 – Willarci3

回答

0

vlookup將無法工作,因爲它將繼續只抓取「Rec」的第一個實例。

在表2列出所有可能的類別在A列,然後在列B1把

= sumif(Sheet1!C:C,A1,Sheet1!D:D) 

然後複製下來。這將按類別獲得總數。

如果你想使用VBA,你仍然需要一個設置在某個地方的類別列表,無論是硬編碼還是列在你可以循環的地方。

如果您的列表A列Sheet 2上,那麼你會:

dim ws as worksheet 
set ws = Worksheets("Sheet2") 
For each i in ws.range(ws.Range("A1"),ws.Range("A1").offset(xldown)).Cells 
    i.offset(,1) = WorksheetFunction.Sumif(Worksheets("Sheets1").Range("C:C"), _ 
     i,Worksheets("Sheets1").Range("D:D")) 
next i 
+0

好吧,謝謝,我會給你一個鏡頭,看看它是否適用於我的應用程序。 - 快速思考,你怎麼想可能嘗試某種類型的If..Then循環?例如,如果代碼寫道:如果當前行包含列C中的「Rec」和列A中的「某些其他條件」,則運行Vlookup,否則移動到下一行,直到它遇到空行。讓我知道你的想法是在這種方法 – Willarci3

+0

@ Willarci3 Vlookup將無法正常工作。它循環遍歷第二個參數的範圍,直到找到第一個參數。一旦找到它停止循環的參數。要使其工作,您需要將第二個參數中的範圍設置爲單個單元格。這將打敗Vlookup的目的。 –