Excel精英培训网

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

[已解决]请搞手帮帮忙,把三个宏合并成一,谢谢了。

[复制链接]
发表于 2015-4-4 23:55 | 显示全部楼层 |阅读模式
请高手帮忙,下面三个代码是有规律的,只有四处不同(红色部分),能不能把把它们合并成一个?谢谢了!
Sub test1()
    Set d = CreateObject("scripting.dictionary")
    With Sheet5
        arr = .Range("a4:s" & .Cells(Rows.Count, 1).End(xlUp).Row)
        ReDim brr(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr) - 1
            If arr(i, 3) = arr(i + 1, 3) Then
                n = n + 1
                d(arr(i, 3)) = n + 1
            Else
                n = 0
            End If
        Next
        For i = 1 To UBound(arr)
            If d.Exists(arr(i, 3)) Then
                brr(i, 1) = arr(i, 19) / d(arr(i, 3))
            Else
                brr(i, 1) = arr(i, 19)
            End If
           Next
        .[S4].Resize(UBound(brr), 1) = brr
    End With
End Sub
Sub test2()
    Set d = CreateObject("scripting.dictionary")
    With Sheet5
        arr = .Range("a4:q" & .Cells(Rows.Count, 1).End(xlUp).Row)
        ReDim brr(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr) - 1
            If arr(i, 3) = arr(i + 1, 3) Then
                n = n + 1
                d(arr(i, 3)) = n + 1
            Else
                n = 0
            End If
        Next
        For i = 1 To UBound(arr)
            If d.Exists(arr(i, 3)) Then
                brr(i, 1) = arr(i, 17) / d(arr(i, 3))
            Else
                brr(i, 1) = arr(i, 17)
            End If
           Next
        .[Q4].Resize(UBound(brr), 1) = brr
    End With
End Sub
Sub test3()
    Set d = CreateObject("scripting.dictionary")
    With Sheet5
        arr = .Range("a4:r" & .Cells(Rows.Count, 1).End(xlUp).Row)
        ReDim brr(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr) - 1
            If arr(i, 3) = arr(i + 1, 3) Then
                n = n + 1
                d(arr(i, 3)) = n + 1
            Else
                n = 0
            End If
        Next
        For i = 1 To UBound(arr)
            If d.Exists(arr(i, 3)) Then
                brr(i, 1) = arr(i, 18) / d(arr(i, 3))
            Else
                brr(i, 1) = arr(i, 18)
            End If
           Next
        .[r4].Resize(UBound(brr), 1) = brr
    End With
End Sub

最佳答案
2015-4-5 00:07
本帖最后由 橘子红 于 2015-4-5 00:10 编辑

没表,没法测试
  1. Sub test1()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     With Sheet5
  4.      For lastcol = 17 To 19
  5.             arr = .Range(.Range("a4"), Cells(.Cells(Rows.Count, 1).End(xlUp).Row, lastcol))
  6.             ReDim brr(1 To UBound(arr), 1 To 1)
  7.             For i = 1 To UBound(arr) - 1
  8.                 If arr(i, 3) = arr(i + 1, 3) Then
  9.                     n = n + 1
  10.                     d(arr(i, 3)) = n + 1
  11.                 Else
  12.                     n = 0
  13.                 End If
  14.             Next
  15.             For i = 1 To UBound(arr)
  16.                 If d.Exists(arr(i, 3)) Then
  17.                     brr(i, 1) = arr(i, lastcol) / d(arr(i, 3))
  18.                 Else
  19.                     brr(i, 1) = arr(i, lastcol)
  20.                 End If
  21.                Next
  22.             .Cells(4, lastcol).Resize(UBound(brr), 1) = brr
  23.         Next
  24.     End With
  25. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-4-5 00:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 橘子红 于 2015-4-5 00:10 编辑

没表,没法测试
  1. Sub test1()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     With Sheet5
  4.      For lastcol = 17 To 19
  5.             arr = .Range(.Range("a4"), Cells(.Cells(Rows.Count, 1).End(xlUp).Row, lastcol))
  6.             ReDim brr(1 To UBound(arr), 1 To 1)
  7.             For i = 1 To UBound(arr) - 1
  8.                 If arr(i, 3) = arr(i + 1, 3) Then
  9.                     n = n + 1
  10.                     d(arr(i, 3)) = n + 1
  11.                 Else
  12.                     n = 0
  13.                 End If
  14.             Next
  15.             For i = 1 To UBound(arr)
  16.                 If d.Exists(arr(i, 3)) Then
  17.                     brr(i, 1) = arr(i, lastcol) / d(arr(i, 3))
  18.                 Else
  19.                     brr(i, 1) = arr(i, lastcol)
  20.                 End If
  21.                Next
  22.             .Cells(4, lastcol).Resize(UBound(brr), 1) = brr
  23.         Next
  24.     End With
  25. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
lbhlbh + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-4-5 00:18 | 显示全部楼层
橘子红 发表于 2015-4-5 00:07
没表,没法测试

可以了,非常谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 04:37 , Processed in 0.275433 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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