国庆期间,老徐整理了之前粉丝们的常见问题,其中发现很多人会对excel数字提取、文本挖掘有比较大的需求,今天特别将这几种常见的案例一一复现并通过函数撰写给出解决办法。提示下有些函数组合写的有点绕,如果对于部分用到的函数不够熟悉可能需要一段时间来理解消化,有条件的朋友可以照着流程尝试一遍,暂时没有条件的朋友也可以收藏起来待需要时使用。
如下图,如何由原始清单中(如下图左),挑出符合指定内容的清单?
如果不想大费周章的写公式,筛选工具是你很好的选择,而且很容易即可完成。本篇则是要以撰写函数公式来完成这个工作。
单元格F4:{=IFERROR(OFFSET($D$1,SMALL(IF($B$2:$B$16=$F$2,
ROW($B$2:$B$16),''),ROW(1:1))-1,0),'')}
这是数组公式,输入完成要按 Ctrl+Shift+Enter 键,Excel 会自动加上「{}」。
复制单元格F4,贴至单元格F4:F16。
在数组公式中判断单元格F2的内容是否和单元格B2:B16中的每一个单元格的内容相符,若是,则传回该单元格的列号;否则传回空字符串。在数组公式中,ROW($B$2:$B$16)={2,3,4, ... , 14,15,16}。
利用 SMALL 函数找出第(1)式传回的列号之最小值。其中,ROW(1:1)向下复制时,ROW(1:1)=1→ROW(2:2)=2→ROW(3:3)=3→....。可以分别取出第 1,2,3,… 较小值。
将第(2)式依序取出的列号,置入 OFFSET 函数中,得到对应的单元格内容。
因为第(3)式当公式向下复制时,有可能传回错误讯,所以利用 IFERROR 函数将错误讯息以空字符串显示。
所以,当单元格F2改变时,可以显示对应的列表。
单元格B15:
{=IFERROR(OFFSET($B$1,SMALL(IF($A15=$A$2:$A$11,ROW($A$2:$A$11),
''),INT((COLUMN(A:A)+1)/2))-1,MOD(COLUMN(A:A)-1,2)),'')}
这是数组公式,输入完成要按 Ctrl+Shift+Enter 键,Excel 会自动加上「{}」。
复制单元格F15,贴至单元格F15:I17。
公式解释请参考第一个案例。
以下来解释和上一个案例情况不同之处:
公式向右复制时,INT((COLUMN(A:A)+1)/2)会产生:1, 1, 2, 2, 3, 3, …。
公式向右复制时,MOD(COLUMN(A:A)-1,2)会产生:0, 1, 0, 1, 0, 1, ….。
公式细节请参考第一个案例的图片。
(如下图) 分年/分月筛选数据
单元格F2:{=IFERROR(OFFSET(A$1,SMALL(IF(YEAR(日期)=$E$2,ROW(日期),
''),ROW(1:1))-1,0),'')}
这是数组公式,输入完成要按 Ctrl+Shift+Enter 键,Excel 会自动加上「{}」。
复制单元格F2,贴至单元格F2:H16。
请参考上两个案例。其中差异之处,在于条件的设定:YEAR(日期)=$E$2,利用 YEAR 函数筛选『年』。
单元格F2:{=IFERROR(OFFSET(A$1,SMALL(IF((YEAR(日期)=$E$2)*(MONTH(
日期)=$E$4),ROW(日期),''),ROW(1:1))-1,0),'')}
这是数组公式,输入完成要按 Ctrl+Shift+Enter 键,Excel 会自动加上「{}」。
复制单元格F2,贴至单元格F2:H16。
公式原理同前面两个案例情况。其中差异之处,在于条件的设定:(YEAR(日期)=$E$2)*(MONTH(日期)=$E$4),利用 YEAR 函数筛选『年』和 MONTH 函数筛选『月』。其中的『*』运算符,相当于执行逻辑 AND 运算。
联系客服