我正在使用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
答案 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