用VBA实现Excel中数据的提取并且汇总

我想用图1的数据源自动生成图2的表格,能否用VBA实现?麻烦传一下代码,谢谢

例子数据源:

程序代码:

运行结果:

是不是很完美,程序文本:

Option Explicit


Sub 转换()

    Dim a1, a2(1 To 1000, 1 To 100), i, j, x, y, m, n

    Set x = CreateObject("Scripting.Dictionary")

    Set y = CreateObject("Scripting.Dictionary")

    a1 = Range("a1").CurrentRegion

    For i = 1 To UBound(a1)

        If a1(i, 1) = "ä»·æ ¼" Then

            If Not y.Exists(a1(i, 2)) Then

                a2(1, y.Count + 2) = a1(i, 2)

                y.Add a1(i, 2), y.Count + 2

            End If

            n = y(a1(i, 2))

        Else

            If Not x.Exists(a1(i, 1)) Then

                a2(x.Count + 2, 1) = a1(i, 1)

                x.Add a1(i, 1), x.Count + 2

            End If

            m = x(a1(i, 1))

            a2(m, n) = a1(i, 2)

        End If

    Next i

    Range("d1").Resize(x.Count + 1, y.Count + 1) = a2

End Sub

追问

下标越界呢?

追答

先估算一下数据,修改一下程序中的1000、100大一些

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-16

用公式可实现,G1使用公式

=INDEX($B$1:$B$20,MATCH(E$1,$B$1:$B$20,0)+ROW(1:1))

向右拉向下拉即可,支持多客户多产品,产品排序数量相同的话(不同需要加条件)。

以上希望能帮上忙!

追答

请问问题解决了吗?

问题解决的话麻烦帮忙采纳点赞!

祝工作顺利!

第2个回答  2019-10-16
可以的。给出的这个看起来还是比较规律的。公式都可以实现。当然,VBA更能实现了。
公式实现的话,可以使用偏移的办法处理。
其实VBA最方便的实现方法,也是偏移的方法。追问

能否发一下VBA的代码,谢谢

本回答被网友采纳
相似回答