求助:Excel相同ICCID行合并、Country拼接及O/P/Q列求和方案
解决方案
方案一:使用Excel内置函数实现(无需VBA)
适合不熟悉VBA的用户,操作步骤如下:
- 提取唯一ICCID:在空白列(如R列)的R2单元格输入公式:
=UNIQUE(B:B),回车后自动生成所有不重复的ICCID列表。 - 拼接Country内容:在S2单元格输入公式:
=TEXTJOIN(", ", TRUE, FILTER(M:M, B:B=R2)),下拉填充至所有唯一ICCID行,该公式会将对应ICCID的所有Country用「逗号+空格」拼接。 - 求和O列数值:在T2单元格输入:
=SUMIFS(O:O, B:B=R2),下拉填充。 - 求和P列数值:在U2单元格输入:
=SUMIFS(P:P, B:B=R2),下拉填充。 - 求和Q列数值:在V2单元格输入:
=SUMIFS(Q:Q, B:B=R2),下拉填充。 - 完成后,将R-V列的结果复制粘贴为值,再删除原数据列(B、M、O、P、Q等)即可整理成目标格式。
方案二:使用VBA脚本批量处理(高效适配大量数据)
若数据量较大,函数公式易卡顿,可使用VBA脚本快速处理:
- 按
Alt + F11打开VBA编辑器,右键点击当前工作簿,选择「插入」→「模块」。 - 粘贴以下代码:
Sub MergeICCIDRows() Dim ws As Worksheet Dim lastRow As Long, i As Long, j As Long Dim currentICCID As String Dim countryStr As String Dim sumO As Double, sumP As Double, sumQ As Double Set ws = ActiveSheet ' 可改为具体工作表名,如Sheets("Sheet1") lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' 按B列排序,确保相同ICCID连续排列 ws.Sort.SortFields.Clear ws.Sort.SortFields.Add Key:=Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ws.Sort .SetRange ws.Range("A1:Q" & lastRow) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With i = 2 ' 从第2行开始(假设第1行为表头) Do While i <= lastRow currentICCID = ws.Cells(i, "B").Value countryStr = ws.Cells(i, "M").Value sumO = ws.Cells(i, "O").Value sumP = ws.Cells(i, "P").Value sumQ = ws.Cells(i, "Q").Value j = i + 1 ' 遍历后续相同ICCID的行 Do While j <= lastRow And ws.Cells(j, "B").Value = currentICCID countryStr = countryStr & ", " & ws.Cells(j, "M").Value sumO = sumO + ws.Cells(j, "O").Value sumP = sumP + ws.Cells(j, "P").Value sumQ = sumQ + ws.Cells(j, "Q").Value ' 删除重复行 ws.Rows(j).Delete lastRow = lastRow - 1 Loop ' 更新当前行的合并后内容 ws.Cells(i, "M").Value = countryStr ws.Cells(i, "O").Value = sumO ws.Cells(i, "P").Value = sumP ws.Cells(i, "Q").Value = sumQ i = i + 1 Loop End Sub
- 返回Excel界面,按
Alt + F8,选择MergeICCIDRows宏执行即可。
注意:执行前请备份数据,避免意外修改无法恢复。
内容的提问来源于stack exchange,提问作者Benjamin Perry
相关产品推荐
相关产品推荐

