Excel VBA vlookup с использованием дат

Я работаю с тремя листами. На стартовой странице рабочего листа указаны даты от A4 до последней. У меня есть лист трендов фонда с датами от A11 до последней строки. Vlookup ищет Даты в палитре тренда Фонда на основе списка Дат в стартовом листе. Диапазон таблиц поиска в листе тренда Фонда – это диапазон (A11: C11) для последнего . Когда дата будет найдена, это приведет к смещению (3,0) , и это значение будет представлено в виде листа с учетом диапазона расходов («C7»). Это будет зависеть до последнего в листной странице A4.

= VLOOKUP («Стартовая страница»! A4, «Фондовый тренд»! A11: C21,3,0)

= VLOOKUP ('Стартовая страница'! A5, 'Trend Trend'! A12: C22,3,0)

поскольку код i не был успешным:

Sub equity() Dim Nav_date As Date Dim equity As Integer Nav_date = Sheets("Start page").Range("A4") equity = Application.WorksheetFunction.VLookup(Nav_date,_ Worksheets("Fund Trend").Range("A11:C12"), 3, False) Sheets("Acurred Expenses").Range("C7") = equity End Sub 

Я думаю, что этот ответ можно разбить на три части: правильно ссылаться на свойства объекта Range , извлекать последнюю строку данных и использовать цикл

Правильно ссылаясь на значение диапазона:


Первое, что я заметил, это то, что вы пытаетесь назначить переменную Date в качестве объекта Range .

Эта строка:

Nav_date = Sheets("Start page").Range("A4")

Должно быть:

Nav_date = Sheets("Start page").Range("A4").Value

Range – это объект с свойствами и методами. Вы должны явно указать, что именно о диапазоне, который вы хотите получить. Это значение, это адрес ячейки и т. Д.

Подобным образом этот неправильный синтаксис повторяется ниже. Линия:

Sheets("Acurred Expenses").Range("C7") = equity

Должно быть:

Sheets("Acurred Expenses").Range("C7").Value = equity

EDIT: По комментариям почему theq поднимает точку свойств по умолчанию . Технически Sheets("Acurred Expenses").Range("C7") = equity кода Sheets("Acurred Expenses").Range("C7") = equity не является некорректным и будет работать, потому что для свойства по умолчанию диапазона является Value . Я предпочитаю быть более явным, но это мои личные предпочтения, поэтому я всегда использую Range.Value поэтому нет двусмысленности. В любом случае это должно работать!

Получение последней строки рабочего листа


Чтобы найти последнюю использованную строку данных на листе, мы можем начинать в нижней части книги и «искать», пока не найдем первую строку (которая будет соответствовать последней строке данных на листе).

Этот код будет таким же, как активация последней ячейки в столбце A и их нажатие CTRL + Shit +

 Sub LastRow() Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row Debug.Print lRow End Sub 

Повторяю, это начинается в самой нижней строке и идет полным путем, возвращая номер строки, где он останавливается. Это соответствует последнему значению, введенному в столбце A. Возможно, вам придется изменить A, если ваши данные находятся в другом столбце.

Петля


Наконец, мы можем собрать все, что мы узнали вместе. После того, как у вас есть lRow который соответствует вашей последней строке в вашем наборе данных, мы можем выполнить поиск VLOOKUP следующим образом:

 Sub equity() Dim Nav_date As Date Dim equity As Integer Dim lRow As Long Dim i As Long lRow = Sheets("Start page").Cells(Rows.Count, 1).End(xlUp).Row For i = 4 To lRow 'Begin in Row 4 of the "Start page" sheet Nav_date = Sheets("Start page").Range("A" & i).Value 'Tell code to continue even if error occurs On Error Resume Next equity = Application.WorksheetFunction.VLookup(Nav_date, _ Worksheets("Fund Trend").Range("A11:C12"), 3, False) 'Check the results of the VLOOKUP, an error number of 0 means no error If Err.Number = 0 Then 'Here I use i+3 because the data started in row 7 and I assume 'it will always be offset by 3 from the "Start Page" Sheets("Acurred Expenses").Range("C" & i + 3).Value = equity End If 'Return to normal error handling On Error GoTo 0 Next i End Sub 
  • Требуется помощь по запросу VLOOKUP - подсчет из диапазона
  • Понимание формулы vlookup в Excel?
  • Excel: AverageIFS вместо LOOKUP или SUMPRODUCT
  • Как объединить функцию vlookup и гиперссылки?
  • Vlookup массив формул в Excel
  • Excel: различные ячейки с повторяющейся функцией
  • вложенные vlookup в excel 2013
  • Excel проверяет значение в разных ячейках в строке
  • vlookup, но имя ячейки, которая вернет не значение в ячейке
  • нужна помощь с excel vlookup
  • Vlookup с недействительным шаблоном (неполное совпадение строк) при длинных значениях
  • Interesting Posts

    Ячейка Excel COUNTIF содержит заданный текст (частичное совпадение)

    Экспорт шаблона в каждый столбец И столбцы для разделения листов

    Данные не установлены в excel

    xlrd – проблема при открытии файла

    Open XML SDK – динамически создавать строки

    Читать только ячейки Excel со значениями python win32com

    Разбор Excel в python и форматирование словаря

    Как связать массив с другим листом в Excel

    IndexOutOfBoundsException при попытке чтения файла MS Excel с использованием Apache POI-HSSF

    Динамически выбирать динамический диапазон

    Просмотрите все файлы во ВСЕХ вложенных папках и извлеките данные из одной ячейки и вставьте в Master Workbook

    Импорт Excel дает ошибку «System.InvalidOperationException: поставщик Microsoft.Jet.OLEDB.4.0» не зарегистрирован »

    Excel перечисляет именованный диапазон в листе и получает значение

    Как я могу заблокировать первую строку и первый столбец таблицы при прокрутке, возможно, используя JavaScript и CSS?

    Блоки Excel IF в сочетании с привязкой к листам

    Давайте будем гением компьютера.