修改宏以将vlookup结果放在下一个月的空列中

时间:2013-08-26 19:31:00

标签: excel vba excel-vba

我正在尝试自动执行我运行的月度报告。每个月,我运行一个查询(嵌入到单独的选项卡中),然后使用vlookup将值移动到当前月份的列中。

我想创建一个宏来移动当前月份的值,但我需要弄清楚的是,如何修改宏以检查是否已填写一个月的列,如果是,然后将每月数字放在右侧(下个月)的列中。我已经研究了一段时间了,但是我的VBA经验很少,而且当我遇到错误时会遇到困难。我知道我可以使用“IsEmpty”功能,但我不确定使用它的最佳方法。

以下是宏的副本:

 Range("N6").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-10],'ENT - Query Totals'!C2:C4,3,FALSE)"
Range("N6").Select
ActiveWindow.SmallScroll Down:=-9
Range("N6").Select
Selection.AutoFill Destination:=Range("N6:N82"), Type:=xlFillDefault
Range("N6:N82").Select
ActiveWindow.SmallScroll Down:=-60
Range("N6:N82").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Range("O64").Select
Cells.Replace What:="#N/A", Replacement:="0", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End Sub

所以基本上,我想检查“N6”是否为空。如果是,宏将使用vlookup将数据从查询选项卡移动到列“N”。如果它不为空,我希望它将查询选项卡中的数据复制到“O”列等中。

在继续学习VBA的过程中,我们将非常感谢任何帮助或指导

1 个答案:

答案 0 :(得分:0)

Dim copyRange as Range
Dim rowNum As Long

Range("N6").FormulaR1C1 = "=VLOOKUP(RC[-10],'ENT - Query Totals'!C2:C4,3,FALSE)"
Range("N6").AutoFill Destination:=Range("N6:N82"), Type:=xlFillDefault

Set copyRange = Range("N6:N82").Select
rowNum = 64

For each cell in copyRange
    If Not IsEmpty(Range("O" & rowNum) Then
        cell.copy destination:=Range("O" & rowNum)
        rowNum = rowNum + 1
    Else
        cell.copy Destination:=Range("N" & rowNums)
        rowNum = rowNum + 1
    End if
Next cell

我觉得这是在你所问的邻居的某个地方,但你说出问题的方式对我来说有点混乱