首先我模仿你给的截图在sheet1建立一些数据,如图。
然后把sheet1的表头复制到在sheet2上,并在姓名下用数据验证做一个下拉,打开数据验证,选择允许--序列,粘贴来源 张某,王某,赵某,刘某 ,如图
效果如下。
然后双击B2单元格,粘贴公式
=IFERROR(INDEX(Sheet1!$C$2:$F$11,SMALL(IF(Sheet1!$B$2:$B$11=$A$2,ROW($1:$10),999),ROW(A1)),MATCH(B$1,Sheet1!$C$1:$F$1,0)),"NULL")
。接下来这一步很关键,粘贴好后,按shift+ctrl+Enter。如果操作正确,可以看到公式自动在头尾增加了{ 和 } 符号,且已经生效,第一格筛选成功,如图
然后就是先向右填充,再拉住填充好的第一行向下填充,向下可以多拉一点,如果你的数据很多,可以避免缺漏,我给你的公式里有若没有匹配数据就输出null的参数,所以本应空白的地方用null填充了,如图。如果你不需要NULL,直接把公式里的"NULL"改成""就行。
然后大概解释一下公式的意思,方便你自己修改用。
Sheet1!$C$2:$F$11是sheet1里药品名到有效期这一整块的范围。
Sheet1!$B$2:$B$11是sheet1里姓名的范围。
$A$2是sheet2里选姓名的这一格,因为公式是在sheet2写的,所以把sheet2几个字省略掉了。
ROW($1:$10)这里的$1不用动,$10的10是比前面的Sheet1!$B$2:$B$11的11少1,就是比姓名最大行数少1,所以这里是10
999代表一个比你sheet1所有数据最大行号还要大的任意一个数,意思就是如果你有10000个姓名数据要筛选,999你改成20000就行。
剩下后面的基本不用改。只要你把sheet2的表头粘贴在第一行,顺序也可以打乱,都能用。
码字不易,望采纳。