Excel精英培训网

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

[已解决]excel 计算不同时出现数间隔及次数

[复制链接]
发表于 2013-6-2 15:41 | 显示全部楼层 |阅读模式
666.rar (2.87 KB, 下载次数: 4)
发表于 2013-6-2 16:05 | 显示全部楼层
意思表达我看不明白,最好有示意结果。
回复

使用道具 举报

 楼主| 发表于 2013-6-2 16:28 | 显示全部楼层
拿1,2来说
第一。四。八,十二,十九,二十五行没出1或2,计6次
其他的以此类推
回复

使用道具 举报

 楼主| 发表于 2013-6-2 16:30 | 显示全部楼层
Private Sub CommandButton1_Click()

Dim no(2): Dim ro()
    With Sheets("统计")
    Const SD = 490
        rng1 = .Range("A2:E" & SD)
    End With
    With Sheets("间隔")
        i = 166
        rng2 = .Range("A2:C" & i)
    End With
    ReDim arr(1 To (i - 1), 1 To 4)
    For x = 1 To UBound(rng2)
        k = 0
        For y = 1 To SD - 1
            no(0) = 0: no(1) = 0: no(2) = 0
            For z = 1 To 5
                If rng1(y, z) = rng2(x, 1) Then no(0) = no(0) + 1
                If rng1(y, z) = rng2(x, 2) Then no(1) = no(1) + 1
                If rng1(y, z) = rng2(x, 3) Then no(2) = no(2) + 1
            Next
            If no(0) >= 1 And no(1) >= 1 And no(2) >= 1 Then
                ReDim Preserve ro(k)
                ro(k) = y
                k = k + 1
            End If
        Next
        ReDim Preserve ro(k)
        ro(k) = SD
        ReDim roh(k)
        ma = 0
        s = 0
        m = 0
       ' Stop
        For j = 0 To k
            If j + 1 > k Then Exit For
            roh(j) = ro(j + 1) - ro(j)
            s = s + roh(j)
            m = m + 1
            If ma < roh(j) Then
                ma = roh(j)
            End If
        Next
        arr(x, 1) = roh(k - 1)
        arr(x, 2) = ma
        arr(x, 3) = s / m
        arr(x, 4) = m

    Next
    With Sheets("间隔")
        .Range("d2:g" & i) = arr
    End With
End Sub

这是同时出现的代码,我要的是相反的效果,计算不出现的
回复

使用道具 举报

发表于 2013-6-2 22:17 | 显示全部楼层    本楼为最佳答案   
附件请测试,不出现次数显示在SHEET2里面

666.rar

11.84 KB, 下载次数: 17

回复

使用道具 举报

 楼主| 发表于 2013-6-3 08:38 | 显示全部楼层
大灰狼1976 发表于 2013-6-2 22:17
附件请测试,不出现次数显示在SHEET2里面

我原来的代码能不能修改呢?因为我还要改四码,五码的组合
回复

使用道具 举报

 楼主| 发表于 2013-6-3 08:42 | 显示全部楼层
大灰狼1976 发表于 2013-6-2 22:17
附件请测试,不出现次数显示在SHEET2里面

这是我改的,有的计算结果会正确,有的就是不正确,帮忙看看
Dim no(2): Dim ro()
    With Sheets("统计")
    Const SD = 490
        rng1 = .Range("A2:E" & SD)
    End With
    With Sheets("sheet1")
        i = 166
        rng2 = .Range("b2:d" & i)
    End With
    ReDim arr(1 To (i - 1), 1 To 4)
    For x = 1 To UBound(rng2)
        k = 0
        For y = 1 To SD - 1
            no(0) = 0: no(1) = 0: no(2) = 0
            For z = 1 To 5 - 1
                If rng1(y, z) = rng2(x, 1) Then no(0) = no(0) + 1
                If rng1(y, z) = rng2(x, 2) Then no(1) = no(1) + 1
                If rng1(y, z) = rng2(x, 3) Then no(2) = no(2) + 1
            Next
            If no(0) = 0 And no(1) = 0 And no(2) = 0 Then
                ReDim Preserve ro(k)
                ro(k) = y
                k = k + 1
            End If
        Next
        ReDim Preserve ro(k)
        ro(k) = SD
        ReDim roh(k)
        ma = 0
        s = 0
        m = 0
       ' Stop
        For j = 0 To k
            If j + 1 > k Then Exit For
            roh(j) = ro(j + 1) - ro(j)
            s = s + roh(j)
            m = m + 1
            If ma < roh(j) Then
                ma = roh(j)
            End If
        Next
        arr(x, 1) = roh(k - 1)
        arr(x, 2) = ma
        arr(x, 3) = s / m
        arr(x, 4) = m

    Next
    With Sheets("sheet1")
        .Range("e2:h" & i) = arr
    End With

回复

使用道具 举报

发表于 2013-6-3 09:20 | 显示全部楼层
看别人的代码并且要理解,特别是比较长的情况下,会比较累,我有时间的话看一下吧,话说改我的代码比较快,要4、5码组合还是其它都可以,只要加入循环
回复

使用道具 举报

 楼主| 发表于 2013-6-3 10:08 | 显示全部楼层
sheet2.rar (214.25 KB, 下载次数: 16)
回复

使用道具 举报

发表于 2013-6-3 11:06 | 显示全部楼层
SHEET2的格式是固定的吗,固定和不固定方法不一样,如果不固定,需要提供规律。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 12:34 , Processed in 0.492753 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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