【问题标题】:ADDRESS of cell found from LOOKUP function从 LOOKUP 函数中找到的单元格地址
【发布时间】:2018-12-02 19:32:07
【问题描述】:

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

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

(余额栏是自动生成的)。

这是[Credit] 列:

每个月的第一天是每个客户的付款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的结果。

有人可以帮忙吗?

【问题讨论】:

  • 您是否尝试过使用VLOOKUP
  • 如果你有行,你应该可以使用OffsetIndirectIndex在同一行找到对应的单元格。我会鼓励研究这些。
  • 如果我以后添加或删除列,偏移会出错。

标签: excel lookup-tables


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多