#vba #excel #lookup
#vba #excel #поиск
Вопрос:
Я пытаюсь реализовать функцию поиска в Excel Vba. У меня нет никакого кода для совместного использования, потому что я не уверен, с чего начать реализацию.
При открытии книги я хочу использовать VBA для ввода сегодняшней даты в следующую доступную строку в столбце A, над которым я сейчас работаю. Однако в этот момент в столбце B в той же строке я должен найти курс акций в таблице, которая у меня есть, где J2 — это дата, а J3 — цена акции.
Я думаю, мне нужна формула, в которой я могу найти дату, которую я только что добавил в эту таблицу, а затем получить цену, соответствующую этой дате. Я очень хорошо разбираюсь в Vlookups в Excel; я просто понимаю, как использовать поиск здесь для каждой следующей доступной строки.
Вот мой код для дат:
Dim rnum as integer
rnum = sheet17.usedrange.cells.rows.count 1
sheet17.cells(rnum, 1).value = date
Я ищу функциональность поиска относительно (rnum, 2)
в качестве следующей доступной строки.
Ответ №1:
Если вы хотите жестко закодировать это, это было бы
sheet17.cells(rnum, 2).formula = "=vlookup(" amp; sheet17.cells(rnum, 1).address(false,false,xlA1) amp; ", $J:$K, 2, false)"
Если вы предпочитаете использовать любую формулу в предыдущей строке,
sheet17.range(sheet17.cells(rnum-1, 2), sheet17.cells(rnum, 2)).FillDown
Ответ №2:
Я предполагаю, что когда вы говорите «коэффициент запаса в таблице», вы имеете в виду «коэффициент запаса на рабочем листе», а также предполагаете, что значения в столбце J содержат коэффициенты запаса для одного и того же запаса. Другими словами, вы сопоставляете только дату в этом столбце, а не символ акции И дату. (Пожалуйста, дайте мне знать, если я ошибаюсь в этих предположениях).
С учетом сказанного вы можете попробовать следующую формулу в столбце B:
=IF(A50<>"",INDEX(J:J,MATCH(A50,StockSheet!J:J,0) 1),"")
В этом случае формула находится в ячейке B50 и предполагает, что новая дата находится в A50. Там говорится, что учитывая значение даты в ячейке J n, дайте мне значение в ячейке J n 1.
Я добавил небольшую проверку проверки, чтобы увидеть, было ли значение в A50, но вы, возможно, захотите пойти глубже, чем это.
Кроме того, если вы хотите сделать значение в B50 статическим, то просто используйте следующий код:
Sub mySub()
Dim x As Range 'I assume this range will be for your currentm, working worksheet
Set x = Range("B50", "B50")
x.Formula = "=IF(A50<>"""",INDEX(J:J,MATCH(A50,Codes!J:J,0) 1),"""")"
x = x.Value
End Sub