Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: lijian8003

[已解决]单元格内有多个数值 如何统计区域内出现次数最多

[复制链接]
 楼主| 发表于 2021-11-12 23:33 | 显示全部楼层
本帖最后由 lijian8003 于 2021-11-13 02:08 编辑
AmoKat 发表于 2021-11-12 23:11
EXCEL 2010 以上支援 MODE.MULT

若不支援時,只好用自定函數處理

谢谢!出现 xR 变量未定义,肯望指教
回复

使用道具 举报

 楼主| 发表于 2021-11-12 23:45 | 显示全部楼层
本帖最后由 lijian8003 于 2021-11-13 02:08 编辑
cutecpu 发表于 2021-11-12 23:29
自定义函数

Function mult(rng)

谢谢!您的函数结果正确,只是速度太慢。看看自定义的速度如何
回复

使用道具 举报

发表于 2021-11-13 01:59 | 显示全部楼层
lijian8003 发表于 2021-11-12 23:45
谢谢!您的函数结果正确,只是速度太慢。看看自定义的速度如何


demo3.rar

19.18 KB, 下载次数: 2

评分

参与人数 1学分 +2 收起 理由
lygyjt + 2 学习了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-11-13 02:16 | 显示全部楼层

谢谢!速度提升不少。如果输出数据为0,1,16  需要写为000,001,016  如何修改代码?
回复

使用道具 举报

发表于 2021-11-13 02:25 | 显示全部楼层
lijian8003 发表于 2021-11-13 02:16
谢谢!速度提升不少。如果输出数据为0,1,16  需要写为000,001,016  如何修改代码?

增加红色代码

Function mult(rng)
   Set d = CreateObject("Scripting.Dictionary")
   For Each r In rng
      For Each v In Split(r, ",")
         v = Format(v, "000")
         d(v) = d(v) + 1
      Next
   Next
   Max = Application.Max(d.items())
   For Each Key In d.keys()
      If d(Key) < Max Then d.Remove Key
   Next
   mult = Join(d.keys(), ",")
End Function

回复

使用道具 举报

发表于 2021-11-13 10:33 | 显示全部楼层
2007版 C2:C4{=IFERROR(MODE(IF((COUNTIF(C$1:C1,TRIM(MID(SUBSTITUTE(A$1:A$3,",",REPT(" ",99)),COLUMN(A:I)*99-98,99)))=0)*(TRIM(MID(SUBSTITUTE(A$1:A$3,",",REPT(" ",99)),COLUMN(A:I)*99-98,99))<>""),TRIM(MID(SUBSTITUTE(A$1:A$3,",",REPT(" ",99)),COLUMN(A:I)*99-98,99))*1)),"")

數字限制  最多26  改COLUMN(A:Z)的 Z  可增大 D2:D4{=IFERROR(MODE(IF(ISNUMBER(FIND(","&COLUMN(A:Z)&",",","&A$1:A$3&","))*(COUNTIF(D$1:D1,COLUMN(A:Z))=0),COLUMN(A:Z))),"")
9129.png
回复

使用道具 举报

发表于 2021-11-13 13:04 | 显示全部楼层
AmoKat 发表于 2021-11-12 23:11
EXCEL 2010 以上支援 MODE.MULT

若不支援時,只好用自定函數處理

你用代码肯定简单
把所有的内容变成数组
用vba.split
再把所有的数组重新组成一个数组
然后就简单了
回复

使用道具 举报

发表于 2021-11-13 13:14 | 显示全部楼层
我这个方法不是最好的,但是比较简单容易懂
1.分列,根据","分成几列数据
2.用IF函数,如果目标区域="",则为"",重新组成一个数组内容
3.用Mode函数取上一步数组里面的众数,也就是出现最多那个
4.重复第2步,只不过这个时候判断区域是第2步结果数组,是否等于第3补那个众数,如果等于,则为"",重新组成一个新数组
5.同理第三个值

说明 :因为第三个值都是只出现1次,没有更少次数的,所以显示错误。
1636780236(1).jpg
回复

使用道具 举报

发表于 2021-11-13 21:31 | 显示全部楼层
lijian8003 发表于 2021-11-12 23:33
谢谢!出现 xR 变量未定义,肯望指教

你的第一列應該有下列語句,變數需要強制宣告,拿掉就可以,或將變數宣告一下
Option Explicit  '強制宣告

我只會寫短程式,沒有習慣宣告變數。

自定函數demo.rar (17.31 KB, 下载次数: 2)

点评

哈哈,跟 Kat 一樣,沒有宣告變數的習慣(握手)  发表于 2021-11-13 21:43
回复

使用道具 举报

发表于 2021-11-13 21:39 | 显示全部楼层
林木水 发表于 2021-11-13 13:04
你用代码肯定简单
把所有的内容变成数组
用vba.split

就EXCEL版本缺少文字組數處理函數,用函數處理就是勉強可行,需要更多輔助格來處理,
硬要一式到位就是勉強。

其實就EXCEL 使用 VBA 的 SPLIT、JOIN、字典 等來定義自訂函數,就能克服舊版程式很多問題。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-16 18:46 , Processed in 0.287146 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表