答案1
答案2
如果您拥有具有、和函数的 Office 365 FILTER
,UNIQUE
则TEXTJOIN
可以使用以下公式:
请注意,我使用了带有结构化引用的表,但如果您愿意,可以将其转换为正常寻址
email: =SORT(UNIQUE(Table1[email]))
Contact: =TEXTJOIN(", ",TRUE,UNIQUE(FILTER(Table1[Contact],(Table1[email]=I2))))
expired: =MAXIFS(Table1[expired],Table1[email],I2)
email
公式将SPILL
向下。其他公式必须填充/向下拖。
Contact
如果多个联系人不同,则会将它们连接起来,否则只返回一个联系人。
如果您没有这些功能,您可以使用Power Query
Windows Excel 2010+ 和 Office 365 Excel 中提供的 获取所需的输出。
你不得不刷新如果数据表中进行了更改,则查询。
- 选择原始表格中的某个单元格
Data => Get&Transform => From Table/Range
- 当 PQ UI 打开时,导航至
Home => Advanced Editor
- 记下代码第 2 行的表名称。
- 用以下代码替换现有代码M 代码以下
- 将粘贴代码第 2 行的表名更改为您的“真实”表名
- 检查任何注释以及窗口
Applied Steps
,以更好地理解算法和步骤
M 代码
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"email", type text}, {"Contact", type text}, {"expired", type date}}),
//Group by Email
// "Contact" line not available from the UI
// If there are multiple, **different** contacts, they will all be returned
// otherwise just the unique contact will be returned
#"Grouped Rows" = Table.Group(#"Changed Type", {"email"}, {
{"Contact", each Text.Combine(List.Distinct([Contact]),", ")},
{"Expired", each List.Max([expired]), type nullable date}
})
in
#"Grouped Rows"
答案3
上述解决方案适用于定期进行广泛的过滤。对于简单的解决方案,我会进行多列排序,首先按电子邮件排序,然后按到期时间排序(升序)。然后创建一个带有公式的“最新联系人”列
=IF(B2="",B1,B2)
然后创建一个“最新到期日”列
=IF(C2="",C1,C2)
然后创建“重复”列
=IF(A2=A3,"duplicate","final")
现在过滤所有“最终”行,然后根据需要复制并粘贴到新工作表中。