源数据
结果
要求:同一个条码的箱号,位置,用逗号链接起来,合计进行求和。
POWERQUERY操作
- 1、上传到PQ编辑器,对箱号字段数据类型更改为文本。
- 2、根据条码对箱号,位置,合计3个字段进行分组求和。
- 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