美文网首页
Powerquery合并相同项Text.Combine栗子2

Powerquery合并相同项Text.Combine栗子2

作者: 叶知行 | 来源:发表于2017-07-09 15:39 被阅读40次

源数据

源数据

结果

结果

要求:同一个条码的箱号,位置,用逗号链接起来,合计进行求和。


POWERQUERY操作

  • 1、上传到PQ编辑器,对箱号字段数据类型更改为文本。
1
  • 2、根据条码对箱号,位置,合计3个字段进行分组求和。
2.1 2.2
  • 3、更改箱号/位置的公式,使用Txet.Combine合并。
  • 原公式

= Table.Group(更改的类型, {"條碼"}, {{"箱号", each List.Sum([箱號]), type text}, {"位置", each List.Sum([位置]), type text}, {"合计", each List.Sum([合計]), type number}})

  • 更改后的公式

= Table.Group(更改的类型, {"條碼"}, {{"箱号", each Text.Combine([箱號], ",")}, {"位置", each Text.Combine([位置], ",")}, {"合计", each List.Sum([合計]), type number}})

  • 4、结果
结果

示例文件下载

链接: http://pan.baidu.com/s/1jI5NOwQ 密码: geej


VBA解法

Sub 合并()
    Dim arr, brr
    arr = [a1].CurrentRegion'将数据放进数组arr
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))'定义数组brr和arr一样大小,用来存放合并的数据
    Set d = CreateObject("scripting.dictionary")'创建字典
    For i = 2 To UBound(arr)'遍历数据
        If Not d.exists(arr(i, 1)) Then'如果是第一条数据
            k = k + 1'标记行号
            d(arr(i, 1)) = k'用字典标记行号,方便查询
'将数据放进数组brr
            brr(k, 1) = arr(i, 1)'订单号
            brr(k, 2) = Format(arr(i, 2), "0000")'箱号,处理成文本
            brr(k, 3) = arr(i, 3)'位置
            brr(k, 4) = arr(i, 4)'合计
        Else
            m = d(arr(i, 1))'读取标识的行号
            brr(m, 2) = brr(m, 2) & "," & Format(arr(i, 2), "0000")'箱号用逗号链接
            brr(m, 3) = brr(m, 3) & "," & arr(i, 3)'位置用逗号链接
            brr(m, 4) = brr(m, 4) + arr(i, 4)'合计相加
        End If
    Next
    [i4].Resize(k, UBound(brr, 2)) = brr'输出数据
End Sub

示例文件下载

链接: http://pan.baidu.com/s/1nuZTCP7 密码: 587y

相关文章

网友评论

      本文标题:Powerquery合并相同项Text.Combine栗子2

      本文链接:https://www.haomeiwen.com/subject/ldoshxtx.html