Excel:如何基于日历选中的日期匹配对应表格的行号?
Excel日历与数据表格行匹配解决方案
前提说明
- 日历工作表:同一日期包含最多9个单元格,选中某一单元格需对应数据表格的第N行(N为该日期在日历中的单元格序号,范围1-9)
- 数据表格:首行
A1:NB1为日期,工作表名由ScYear单元格指定 - 已通过公式获取选中日期在数据表格中的列号:
=IFERROR(MATCH(M3,INDIRECT("'"&ScYear&"'!A1:NB1",TRUE),0),"")(假设结果存于X3单元格)
步骤1:计算日历选中单元格的当日序号
在日历工作表目标单元格输入公式,统计当前选中单元格是所属日期的第几个位置:
=COUNTIF(M$2:M3, M3)
- 说明:
M$2需替换为当日第一个单元格的上方行(或当日单元格区域的起始行),公式返回1-9的序号,对应选中的是当日第N个单元格。
步骤2:匹配数据表格对应列的第N个可用行
根据“可用行”的定义选择对应公式:
情况1:匹配第N个非空行
=IFERROR(SMALL(IF(INDIRECT("'"&ScYear&"'!R2C"&X3&":R10C"&X3,FALSE)<>"",ROW(INDIRECT("'"&ScYear&"'!R2C"&X3&":R10C"&X3,FALSE))), COUNTIF(M$2:M3, M3)), "")
- 说明:
R2C:R10C对应数据表格第2-10行(若行1是表头,这部分对应实际可用的9行数据);<>筛选非空行,提取行号后取第N个。
情况2:匹配第N个空行(用于填充新数据)
将公式中的<>替换为=即可:
=IFERROR(SMALL(IF(INDIRECT("'"&ScYear&"'!R2C"&X3&":R10C"&X3,FALSE)="",ROW(INDIRECT("'"&ScYear&"'!R2C"&X3&":R10C"&X3,FALSE))), COUNTIF(M$2:M3, M3)), "")
合并为单个公式(可选)
若不想拆分单元格计算,可将列号公式直接嵌入,减少单元格依赖:
=IFERROR(SMALL(IF(INDIRECT("'"&ScYear&"'!R2C"&IFERROR(MATCH(M3,INDIRECT("'"&ScYear&"'!A1:NB1",TRUE),0),"")&":R10C"&IFERROR(MATCH(M3,INDIRECT("'"&ScYear&"'!A1:NB1",TRUE),0),"")&"",FALSE)<>"",ROW(INDIRECT("'"&ScYear&"'!R2C"&IFERROR(MATCH(M3,INDIRECT("'"&ScYear&"'!A1:NB1",TRUE),0),"")&":R10C"&IFERROR(MATCH(M3,INDIRECT("'"&ScYear&"'!A1:NB1",TRUE),0),"")&"",FALSE))), COUNTIF(M$2:M3, M3)), "")
内容的提问来源于stack exchange,提问作者Deke
相关产品推荐
相关产品推荐

