ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求指定数据按出现次数升序排序的vba

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-10 19:54 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 CAONI 于 2021-1-10 19:55 编辑

1、b5开始的b列各单元格中分别填有数字,每2个数字间隔一个空格;
2、以行为单位,每隔2行为一小组,即b5-b6,b7-b8,b9-b10各为一组...将各组数字中4 5 9这3个数按出现次数多少按升序排序在d5开始的d列, 即:b5-b6排序在d5,b7-b8排序在d6,b9-b10排序在d7...每个单元格一个数据
3、4 5 9这3个数据如在b列中没有则以0次计算,相同次数的数据按从小到大排序,4 5 9这3个数据必须出现在结果中。
谢谢!!!

按次排序459.rar (11.39 KB, 下载次数: 7)




TA的精华主题

TA的得分主题

发表于 2021-1-11 07:26 | 显示全部楼层
for 循环遍历+字典计数
排序部分看看表格自带功能是否能满足

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-11 08:54 | 显示全部楼层
liulang0808 发表于 2021-1-11 07:26
for 循环遍历+字典计数
排序部分看看表格自带功能是否能满足

版主你好,本题我要解决的关键问题是:怎样将4、5、9这3个不是连续的数据输入到字典,如果是4到9就一个循环解决,后面的for 循环遍历+字典计数这部分好写。

TA的精华主题

TA的得分主题

发表于 2021-1-11 09:24 | 显示全部楼层
本帖最后由 loirol 于 2021-1-11 09:26 编辑
CAONI 发表于 2021-1-11 08:54
版主你好,本题我要解决的关键问题是:怎样将4、5、9这3个不是连续的数据输入到字典,如果是4到9就一个循 ...

定义变量i,j,数组arr
  1. arr= [b5].currentregion
  2. for i  = 1 to ubound(arr)
  3.     for j = 1 to len((arr(i,1)))
  4.         d(Val(Mid(arr(i, 1), j, 1))) = d(Val(Mid(arr(i, 1), j, 1))) + 1
  5.     next
  6. next
复制代码

加字典就用这个方法吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-1-11 10:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
CAONI 发表于 2021-1-11 08:54
版主你好,本题我要解决的关键问题是:怎样将4、5、9这3个不是连续的数据输入到字典,如果是4到9就一个循 ...

自定义函数

按次排序459.rar

16.07 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-11 10:55 | 显示全部楼层

老师你好,程序经测试在0-9这10个数据中按次数排序完全符合要求,请将程序扩展到求其他任意位数,例如求:5、11、77、88、189这5个数按次数升序排序,谢谢!!!

TA的精华主题

TA的得分主题

发表于 2021-1-11 11:40 | 显示全部楼层
CAONI 发表于 2021-1-11 10:55
老师你好,程序经测试在0-9这10个数据中按次数排序完全符合要求,请将程序扩展到求其他任意位数,例如求 ...

参见附件。

按次数排序指定数字4 5 9_自定义函数.rar

18.27 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-1-11 12:10 | 显示全部楼层
CAONI 发表于 2021-1-11 08:54
版主你好,本题我要解决的关键问题是:怎样将4、5、9这3个不是连续的数据输入到字典,如果是4到9就一个循 ...

arr=array(4,5,9)
这样就可以调用了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-1-11 13:34 | 显示全部楼层
Option Explicit

Sub test()
  Dim arr, i, j, k, dic(1), t, m, n, key, flag As Boolean
  For i = 0 To UBound(dic)
    Set dic(i) = CreateObject("scripting.dictionary")
  Next
  arr = Split("4,5,9", ",")
  For i = 0 To UBound(arr)
    dic(0)(arr(i)) = 1
  Next
  arr = Range("b5:b" & [b5].End(xlDown).Row).Value
  If UBound(arr, 1) Mod 2 > 0 Then MsgBox "!": Exit Sub
  ReDim brr(1 To UBound(arr, 1) / 2, 1 To dic(0).Count)
  For i = 1 To UBound(arr, 1) Step 2
    For j = i To i + 1
      t = Split(arr(j, 1))
      For k = 0 To UBound(t)
        If dic(0).exists(t(k)) Then dic(1)(t(k)) = dic(1)(t(k)) + 1
      Next
    Next
    ReDim crr(1 To 2, 1 To UBound(brr, 2)) As Long
    For Each key In dic(0).keys
      n = n + 1: crr(1, n) = key
      If dic(1).exists(key) Then crr(2, n) = dic(1)(key)
    Next
    For j = 1 To UBound(crr, 2) - 1
      For k = j + 1 To UBound(crr, 2)
        If crr(2, j) < crr(2, k) Then
          flag = True
        ElseIf crr(2, j) = crr(2, k) Then
          If crr(1, j) > crr(1, k) Then flag = True
        End If
        If flag Then
          t = crr(1, j): crr(1, j) = crr(1, k): crr(1, k) = t
          t = crr(2, j): crr(2, j) = crr(2, k): crr(2, k) = t
          flag = False
        End If
      Next
    Next
    m = m + 1
    For j = 1 To UBound(brr, 2)
      brr(m, j) = crr(1, j)
    Next
    dic(1).RemoveAll: n = 0
  Next
  [d5].Resize(m, UBound(brr, 2)) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-11 14:49 | 显示全部楼层

老师你好,程序经测试满足要求,谢谢!!!我想用按钮调用函数:xtcipxu2,结果不对,麻烦修改一下,谢谢!!!
Sub 按钮1_Click()
a = 5
For i = 5 To 10 Step 2
Range("q" & a).Resize(1, 3) = xtcipxu2(Range("b" & i & ":b" & i + 1), 2, "4 5 9")
a = a + 1
Next
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 03:35 , Processed in 0.043847 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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