Excel循环与IF语句公式咨询:首呼对应次呼原因查询
获取客户首次呼叫后的第二次呼叫原因(Excel公式方案)
我刚好处理过类似的客户旅程分析需求,结合你的场景,我给你分两种Excel版本的方案,先假设你的数据结构是这样的(方便对应公式):
- A列:客户ID(比如ABC)
- B列:呼叫时间(必须是可排序的日期/时间格式,不然没法判断先后)
- C列:呼叫原因(比如Billing query、Technical query)
第一步:给每个客户的呼叫按时间排序并标记序号
首先得确保同一客户的呼叫是按时间先后排列的:
- 选中所有数据区域(包括表头),点击「数据」选项卡的「排序」,先按「客户ID」升序,再按「呼叫时间」升序排序。
- 新增一列(比如D列,命名为「呼叫序号」),在D2单元格输入公式:
=COUNTIFS($A$2:A2,A2)
下拉填充到所有行,这样每个客户的第一次呼叫会被标记为1,第二次为2,以此类推。
方案1:Excel 365/2021(支持动态数组,操作更简单)
在首次呼叫的行(也就是D列值为1的行,比如E2单元格)输入以下公式,下拉即可批量获取对应第二次呼叫的原因:
=XLOOKUP(1,($A$2:$A$100=A2)*($D$2:$D$100=2),$C$2:$C$100,"无第二次呼叫")
公式解释:
$A$2:$A$100=A2:匹配当前行的同一客户$D$2:$D$100=2:定位该客户的第二次呼叫XLOOKUP会找到同时满足两个条件的行,返回对应的C列呼叫原因;如果客户只有一次呼叫,就返回「无第二次呼叫」
方案2:旧版Excel(无XLOOKUP,用数组公式)
如果你的Excel版本不支持XLOOKUP(比如2019及更早),可以用INDEX+MATCH的组合公式,同样在E2单元格输入:
=IFERROR(INDEX($C$2:$C$100,MATCH(1,($A$2:$A$100=A2)*($D$2:$D$100=2),0)),"无第二次呼叫")
注意:
输入完公式后,不要直接按回车,需要按Ctrl+Shift+Enter作为数组公式确认,然后下拉填充。
举个实际例子
假设你的数据是这样的:
| 客户ID | 呼叫时间 | 呼叫原因 | 呼叫序号 | 第二次呼叫原因(公式结果) |
|---|---|---|---|---|
| ABC | 2024/1/1 | Billing query | 1 | Technical query |
| ABC | 2024/1/3 | Technical query | 2 | (无需填充,仅首次呼叫行需要结果) |
| DEF | 2024/1/2 | Technical query | 1 | Billing query |
| DEF | 2024/1/5 | Billing query | 2 | (无需填充) |
| GHI | 2024/1/4 | Billing query | 1 | 无第二次呼叫 |
这样就能精准提取每个客户首次呼叫对应的第二次呼叫原因了。
额外提示
- 如果同一客户有多个相同时间的呼叫,
COUNTIFS生成的序号会重复,这种情况可以把D列的公式改成=SUMPRODUCT(($A$2:A2=A2)*($B$2:B2<=B2)),确保按时间严格排序标记序号。 - 公式里的
$A$2:$A$100可以根据你的实际数据范围调整,比如如果数据到第200行,就改成$A$2:$A$200。
内容的提问来源于stack exchange,提问作者Annalise Azzopardi
相关产品推荐
相关产品推荐

