Vlookup从另一个工作簿填充到最后一行

时间:2018-03-14 11:36:23

标签: excel string vba excel-vba vlookup

我希望使用vlookup将数据从另一个文件(combinedWorkbook)导入我的主文件(运行代码的文件)。然后我需要它将vlookup向下拖动到底部的数据行(使用masterfile中的列M作为数据结束时的引用),单元格I15是主文件中vlookup的起始点。

我遇到的问题是,在运行宏时,vlookup发生在我的主文件中的单元格M10中,而不是将vlookup拖动到数据的末尾而不是引用组合的工作簿。

任何帮助都将不胜感激。

这是我到目前为止所得到的

Dim combinedBook As Workbook
Dim filter As String
Dim caption As String
Dim combinedFilename As String
Dim combinedWorkbook As Workbook
Dim targetWorkbook As Workbook

MsgBox ("Select Unpaid Capital Extract")

Set targetWorkbook = ThisWorkbook

filter = "Text files (*.xlsx),*.xlsx"
caption = "Please Select an input file"
combinedFilename = Application.GetOpenFilename(filter, , caption)

Set combinedWorkbook = Application.Workbooks.Open(combinedFilename)

ThisWorkbook.Activate
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-8],combinedWorbookSheet1!R1C1:R700000C2,2,0)"
Range("M16").Select
Selection.End(xlDown).Select
Range(Selection, Selection.End(xlUp)).Select
Range("I15:I60297").Select
Range("I60297").Activate
Selection.FillDown
Range("I15").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False
Selection.End(xlUp).Select
Range("I15").Select

combinedWorkbook.Close False

2 个答案:

答案 0 :(得分:0)

据我所知,您需要在主文件中应用vlookup公式,从另一个工作簿中收集数据。

正确的结构如下: ActiveCell.FormulaR1C1 =" = VLOOKUP( RC [8] ,[Book1] Sheet1! R1C5:R23C6 ,2,FALSE)"

第一个粗体文本是您要查找的值相对于活动单元格的位置。

第二个粗体文本是您的参考表在其他工作簿中的位置(此处为第1册)。

您可以使用循环将此公式应用于主文件。

Dim lastRow as Integer
lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "M").End(xlUp).Row
endCount = 15 + lastRow
For i = 15 to endCount
ActiveSheet.Cells(i,13).FormulaR1C1 = "=VLOOKUP(RC[-8],[combinedWorkbook]Sheet1!R1C1:R700000C2,2,FALSE)"
next i

这将在我从第15行开始的第I列中搜索vlookup公式,搜索同一行中的值但是之前的8列(列" A")并且将应用尽可能多的行在M栏中。

答案 1 :(得分:0)

您的代码中有太多未知数可以给出具体的答案。

一些观察结果:

1)始终在代码顶部使用Option Explicit,它会为您带来错误和不一致。

2)注意代码中声明的未使用的变量

3)始终指定您正在使用的工作簿和工作表;不要只放Range ...或Cells ....这会导致各种各样的错误。

4)使用其他工作簿的VLOOKUP语法必须符合订单

'[" & combinedWorkbook.Name & "]Sheet1'

5)xlsx不是文本文件btw re:你的过滤器

6)对于其余的,即你想要公式的地方,你如何确定最后一行等我只是猜测。在编码时要特别注意并首先尝试使用子弹指向伪代码,以便清楚每个阶段的情况。

Option Explicit
Sub test()

    Dim filter As String
    Dim caption As String
    Dim combinedFilename As String
    Dim combinedWorkbook As Workbook
    Dim targetWorkbook As Workbook

    MsgBox "Select Unpaid Capital Extract"

    Set targetWorkbook = ThisWorkbook

    filter = "Text files (*.xlsx),*.xlsx"
    caption = "Please Select an input file"
    combinedFilename = Application.GetOpenFilename(filter, , caption)

    Set combinedWorkbook = Application.Workbooks.Open(combinedFilename)

    'Assuming M is used to find last row in targetWorkbook
    Dim lastRow As Long

    With targetWorkbook.Worksheets("Sheet1") 'this wasn't specified (specify appropriate sheet name)

        lastRow = .Cells(.Rows.Count, "M").End(xlUp).Row

         'Assuming I is where formula is being put
        .Range("I15:I" & lastRow).FormulaR1C1 = _
                           "=VLOOKUP(RC[-8],'[" & combinedWorkbook.Name & "]Sheet1'!R1C1:R700000C2,2,0)"

        combinedWorkbook.Close False

    End With

End Sub