永发信息网

EXCEL编程

答案:5  悬赏:60  手机版
解决时间 2021-11-09 22:42
EXCEL编程
最佳答案
数组公式
=SUM(--(FREQUENCY(IF(A1:A20,ROW(A1:A20),),IF(A1:A20,,ROW(A1:A20)))=2))
“=2”就是连续两次,连续三次可以=3
统计0两个IF反一下即可。
全部回答

至少对我来说,这个程序并没有那么简单,你要求的报告文字那么多,

起码4个数组才能搞定,我程序写到一半就有点后悔了,但还是坚持写完了。

设计的是 选中要执行的列的单元格,如图

然后从菜单调出宏,找到相应宏名称,执行,就可以了。

代码其中有两块测试内容,可删除可不删除。留着的话,就是报告前面多几句话而已。另外,选区其中有空白单元格、以及0和1之外的内容没关系,程序会排除,只点数0和1。但是,不能选区全是空白单元格。且选区只能在同1列,不能2列或2列以上。由于定义数值类型是Integer,行数超过Integer长度上限不行,好像是3万多吧。

代码如下,自己在宏编辑页面新建一个模块,粘贴进去:

'=======以下是代码全文

Public Sub 统计1及0的连续出现次数()

'定义部分=================

Dim Shang As Integer '定义Shang为鼠标选择的首行

Dim Mhang As Integer '定义Mhang为鼠标选择的末行

Dim Lie As Integer '定义Lie为鼠标选择的列

Shang = Selection.Row '赋值,鼠标选择首行数

Mhang = Selection.Row + Selection.Rows.Count - 1 '赋值,鼠标选择的末行数

Lie = Selection.Column '赋值,列数

Dim Hl As Integer '定义Hl为行流水号

Dim Yis As Integer '定义Yis,用于临时存储1的连续数目

Dim nl As Integer '定义nl为内部临时流水号

Dim s1 As Integer 'ARBYY0数组上限

Dim s0 As Integer 'ARBYY1数组上限

Dim ARBYY1() As Integer '1连续出现次数的顺序序列记录数组

Dim ARBYY0() As Integer '0连续出现次数的顺序序列记录数组

'执行部分======================

Hl = Shang '流水号从所选的首行开始进行

s1 = 0 'ARBYY0数组上限归零

s0 = 0 'ARBYY0数组上限归零

Do While Hl <= Mhang '循环到所选行结束,逐行记录1和0重复出现的情况,记入ARBYY1和ARBYY0数组

If Cells(Hl, Lie) <> "" Then '单元格为空检测,不等于空则执行

If Cells(Hl, Lie) = 1 Then '单元格为1时做记录

nl = Hl

Yis = 0

Do While Cells(nl, Lie) = 1

Yis = Yis + 1

nl = nl + 1

Loop

s1 = s1 + 1

ReDim Preserve ARBYY1(1 To s1)

ARBYY1(s1) = Yis

Hl = Hl + Yis

ElseIf Cells(Hl, Lie) = 0 Then '单元格为0时做记录

nl = Hl

Yis = 0

Do While Cells(nl, Lie) <> "" And Cells(nl, Lie) = 0

Yis = Yis + 1

nl = nl + 1

Loop

s0 = s0 + 1

ReDim Preserve ARBYY0(1 To s0)

ARBYY0(s0) = Yis

Hl = Hl + Yis

Else '单元格为其它值时跳过

Hl = Hl + 1

End If

Else '单元格为空时,跳过单元格

Hl = Hl + 1

End If

Loop

'根据ARBYY0数组统计0的连续出现次数======================

Dim dd0 As Integer '记录序列数组内流水

Dim SUMYY0() As Integer '统计情况数组

Dim Mas0 As Integer '统计情况数组中的最大值

Dim lk0 As Integer '迭代流水

Dim jc0 As Integer '临时记次

Mas0 = Application.WorksheetFunction.Max(ARBYY0) '统计0出现的最大连续次数

For lk0 = 1 To Mas0 '从1次到最大连续次数,依次统计各出现了多少次,出现0次的跳过

jc0 = 0

For dd0 = LBound(ARBYY0) To UBound(ARBYY0)

If ARBYY0(dd0) = lk0 Then

jc0 = jc0 + 1

End If

Next dd0

ReDim Preserve SUMYY0(1 To lk0)

SUMYY0(lk0) = jc0

Next lk0

'--------------------

Dim SSGG0 As String

SSGG0 = "统计0连续出现情况"

Dim lj0 As Integer '连接流水

For lj0 = LBound(SUMYY0) To UBound(SUMYY0)

If SUMYY0(lj0) > 0 Then

SSGG0 = SSGG0 & ",0连续" & lj0 & "次次数" & SUMYY0(lj0)

End If

Next lj0

'根据ARBYY1数组统计1的连续出现次数======================

Dim dd1 As Integer '记录序列数组内流水

Dim SUMYY1() As Integer '统计情况数组

Dim Mas1 As Integer '统计情况数组中的最大值

Dim lk1 As Integer '迭代流水

Dim jc1 As Integer '临时记次

Mas1 = Application.WorksheetFunction.Max(ARBYY1) '统计1出现的最大连续次数

For lk1 = 1 To Mas1 '从1次到最大连续次数,依次统计各出现了多少次,出现0次的跳过

jc1 = 0

For dd1 = LBound(ARBYY1) To UBound(ARBYY1)

If ARBYY1(dd1) = lk1 Then

jc1 = jc1 + 1

End If

Next dd1

ReDim Preserve SUMYY1(1 To lk1)

SUMYY1(lk1) = jc1

Next lk1

'--------------------

Dim SSGG1 As String

SSGG1 = "统计1连续出现情况"

Dim lj1 As Integer '连接流水

For lj1 = LBound(SUMYY1) To UBound(SUMYY1)

If SUMYY1(lj1) > 0 Then

SSGG1 = SSGG1 & ",1连续" & lj1 & "次次数" & SUMYY1(lj1)

End If

Next lj1

'测试部分,可删除======================

Dim ff0 As Integer

Dim StrG0 As String

For ff0 = LBound(ARBYY0) To UBound(ARBYY0)

StrG0 = StrG0 & "," & ARBYY0(ff0)

Next ff0

Dim ff1 As Integer

Dim StrG1 As String

For ff1 = LBound(ARBYY1) To UBound(ARBYY1)

StrG1 = StrG1 & "," & ARBYY1(ff1)

Next ff1

'测试输出部分,可删除=====================

MsgBox "首行是" & Shang & ",末行是" & Mhang & ",选择的列是" & Lie & ",1连续序列的数组上限是" & UBound(ARBYY1) & ",0连续序列的数组上限是" & UBound(ARBYY0)

MsgBox "1的连续序列分别是" & StrG1 & "。0的连续序列分别是" & StrG0

MsgBox "0的最大重复次数是" & Mas0 & "。1的最大重复次数是" & Mas1

'=============================

'====输出最终结果,切勿删除=====

MsgBox SSGG0 & ",其余连续出现次数为0。"

MsgBox SSGG1 & ",其余连续出现次数为0。"

End Sub

'=====以上是代码全文

写代码能够实现,只能在电脑上运行,不能在手机上哦追问恩,知道宏,但不会编程
实在是太简单了,有点编程基础就可以编出来。追问关键是不会😂,所以请教大神!能贴出代码😜
频率数组公式也可以完成追问怎么做呢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
xyz=1味知数项的次数是几
各位沙发前不要茶几可以吗
所有被7除余6的三位数的和是多少?
建设银行兰州永登支行办公地址在什么地方,我
从黄果树瀑布到乌蒙大草原怎么坐车?乌蒙大草
胯部经常扭伤是怎么回事???
最近联通有流量包活动吗?
好先生徐丽丽扮演者
怎样把桌面上的文件保存到∪盘的演示过程
臻麦蛋糕坊在什么地方啊,我要过去处理事情
求最强弃少小说资源
油漆成品库能存放汽油吗
汉斯顿净水器售后好吗
高迪给山东邹城小英雄唱的歌叫什么名字
青岛求实有艺术学院吗?
推荐资讯
以自己的名字为谜底出谜语
了le字在前面组什么词啊谢谢各位啦
杭州哪里有众鑫汽车脚垫
荣县到凉风有多少公里
奥康皮鞋质量太差
请问惠普 6450b 最高能换什么cpu?
二十又二分之一减去五又五分之三与2.7的差 得
等差公式中公差:a(n+1)-an等于d为什么 a(
带【jian】字的成语第三音
我玩过部落冲突,有没有类似的战争策略手游?
这那一个好一点?
听说属鸡的有双妻命?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?