Я хочу импортировать данные из другого файла (comcombtedWorkbook) в свой главный файл (файл, в котором выполняется код) с помощью vlookup. Затем мне нужно перетащить vlookup вниз в нижнюю строку данных (используя столбец 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
0
Rodge95 14 Мар 2018 в 14:36

2 ответа

Лучший ответ

В вашем коде слишком много неизвестных, чтобы дать конкретный ответ.

Некоторые наблюдения:

1) Всегда используйте Option Explicit в верхней части кода, это поможет вам выявить ошибки и несоответствия.

2) Остерегайтесь неиспользуемых переменных, объявленных в вашем коде

3) Всегда указывайте, с какой книгой и листом вы работаете; не ставьте просто Range ... или Cells .... это приводит ко всем видам ошибок.

4) Синтаксис VLOOKUP для работы с другой книгой должен быть в порядке

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

5) xlsx - это не текстовые файлы, кстати, ваш фильтр

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
0
QHarr 14 Мар 2018 в 12:53

Как я понял, вам нужно применить формулу vlookup в вашем главном файле для сбора данных из другой книги.

Правильная структура следующая: ActiveCell.FormulaR1C1 = "= ВПР ( 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

Это применит формулу vlookup в столбце I, начиная с строки 15, ища значение в той же строке, но в 8 столбце до нее (столбец «A»), и будет применяться для такого количества строк, сколько имеется значений в столбце M.

0
G. Jonathan 14 Мар 2018 в 12:12