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

源数据

Powerquery合并相同项Text.Combine栗子2_第1张图片
源数据

结果

Powerquery合并相同项Text.Combine栗子2_第2张图片
结果

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


POWERQUERY操作

  • 1、上传到PQ编辑器,对箱号字段数据类型更改为文本。
Powerquery合并相同项Text.Combine栗子2_第3张图片
1
  • 2、根据条码对箱号,位置,合计3个字段进行分组求和。
Powerquery合并相同项Text.Combine栗子2_第4张图片
2.1
Powerquery合并相同项Text.Combine栗子2_第5张图片
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、结果
Powerquery合并相同项Text.Combine栗子2_第6张图片
结果

示例文件下载

链接: 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)