Excel精英培训网

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

[已解决][求助]请大侠帮解释一下每一句代码的功能及运行效果!

[复制链接]
发表于 2009-11-2 19:19 | 显示全部楼层 |阅读模式

Sub Macro1()
    Dim arr, brr(), d As Object, temp$, m%, i&, j%
    With Sheets("Sheet2") 

        arr = .Range("A1:k" & .Range("A65536").End(xlUp).Row)
    End With
    Set d = CreateObject("scripting.dictionary") 

    ReDim brr(1 To UBound(arr), 1 To 50) '

    For i = 1 To UBound(arr) 

        temp = arr(i, 1) & arr(i, 2) 

        If Not d.Exists(temp) Then 

            m = m + 1 

            d(temp) = m 

            For j = 1 To 11

                brr(m, j) = arr(i, j)

            Next
        Else 

            For j = 3 To 11
                brr(d(temp), j) = brr(d(temp), j) + arr(i, j)
            Next
        End If
    Next
    Range("A4").CurrentRegion.Offset(1, 0).ClearContents 

    Range("A5").Resize(m, 100) = brr

End Sub

最佳答案
2009-11-2 22:27
这是字典+数组汇总的方法 2个都会了 才好理解 特别是字典理解起来麻烦点
 楼主| 发表于 2009-11-2 19:23 | 显示全部楼层

本人刚刚接触VBA,可以说是一窍不通,在些跪求大侠帮帮忙

For j = 3 To 11
                brr(d(temp), j) = brr(d(temp), j) + arr(i, j)

这段代码在工作表中起到怎样的作用?具体的意思是什么?


回复

使用道具 举报

发表于 2009-11-2 19:41 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2009-11-2 22:13 | 显示全部楼层

3楼,能把各段代码的作用说一下吗?
回复

使用道具 举报

发表于 2009-11-2 22:19 | 显示全部楼层


Sub Macro1()
    Dim arr, brr(), d As Object, temp$, m%, i&, j%
    With Sheets("Sheet2")

        arr = .Range("A1:k" & .Range("A65536").End(xlUp).Row)
    End With
    Set d = CreateObject("scripting.dictionary")

    ReDim brr(1 To UBound(arr), 1 To 50)    '其实可以动态这样也行

    For i = 1 To UBound(arr) '数组ARR数据挨个循环

        temp = arr(i, 1) & arr(i, 2) '把前2列条件连在一起当一个条件,这是多条件汇总的一个方法

        If Not d.Exists(temp) Then '这里向下 一直到ELSE说明字典如果不存在就添加新字段,并把新的字段赋值给数组BRR

            m = m + 1

            d(temp) = m

            For j = 1 To 11

                brr(m, j) = arr(i, j)

            Next
        Else   '这里到END IF 是存在字段就把字段后的值再BRR累加起来

            For j = 3 To 11
                brr(d(temp), j) = brr(d(temp), j) + arr(i, j)
            Next
        End If
    Next
    Range("A4").CurrentRegion.Offset(1, 0).ClearContents '清空

    Range("A5").Resize(m, 100) = brr  '把数组赋值给单元格

End Sub

回复

使用道具 举报

发表于 2009-11-2 22:20 | 显示全部楼层

QUOTE:
以下是引用g11在2009-11-2 22:13:00的发言:
3楼,能把各段代码的作用说一下吗?

最好简单去学习一下字典的运用,不然解释了也没有,除了字典外,其他的都应该好懂的

回复

使用道具 举报

发表于 2009-11-2 22:23 | 显示全部楼层

For j = 3 To 11
                brr(d(temp), j) = brr(d(temp), j) + arr(i, j)

d(temp)来确定相同条件所在BRR的1维位置

假如D如下

A   1

B   2

C   3

如果条件是B

  就相当于BRR(2,J)=BRR(2,J)+ARR(I,J)  这个还用解释么 就是BRR(2,J)+ARR(I,J)后 赋值给BRR(2,J) 然后依次累加

[此贴子已经被作者于2009-11-2 22:24:24编辑过]
回复

使用道具 举报

 楼主| 发表于 2009-11-2 22:26 | 显示全部楼层

虽然不大理解,但还是谢谢各位了[em17][em17][em17][em17]
回复

使用道具 举报

发表于 2009-11-2 22:27 | 显示全部楼层    本楼为最佳答案   

这是字典+数组汇总的方法 2个都会了 才好理解 特别是字典理解起来麻烦点
回复

使用道具 举报

发表于 2009-11-2 22:30 | 显示全部楼层

这个最佳楼主取消了吧,船长解释辛苦了,应该是2008的,我受之有愧,谢谢了[em04]

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 15:41 , Processed in 0.256150 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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