ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何求7个数字连续出现的最大次数

如何求7个数字连续出现的最大次数

作者:绿色风 分类: 时间:2022-08-17 浏览:138
楼主
芐雨
 

例子来自EP网友的一个问题。
求:每个单元格0-9之间取值,有7个数字连续出现的最大次数。
如:A1:A12分别是 110345677899 ,其实共有三组7个连续数(1034567,0345678,3456789)
1034567:9次
0345678:8次
3456789:9次
取第一组最大值

代码如下:
  1. Sub 连续七个数出现的最大值_芐雨()
  2.     Dim brr(), crr(1 To 10000, 1 To 11)
  3.     Dim Rng As Range, arr

  4.     Application.ScreenUpdating = False

  5.     Set d = CreateObject("scripting.dictionary")
  6.     Set Rng = Sheets("举例").Range("A1").CurrentRegion    '范围

  7.    Sheets("芐雨").Range("A2").Resize(Rows.Count - 1, 11).Clear    '清除数据
  8.     col = Rng(Rng.Count).Column    '列数
  9.     arr = Rng

  10.     For j = 1 To col
  11.     ReDim brr(1 To UBound(arr), 1 To 2)
  12.         d.RemoveAll
  13.         x = 1
  14.         jmax = 0
  15.         For i = 1 To UBound(arr)
  16.             arr(i, j) = arr(i, j) & ""    '转成字符
  17.             If Not d.exists(arr(i, j)) Or i = UBound(arr) Then    '字典不存在或最后一行时运行
  18.                 k = k + 1    '记录字典数
  19.                 d(arr(i, j)) = ""    '添加字典
  20.                 brr(x, 1) = brr(x, 1) & arr(i, j)    '记录出现的数
  21.                 If brr(x, 2) <> "" Then
  22.                     brr(x, 2) = brr(x, 2) & ":" & Cells(i, j).Address    '记录地址
  23.                 Else
  24.                     brr(x, 2) = Cells(i, j).Address    '记录地址
  25.                 End If
  26.                 If k = 8 Then
  27.                     If i < UBound(arr) Then    '不是最后一行时
  28.                         d.Remove (Left(brr(x, 1), 1))    '删除第一个数的字典
  29.                         L = InStrRev(brr(x, 2), "$")    '最后一个$的位置
  30.                         brr(x, 2) = Left(brr(x, 2), L) & Right(brr(x, 2), Len(brr(x, 2)) - L) - 1    '最后一个地址上移一格
  31.                     End If
  32.                     imax = Range(brr(x, 2)).Count    '求出连续出现的数
  33.                     If imax >= jmax Then    '比较是否最大值
  34.                         jmax = imax
  35.                         crr(j, 2) = "'" & Left(brr(x, 1), 7)    '转成文本数值,记录出现什么数
  36.                         crr(j, 4) = Range(brr(x, 2)).Item(1).Address(0, 0)    '返回区域内的第一个地址
  37.                         crr(j, 6) = Range(brr(x, 2)).Item(imax).Address(0, 0)    '返回区域内的最后个地址
  38.                         crr(j, 8) = jmax    '连续出现的次数
  39.                     End If
  40.                     x = x + 1 '记录
  41.                     
  42.                     d.RemoveAll
  43.                     k = 0
  44.                     If i = UBound(arr) Then Exit For
  45.                    i = x
  46.                 End If
  47.             End If
  48.         Next
  49.     Next

  50.     For j = 1 To col
  51.         crr(j, 1) = "第" & j & "列最大结果"
  52.         crr(j, 3) = "从"
  53.         crr(j, 5) = "到"
  54.         crr(j, 7) = "次"
  55.         crr(j, 9) = "出现"
  56.         crr(j, 11) = "没有出现"
  57.         crr(j, 10) = "1234567890"
  58.         For i = 2 To 8    '找出没有出现的数
  59.             crr(j, 10) = Replace(crr(j, 10), Val(Mid(crr(j, 2), i, 1)), "")
  60.         Next
  61.     Next

  62.     Sheets("芐雨").Range("A2").Resize(col, 11) = crr
  63.     Application.ScreenUpdating = True
  64. End Sub


附件:

连续七个数出现的最大值_芐雨.rar


2楼
jm9999
谢谢分享,很好!
3楼
老糊涂
谢谢分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap