通过LOOKUP函数找到的单元格地址

时间:2018-12-02 19:32:07

标签: excel lookup-tables

我需要的是在LOOKUP函数中找到的单元格的地址。

我有一张桌子,上面有各种客户订单和付款。 tbl_main 与我的问题有关的列是[Receive Date][Credit][Balance]

  

(自动生成“余额”列)。

这是[Credit]列:

enter image description here

每个月的第一天是每个客户的付款Due Date,他需要支付该月完成的所有工作。因此,基于以下三点,我需要一个 CELL 来显示due date是什么:

  1. [Credit]列中使用值查找最后一个单元格。仅此一项,我就知道了:=LOOKUP(2,1/(tbl_main[Credit]<>""),tbl_main[Credit])
  2. 在同一行上找到[Balance]列。如果是负数,请继续。
      

    (客户在下个月的第一天还钱)

  3. 在同一行上找到[Receive Date]列,并计算其到期日是
      

    (下个月的第一天是)。

我已经弄清楚了这个孤独:=EOMONTH(B328,0)+1,但是B328当然是我的测试单元。我需要我的公式能够计算出row index 4。在某个位置的单元格中显示此due date

我只是不知道如何在不使用VBA的情况下编写公式来实现这一目标。

我尝试结合使用LOOKUPMATCH的各种方法,但获得了#N/A的结果。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这是我想出的代码。它特定于我自己的需求,但也许有相同问题的人可以从中获取一些有用的代码。

Sub GetPaymentDueStatus()

'#################################
'Get \ Set "Payment Due" field
'#################################

'If not viewing one client - exit sub
If ActiveSheet.Range("SelectedClient") = "ALL CLIENTS" Then

    Range("PaymentDueStatus") = "N\A"
    Range("PaymentDueDate") = "N\A"

    Exit Sub

Else

    'Client has no debt
    If Range("Total_All") >= 0 Then

        Range("PaymentDueStatus") = "SETTLED"
        Range("PaymentDueDate") = "N\A"

            'Client has debt - check if on time or overdue
            Else

                '#################################
                'Start Calculation
                '#################################

                Dim rownumCredit As Long
                Dim colCredit As Long
                Dim rngCredit As Range

                Dim LastPaymentDate As Date
                Dim MonthAfterPayment As Date

                Set rngCredit = Range("rng_credit").Find(what:="*", LookIn:=xlValues, searchdirection:=xlPrevious)

                rownumCredit = rngCredit.Row
                colCredit = rngCredit.Column

                '#################################
                'Calculate the Last Payment date
                'if it's ovedue
                '#################################

                'Get date of last payment
                LastPaymentDate = Cells(rownumCredit, Range("rng_recDate_main").Column)

                'Get next first of the month from last payment
                MonthAfterPayment = WorksheetFunction.EoMonth(Cells(rownumCredit, Range("rng_recDate_main").Column), 0) + 1

                'Check if overdue
                If Month(MonthAfterPayment) <= Month(Date) Then

                    Range("PaymentDueStatus") = "OVERDUE"

                Else

                    Range("PaymentDueStatus") = "ON TIME"

                End If

                Range("PaymentDueDate") = MonthAfterPayment


    End If

End If

End Sub