我有一个像这样的Excel工作表。
User ID Status Date
A Open 1/1/2019
A Filled 1/2/2019
B Open 1/12/2019
B Filled 1/15/2019
C Open 1/22/2019
C Filled 1/31/2019
D Open 7/13/2002
E Open 8/14/2017
E Filled 9/15/2018
我需要一个代码来获取此输出。
UserID Open Filled
A
B
C
D
E
在这种情况下,列D的填充日期为空,因为数组中没有填充状态。
答案 0 :(得分:0)
这里是一个例子:
G2
中的公式:
=INDEX($C$2:$C$10,MATCH($F2,$A$2:$A$10,0))
H2
中的公式:
=LOOKUP(2,1/($A$2:$A$10=$F2),$C$2:$C$10)
向下拖动两个...
答案 1 :(得分:0)
如果您具有Excel 2010+,则可以使用“状态”列上的Power Query Pivot,而不会进行汇总。
所有步骤都可以从GUI完成,但这是M代码供参考:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"User ID", type text}, {"Status", type text}, {"Date", type date}}),
#"Pivoted Column" = Table.Pivot(#"Changed Type", List.Distinct(#"Changed Type"[Status]), "Status", "Date")
in
#"Pivoted Column"
答案 2 :(得分:0)
在这里我为您提供两种解决方案。两种方法都使用数组公式。一种是使用 MAX 和 IF 函数的组合,另一种是使用 INDEX 和 MATCH 的组合功能。虽然这些公式看起来有所不同,但它们暗示着相同的逻辑:
首先在A列和B列中找到用户ID和状态的位置,以找到C列中日期的相应位置。
请查看下面的说明,并注意示例中的日期格式为 dd / mm / yyyy ,并且我在示例中设置了以下名称:
将列A命名为用户ID
将B列命名为状态
将列C命名为日期
这是方法1的公式,您需要按 CSE (Ctrl + Shift + Enter)以使其起作用:
{=IF(MAX(IF(User_ID&Status=$F2&G$1,Date,0))=0,"",MAX(IF(User_ID&Status=$F2&G$1,Date,0)))}
这是方法2的公式,您还需要按 CSE 使其起作用:
{=IFERROR(INDEX(Date,MATCH($F2&G$1,User_ID&Status,0)),"")}
如果您有任何疑问,请告诉我。
干杯:)