ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1786|回复: 17

[求助] 求助数据拆分排序统计,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-23 10:11 | 显示全部楼层 |阅读模式
本帖最后由 wcg129 于 2019-3-23 10:16 编辑

有一列字符串需要分析排序统计,原始数据如图在sheet1
原始数据.jpg

将每一行的字符串拆分,依顺序每一个字符放在sheet2一个单元格内

拆分后.jpg
统计sheet2中的每一列的字符频率进行统计,统计后放在sheet3
统计1.jpg
再对sheet3的结果每一列数字进行比较,保留最大值(如果有并列值一起保留)在sheet4
统计2.jpg
对sheet4最大值进行保留,去掉数值,保留在sheet5第一行,如果并列值,并列值依序保留第二行
最大值.jpg
对保留的最大值进行合并在sheet6的第一个单元格内
合并.jpg

这个思路是这样子的,主要是想要sheet3(统计1)  sheet4(统计2)  和sheet6(合并)这三个值,过程不重要,希望大神能帮我指导一下,谢谢!
数据拆分排序统计.rar (9.62 KB, 下载次数: 10)

TA的精华主题

TA的得分主题

发表于 2019-3-23 12:56 | 显示全部楼层
说了一大圈,不觉得累啊,差点看不下去,

如图:

D1.gif

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-3-23 12:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 13:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不知道为什么 发表于 2019-3-23 12:56
说了一大圈,不觉得累啊,差点看不下去,

如图:

谢谢大神,小白怕把问题描述不清楚,所以比较啰嗦。
大神能否把代码黏贴一下,非常感谢!

TA的精华主题

TA的得分主题

发表于 2019-3-23 13:59 | 显示全部楼层
本帖最后由 不知道为什么 于 2019-3-25 07:54 编辑
wcg129 发表于 2019-3-23 13:55
谢谢大神,小白怕把问题描述不清楚,所以比较啰嗦。
大神能否把代码黏贴一下,非常感谢!


供参考
[code]Option Base 1
Sub tj()
   

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:09 | 显示全部楼层
本帖最后由 micch 于 2019-3-23 14:23 编辑

确实,看说明够累的,很难描述吗?就是每个位置出现频率最高的字母嘛
如果单元格内字符长度都一致

  1. Sub test()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     arr = [a1].CurrentRegion
  4.     For i = 1 To UBound(arr)
  5.         For k = 1 To Len(arr(i, 1))
  6.             d(k & Mid(arr(i, 1), k, 1)) = d(k & Mid(arr(i, 1), k, 1)) + 1
  7.         Next
  8.     Next
  9.     For k = 1 To Len(arr(1, 1))
  10.         ar = Filter(d.keys, k)
  11.         d("") = 0
  12.         For Each a In ar
  13.             If d(a) > d("") Then s = a: d("") = d(a)
  14.         Next
  15.         st = st & Right(s, 1)
  16.     Next
  17.     [c1] = st
  18. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 14:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
micch 发表于 2019-3-23 14:09
确实,看说明够累的,很难描述吗?就是每个位置出现频率最高的字母嘛
如果单元格内字符长度都一致

谢谢。
出现频率最高的字母只是一个,其实还想要每个字母出现频率的值

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:29 | 显示全部楼层
wcg129 发表于 2019-3-23 14:24
谢谢。
出现频率最高的字母只是一个,其实还想要每个字母出现频率的值

嗯,我就是想确认是不是这个意思。所有字符串,每个位置出现最多的字符,最后合并为一个字符串??
你说的要频率值,是单独显示,还是随字母显示在一起?同一个位置出现频率相同且最大,并列显示的意思是怎么个显示效果?还有就是字符串的长度是一致的,还是可能不一致?

TA的精华主题

TA的得分主题

发表于 2019-3-23 14:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
刚才的只是取频率最高的一个字符,考虑到出现频率最高的可能多个相同字符,修正一下,顺便把出现频率提取了,不过如果字符串出现两位数的情况,那合并在一起就不能直接合了,需要区分开来

  1. Sub test()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     arr = [a1].CurrentRegion
  4.     For i = 1 To UBound(arr)
  5.         For k = 1 To Len(arr(i, 1))
  6.             d(k & Mid(arr(i, 1), k, 1)) = d(k & Mid(arr(i, 1), k, 1)) + 1
  7.         Next
  8.     Next
  9.     For k = 1 To Len(arr(1, 1))
  10.         ar = Filter(d.keys, k)
  11.         n = 0
  12.         For Each a In ar
  13.             If d(a) > n Then mx = d(a): n = d(a)
  14.         Next
  15.         For Each a In ar
  16.             If d(a) = mx Then st = st & Right(a, 1)
  17.         Next
  18.         mst = mst & mx
  19.     Next
  20.     [c1] = st
  21.     [c2] = mst
  22. End Sub
复制代码



TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-23 14:37 | 显示全部楼层
micch 发表于 2019-3-23 14:29
嗯,我就是想确认是不是这个意思。所有字符串,每个位置出现最多的字符,最后合并为一个字符串??
你说 ...

所有字符串长度一样的,要的一个是字符频率最高的字符串,另一个是每个单字符出现的频率,数值能和字母一起显示就可以了。
这段代码出来的结果好像不对。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 07:18 , Processed in 0.047807 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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