- INDEX/MATCH/COUNTIF结合取得不重复值、唯一值
大家好,我是冷水泡茶,今天在EXCELHOME论坛上看到一个网友求助贴: ![](http://image109.360doc.com/DownloadImg/2023/11/1515/275375913_1_20231115034331900_wm.png)
![](http://image109.360doc.com/DownloadImg/2023/11/1515/275375913_2_20231115034332291_wm.png)
![](http://image109.360doc.com/DownloadImg/2023/11/1515/275375913_3_20231115034332853_wm.png) 他是发在VBA版块,想用VBA解决,也有不少热心的网友给出代码,但我仔细研究了以后,觉得不用VBA,只用函数公式也能实现:
下面我们就一起来看一下制作过程吧! 我们先把他的原表稍微整理一下: ![](http://image109.360doc.com/DownloadImg/2023/11/1515/275375913_4_20231115034333353_wm.png) 1、D1单元格添加字段名称“项目”,D2以下单元格设置公式(他原来没有公式,看他的数据规则,是把B列和C列合并起来):D2=IF(C2="",B2,B2&","&C2) 2、据楼主所言,D列是他后加的,我们再加一个辅助列“点餐数":E2=A2&"点餐" &COUNTIF($A$2:A2,A2)
3、添加几个名称:点餐数、客人号码、项目 ![](http://image109.360doc.com/DownloadImg/2023/11/1515/275375913_5_20231115034334166_wm.png)
我们插入一张表,改名为“转置” ![](http://image109.360doc.com/DownloadImg/2023/11/1515/275375913_6_20231115034334603_wm.png) 2、在B1单元格输入公式,并向右拖动,直到出现空格为止(还可以再拖几格):=IF(COLUMN(A1)>MAX(FREQUENCY(客人号码,客人号码)),"","点餐"&COLUMN(A1)) (2)通过FREQUENCY函数得出客人号码出现的次数,通过MAX函数取得最大次数,超过最大次数则单元格值为空。 (3)不超过最大次数,数字序列前面加“点餐”,形成表头3、在A2单元格输入公式,并向下拖动,直到出现空格为止(还可以再拖几格):{=IFERROR(INDEX(客人号码,MATCH(0,COUNTIF($A$1:A2,客人号码),0)),"")} 4、在B2单元格输入公式,并向下、向右拖动,只到出现整行、整列均为空格为止(还可以再拖几格,与表头,A列的公式对应):=IFERROR(INDEX(项目,MATCH($A2&B$1,点餐数,0)),"") 这个公式很简单,查找关键字$A2&B$1在名称“点餐数”中的位置,并返回名称“项目”中对应位置的值。5、有数据更新时,检查第一行最后有公式列是否为空,不为空要向右再拖一列,直到出现空格为止。检查A列最下面有公式行是否为空,不为空要向下拖动,直至出现空格为止。6、相应把数据区域的公式对应填充,以确保没有数据遗漏。
|