Использование поиска в следующей доступной строке в Excel VBA

#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