【问题标题】:Excel find if user paid monthly invoiceExcel查找用户是否支付月度发票
【发布时间】:2015-08-07 23:38:59
【问题描述】:

我有两个工作表

Worksheet1 看起来像:

Customer  | June | July | August
John      |      |      |     
Jane      |      |      |     
Bob       |      |      |     
Ann       |      |      |     

Worksheet2 看起来像:

Customer  | Paid Amount | Month
John      | $50         | June    
Jane      | $20         | June    
Bob       | $100        | June    
Ann       | $10         | June  

John      | $30         | July    
Jane      | $40         | July      
Ann       | $5          | July  

Bob       | $10         | August
John      | $10         | August
Jane      | $20         | August

在 Worksheet1 中,我需要一个公式,通过从 Worksheet1 中获取客户名称,在 Worksheet2 上查找该客户名称并检查是否有付款,只需返回一个字符串,如“Paid”或“Not Paid”当月的记录。根据上面的示例数据,Worksheet1 中的结果应如下所示:

Customer  | June | July     | August
John      | Paid | Paid     | Paid    
Jane      | Paid | Paid     | Paid    
Bob       | Paid | Not Paid | Paid   
Ann       | Paid | Paid     | Not Paid    

我尝试了以下方法:

IF(ISNA(VLOOKUP([@Customer],table_from_Worksheet2,2,FALSE)),"No","Yes")

问题是检查整个 Worksheet2 而不是按相关月份过滤。我需要以某种方式调整 VLOOKUP(或使用其他方法,例如 INDEX 和 MATCH,但我不知道如何使用它们)来查看客户是否为该特定月份付款。

【问题讨论】:

    标签: excel if-statement excel-formula vlookup


    【解决方案1】:

    考虑使用数据透视表,其中列标签框中包含“月份”,行标签框中包含“名称”,值框中包含“支付金额计数”。

    在工作表 2 上选择整个表格。

    选择插入-->数据透视表(功能区的最左侧)

    如上所述,拖放类别。

    这将在客户已付款的每个月/名称组合中为您提供 1,否则为空白。现在选择数据透视表的内部,右键单击并“更改格式”选择自定义格式,然后向下滚动到名为 "TRUE";"TRUE";"FALSE" 的类型并应用。

    如果您愿意,请右键单击“总计”和“删除总计”。

    数据透视表一开始很吓人,但非常强大,值得学习。

    (我在制作下表之前添加了另一个人)

    【讨论】:

    • 谢谢亚当。真的很酷的方法,我将不得不了解更多关于数据透视表的信息。不幸的是,我不能接受您的回答,因为当我创建数据透视表时,它以一种非常奇怪的方式重新安排了我的月份。原始表从 2014 年 6 月到 2015 年 7 月从上到下,当我创建数据透视表时,它变得很不稳定ctrlv.in/617382。不管我赞成你的答案,因为你已经向我展示了数据透视表中的价值:)
    • 您的日期目前是文本,因此数据透视表不是读取从最早到最新的日期,而是按字母顺序读取它们。四月、八月、十二月等
    • Rwilson 关于日期是文本是正确的。无论是否使用数据透视表,我都会解决这个问题。作为旁注,它可以重新排列数据透视表顺序,(选择一个头部,然后悬停直到你得到一个手形图标,然后将它们拖到你想要的位置)这将是一个痛苦,不过,你有几个月的时间。
    【解决方案2】:

    将公式放在工作表 1 的 B2 中(John 和 June 相遇的地方)并上下复制。请务必使用 CTRL + SHIFT + ENTER 输入公式:

    =IFERROR(IF(INDEX(Worksheet2!$B$2:$B$12,MATCH($A2,IF(B$1=Worksheet2!$C$2:$C$12,Worksheet2!$A$2:$A$12),0)),"Paid","Not Paid"),"Not Paid")
    

    对于您可以使用的表格:

    =IFERROR(IF(INDEX(Table_from_Worksheet2[Paid Amount],MATCH([@Customer],IF(B$1=Table_from_Worksheet2[Month],Table_from_Worksheet2[Customer]),0)),"Paid","Not Paid"),"Not Paid")
    

    您还需要使用 CTRL + SHIFT + ENTER 输入 请注意,您需要根据需要调整范围。

    【讨论】:

    • 谢谢 rwilson。我无法调整范围。 Worksheet2 中的所有数据都在名为“table_from_Worksheet2”的表中。有没有办法用表名替换范围?这样,当我向表格中添加数据时,我就不必更改公式中的范围。
    • 我刚刚在我的答案中添加了一个表格公式。
    • 已接受。非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多