Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3675|回复: 19

[已解决]求连续值的数量

[复制链接]
发表于 2010-4-25 22:01 | 显示全部楼层 |阅读模式

4qAomevb.rar (7.78 KB, 下载次数: 1)

求连续值的数量

求连续值的数量
 楼主| 发表于 2010-4-25 22:08 | 显示全部楼层


Sub aa()
    Dim d, arr, i, j, k, n

    Set d = CreateObject("scripting.dictionary")
    arr = [a1:a10]
    
    For i = 1 To UBound(arr) - 1
        For j = i To UBound(arr) - 1
            d(arr(i, 1)) = arr(i, 1) '加入字典
            If d.Count > 1 Then
                '出现不同的值了
                n = n + 1
                d.RemoveAll
                Exit For
            End If
        Next j
    Next i
    MsgBox n
End Sub

好像这次没错,但觉得肯定不需这么繁琐。。。

[em04]

回复

使用道具 举报

发表于 2010-4-25 22:09 | 显示全部楼层

既然6 7行的空值也算,那么11行以后的空值为什么又不算了?
回复

使用道具 举报

 楼主| 发表于 2010-4-25 22:13 | 显示全部楼层

QUOTE:
以下是引用Zipall在2010-4-25 22:09:00的发言:
既然6 7行的空值也算,那么11行以后的空值为什么又不算了?

谢谢Zipall提醒

由于目的是对一个区域统计,是我1楼没说明白。

arr = [a1:a10],正是这个意思

[em25]
回复

使用道具 举报

 楼主| 发表于 2010-4-25 22:28 | 显示全部楼层


Sub bb()
    Dim d, arr, i, j, k, n


    arr = [a1:a10]

    '''''''''''''''''''''''''''''''''''''''''''''''''''
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(arr) - 1
        For j = i To UBound(arr) - 1

            k = k + 1    '循环次数计数
            d(arr(i, 1)) = arr(i, 1)    '加入字典
            If d.Count > 1 Then
                '出现不同的值了
                n = n + 1
                d.RemoveAll
                Exit For
            End If
        Next j
    Next i
    '''''''''''''''''''''''''''''''''''''''''''''''''''

    MsgBox "连续数的数量:" & n & Chr(10) & "循环次数:" & k
End Sub

循环了29次,不好;

方法太麻烦,不好,

再想,等待学习高手方法 .... 谢谢!

回复

使用道具 举报

发表于 2010-4-25 22:29 | 显示全部楼层

看楼主1楼的意思,1楼的数据结果应该是3,但运行2楼的代码结果是4

回复

使用道具 举报

发表于 2010-4-25 22:30 | 显示全部楼层    本楼为最佳答案   

Sub test()
    a = [transpose(a1:a10)]
    x = a(1)
    For i = 2 To UBound(a)
        If a(i) <> x Then
            If y > 0 Then z = z + 1
            x = a(i)
            y = 0
        Else
            y = y + 1
        End If
    Next
    If y > 0 Then z = z + 1
    MsgBox z
End Sub

如果A1:A2也是3 3 ,结果应该是3还是4?

[此贴子已经被作者于2010-4-25 22:31:37编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-4-25 22:33 | 显示全部楼层

QUOTE:
以下是引用liyh67在2010-4-25 22:29:00的发言:

看楼主1楼的意思,1楼的数据结果应该是3,但运行2楼的代码结果是4

谢谢67!!

是的,刚才我把A1:A10改了几个数字后,发现楼上我的方法都是错的。。。。还不知道又哪儿错了,唉。

贴方法的意思是想帮助说明1楼题意。

回复

使用道具 举报

 楼主| 发表于 2010-4-25 22:38 | 显示全部楼层

QUOTE:
以下是引用Zipall在2010-4-25 22:30:00的发言:
Sub test()
    a = [transpose(a1:a10)]
    x = a(1)
    For i = 2 To UBound(a)
        If a(i) <> x Then
            If y > 0 Then z = z + 1
            x = a(i)
            y = 0
        Else
            y = y + 1
        End If
    Next
    If y > 0 Then z = z + 1
    MsgBox z
End Sub

如果A1:A2也是3 3 ,结果应该是3还是4?


求连续值的数量

求连续值的数量
如果如图,返回4,即以下4个连续取:

A1:A2

A4:A5

A6:A7

A8:A10

回复

使用道具 举报

发表于 2010-4-25 22:44 | 显示全部楼层

如果要返回4,用我7楼的代码。

如果要返回3,用下面的代码

Sub aa()
    'On Error Resume Next
    Set d = CreateObject("scripting.dictionary")
    a = [transpose(a1:a10)]
    For i = 2 To UBound(a)
        If a(i) = a(i - 1) Then d(a(i)) = a(i)
    Next i
    MsgBox d.Count
End Sub

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-8 09:56 , Processed in 0.252803 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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