VBA vlookup将特定列从多个工作表复制到主工作表

时间:2017-05-26 09:47:30

标签: excel vba excel-vba vlookup

我正在使用Excel为结算系统生成报告,我想使用VBA来简化更新excel的过程。我想要做的是使用vlookup函数将各个命名工作表中的列(G:AI)反映回主表。所有工作表从第4行开始。(第3行是标题)

所以我会进一步简化这个过程:

VLOOKUP VBA(在命名工作表中进行更改时) 1.在命名工作表(“John”,“Charlie”,“George”)的Mastersheet中的列(G:AI)中启用Vlookup功能 2.由于Mastersheet是John,Charlie和George的混合数据,因此相应地在列(G:AI)上输入Vlookup公式,然后直到Mastersheet的最后一行 3.我的vlookup范围将来自命名工作表(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的vlookup值在列(A:AI)中 - 右列 ws12的vlookup值在列(AP:BR)中 - 列AI和列中的7列 ws13的vlookup值在列(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   

1 个答案:

答案 0 :(得分: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