Список VBA. Помогите мне, пожалуйста

#excel #vba #function #finance

Вопрос:

У меня есть список IPO в Excel, проведенных в Европе в 2000-2020 годах, и второй список всех кредитов, выданных в Европе в 1999-2020 годах. Мне нужно найти, какое из этих IPO из первого списка получило кредит из этого второго списка данных (кредит получен максимум за один год до IPO). Как я могу это сделать? Я написал этот код для VBA, кто-нибудь может помочь мне его настроить, пожалуйста? Есть ли более простой способ сделать это?

введите описание изображения здесь

код:

 Sub

i = 2

Do Until Cells(i, 1).Value = ""

j = 2
Cells(i, 5).Value = 0

Do Until Cells(j, 3).Value = "" Or Cells(i, 5).Value = 1

If Cells(i, 2).Value = Cells(j, 4).Value Then

    If Cells(i, 1).Value > Cells(j, 3).Value And Cells(i, 1).Value < Cells(j, 3).Value And Cells(i, 1).Value > Cells(j, 3).Value - 365 Then
            Cells(i, 5).Value = 1
    
    End If
    
    j = 1   i
    
    Loop
    
    i = i   1
Loop

End Sub
                            


   
 

Ответ №1:

Я могу достичь вашего результата без VBA, используя эту формулу

 =IF(ISNA(VLOOKUP(B7,$F$4:$G$7,1,FALSE)),0,IF(AND((C7-(VLOOKUP(B7,$F$4:$G$7,2,FALSE))<365),(C7-(VLOOKUP(B7,$F$4:$G$7,2,FALSE))>0)),1,0))
 

введите описание изображения здесь

В случае, если вы хотите сохранить последовательность своего столбца, вам необходимо использовать функцию сопоставления индексов для замены Vlookup

Комментарии:

1. спасибо тебе, Кин Сианг. Я пытался использовать его, но если я вставлю дату, которая также через 365 дней после даты IPO, она даст мне 1. Вы знаете, как я могу это исправить? Мне нужно «1» только в том случае, если дата займа указана до (максимум 365) даты IPO, а не после. Например, если вы вставите в G4 дату 1-21 марта, в результате у вас будет 1 (а не 0), даже если это произойдет после даты IPO.

2. Звучит просто. Вы можете проверить приведенную выше формулу, я просто добавляю еще одно условие, чтобы проверить диапазон дней между -365 и 365, затем возвращаю 1. Вы можете сравнить компанию a amp; e, это то, что вы хотите?

3. Что касается даты, я имею в виду, что функция должна выдавать 1 только в том случае, если: 1)»Дата займа» находится до «Даты IPO» И 2)»Дата займа» составляет максимум 365дней до «Даты IPO» (поэтому любой «Дата займа» после «Даты IPO» должен давать 0). В этом случае компания e должна вернуть 0, потому что это произошло после даты IPO. В случае компании а это должно правильно дать 1, потому что 1/3/19 составляет 306 дней (менее 365 дней) до даты IPO.

4. Вы можете проверить изменение выше, поэтому я установил диапазон дней больше 0 и меньше 365 и вернул результат точно так, как вы хотите, это то, что вы хотите?