【发布时间】:2017-10-27 03:56:45
【问题描述】:
我正在使用 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
【问题讨论】:
-
你的问题是……?
-
我假设这是由于在 vlookup 中使用之前未设置 colnum 而导致的失败
-
@SJR 我已经编辑了这个问题以便更好地理解。我为延误道歉
-
@smithy7876 我认为 colnum 没问题,因为我需要它在运行时在不同的列中运行。现在分别是 ws12 和 ws13 中的 vlookup 值的对齐存在问题。谢谢你。 :)
-
目前你已经硬编码了
wsNames.Range("A1:AI500")。您是说这只适用于循环中的第一张纸,而对于其他每一张纸,它应该按照您的指示向右移动?