2017-05-26 92 views
0

我正在使用Excel爲計費系統生成報告,並且我想使用VBA來簡化更新Excel的過程。我想要做的是使用vlookup函數將各個命名工作表中的列(G:AI)反射回主表格。所有片材從排4.開始(第3行是頭)VBA vlookup將多個工作表中的特定列複製到工作表

因此,我將進一步簡化該過程爲這樣:

VLOOKUP VBA(當在名稱的工作表所做的更改) 1.要啓用VLOOKUP函數在名稱工作表(「John」,「Charlie」,「George」)的名單中列(G:AI) 2.由於Mastersheet是John,Charlie和George的混合數據,用於跨列輸入Vlookup公式(G: AI),然後直到最後一行爲止。3.我的查找範圍將從命名工作表(John,Charlie,George)開始,範圍(A1:AI)從第7列第4行開始直到數據結束。

ws1.Cells(r, c).Value = Application.VLookup(ws1.Cells(r, 1).Value, wsNames.Range("A1:AI500"), colnum, False) 

以下是我到目前爲止的代碼。這是我現在制定的(有幫助的)。任何幫助將不勝感激。

我的問題是,運行代碼時,ws11的vlookup值在正確的位置。但是,ws12和ws13的vlookup值將移向工作表的更靠左側。例如, 而ws11的查找值在列(A:AI)中 - 右列 ws12的查找值在列(AP:BR) - 列AI中的7列和 ws13的查找值在列BY:DA) - 列BR欄中的7列 是否有一行代碼可以插入來解決此問題?

Sub green_update() 
Dim wb As Workbook, ws1 As Worksheet, ws11 As Worksheet, ws12 As Worksheet, ws13 As Worksheet 

Set wb = ThisWorkbook 
Set ws1 = wb.Sheets("Sheet1") 
Set ws11 = wb.Sheets("Sheet11") 
Set ws12 = wb.Sheets("Sheet12") 
Set ws13 = wb.Sheets("Sheet13") 


Dim colNo As Long, ARowNo as Long 
Dim for_col As Long, i As Long, r As Long, c As Long, colnum As Long 
r = 4: c = 7: colnum = 7 

Dim wsNames As Variant 
For Each wsNames In Sheets(Array("sheet11", "sheet12", "sheet13")) 

colNo = wsNames.Cells("4", Columns.Count).End(xlToLeft).Column 
For for_col = 1 To colNo 

ARowNo = wsNames.Cells(Rows.Count, "A").End(xlUp).row 

    For i = 1 To ARowNo 
    ws1.Cells(r, c).Value = Application.VLookup(ws1.Cells(r, 1).Value, wsNames.Range("A1:AI500"), colnum, False) 
    If IsError(ws1.Cells(r, c).Value) Then 
    ws1.Cells(r, c).Value = 0 
    End If 
    r = r + 1 

    Next 

r = 4 
colnum = colnum + 1 
c = c + 1 

Next 

colnum = 7 

    Next wsNames 

End Sub 
+0

而你的問題是......? – SJR

+0

我在做一個假設,這是由於colnum未被設置之前它被用於查找 – Smithy7876

+0

@SJR我已經編輯了問題,以便更好的理解下降。我對延遲致歉 – Carmen

回答

0

老實說,我根據發佈的代碼看不到可能導致問題的原因。在下面的代碼中沒有什麼區別 - 我已經整理了幾個循環並且包含了最後一行變量。讓我知道你是怎麼辦的。

Sub green_update() 

Dim wb As Workbook, ws1 As Worksheet 

Set wb = ThisWorkbook 
Set ws1 = wb.Sheets("Sheet1") 

Dim colNo As Long, ARowNo As Long 
Dim for_col As Long, i As Long, r As Long, c As Long, colnum As Long 

r = 4: c = 7: colnum = 7 

Dim wsNames As Variant 

For Each wsNames In Sheets(Array("sheet11", "sheet12", "sheet13")) 
    colNo = wsNames.Cells("4", Columns.Count).End(xlToLeft).Column 
    ARowNo = wsNames.Cells(Rows.Count, "A").End(xlUp).Row 
    For for_col = 1 To colNo 
     For i = 1 To ARowNo 
      ws1.Cells(r, c).Value = Application.VLookup(ws1.Cells(r, 1).Value, wsNames.Range("A1:AI" & ARowNo), colnum, False) 
      If IsError(ws1.Cells(r, c).Value) Then 
       ws1.Cells(r, c).Value = 0 
      End If 
      r = r + 1 
     Next i 
     r = 4 
     colnum = colnum + 1 
     c = c + 1 
    Next for_col 
    colnum = 7 
Next wsNames 

End Sub 
+0

我試過了代碼,發生了什麼事情,它只顯示一張表中的查找值。我玩過代碼「For Each wsNames In Sheets(Array(」sheet11「,」sheet12「,」sheet13「))」並重新安排了序列。因此,當運行表(Array(「sheet11」,「sheet12」,「sheet13」)時,僅顯示「sheet13」的vlookup值。當運行表(Array(「sheet13」,「sheet12」,「sheet11」),顯示「sheet11」的vlookup值,它們似乎只取最後一張,但當運行表(「sheet11」,「sheet13」,「sheet12」)時,顯示的vlookup值是中間的表單。 「價值沒有顯示 – Carmen

+0

我做了一些非常愚蠢的事情,所以修改了代碼,以糾正上述問題,但不確定你的原始問題。 – SJR

+0

你能描述你如何期待你的結果出現嗎?在sheet11上查找,然後下一個工作表的結果應該顯示在哪裏 - 直接在下面?每個工作表的「colNo」的值是多少? – SJR

相關問題