Использование функции поиска в VBA - PullRequest
0 голосов
/ 13 мая 2019

В настоящее время я автоматизирую отчет о продажах с помощью VBA, и у меня возникают проблемы с вставкой формулы с использованием VBA с динамическим диапазоном.Моя формула с поиском находит последнюю неделю, которую заказал клиент.

Текущая неделя является последней и всегда является столбцом, предшествующим столбцу Всего.У меня возникли проблемы со ссылкой на этот последний столбец с текущей недели.

=LOOKUP(2,1/(CL[@[Week 1]:[Week 17]]>0),COLUMN(CL[[#Headers],[Week 1]:[Week 17]]))

Я не был уверен, как ссылаться с помощью заголовков.
Таким образом, первая часть моего кода находит номер столбца и, используя номер столбца, я получаю ссылку Letter.Не уверен, как использовать Письма с моей LOOKUP формулой

Sub LastOrder()
    Dim strSearch As String
    Dim strSearchEnd As String
    Dim aCell As Range
    Dim endCell As Range
    Dim startingCol As Variant
    Dim endingCol As Variant
    Dim colFirstWeek As Variant
    Dim ColLastWeek As Variant
    Dim firstCheck As Variant
    Dim lastCheck As Variant

    'find the column number for week 1 and total 

    strSearch = "Week 1"
    strSearchEnd = "Total"  

    Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

    If Not aCell Is Nothing Then
        startingCol = aCell.Column
    End If

    Set endCell = Sheet1.Rows(1).Find(What:=strSearchEnd, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

    If Not endCell Is Nothing Then
        endingCol = endCell.Column - 1  
        'this is used to get column number of current week 
    End If

    'Use letter reference 

    firstCheck = Split(Cells(, startingCol).Address, "$")(1)
    lastCheck = Split(Cells(,  endingCol).Address, "$")(1)

    Debug.Print (firstCheck)
    Debug.Print (lastCheck)

    Range("CL[Last Week Ordered]").FormulaR1C1 = _
    "LOOKUP(2,1/(firstCheck:lastCheck>0),COLUMN(firstCheck:lastCheck))

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете попробовать эту формулу:

=LOOKUP(2, 1 / ( [@[Week 1]]:INDEX([@], , COLUMNS([@]) - 1) > 0 ), 
         COLUMN( [@[Week 1]]:INDEX([@], , COLUMNS([@]) - 1) ) )

Несколько функций Excel, таких как INDEX и OFFSET, возвращают ссылку на диапазон, поэтому их можно использовать с оператором диапазона : и Range("INDEX(A1:B1, 1, 1)") в VBA.

...