求EXCEL公式实现数据合并,100

bloodguy 2018-03-17 10:51:57

如上图刷示这样,把左边的数据源处理成右边的样式,毛重求和,箱号合并。谢谢,在线等。

求高手给写段代码供学习一下,谢谢!
E列是A列的去重复,F列是按A列筛选后B列的数据的求和,G列是F列是按A列筛选后C列的单元格文本内容的合并(中间用”,“号隔开)
...全文
546 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bloodguy 2018-03-17
  • 打赏
  • 举报
回复
太久没来发帖了,发现不懂怎么上传附件了,见谅。有帮忙的朋友吗?
o大耳鼠o 2018-03-17
  • 打赏
  • 举报
回复
引用 5 楼 bloodguy 的回复:
[quote=引用 4 楼 sniperhgy 的回复:] [quote=引用 2 楼 bloodguy 的回复:] 求高手给写段代码供学习一下,谢谢! E列是A列的去重复,F列是按A列筛选后B列的数据的求和,G列是F列是按A列筛选后C列的单元格文本内容的合并(中间用”,“号隔开)
楼主你好,我正在尝试写公式,E和F的很好实现,G正在想解决方法。请稍候。[/quote] 谢谢你!X-i-n 大侠的代码非常好用。我很满意。谢谢你的参与![/quote] 嗯,不用客气,既然收了分数,我把公式分享一下: 1.在E1单元格输入 =INDEX(A:A,SMALL(IF(MATCH(A$1:A$1000&"",A$1:A$1000&"",)=ROW($1:$1000),ROW($1:$1000),4^8),ROW(A1)))&"",然后按住CTRL+SHIFT+回车,向下拖动,就可以将A列的所以内容找到不重复值 2. 在F1单元格输入=SUMIF(A:A, E1, B:B),回车,向下拖动,所有B列的值就会加总到相应的类别上 3.在G1单元格输入=TEXTJOIN(",", TRUE, IF(A$1:A$1000 = E1, C$1:C$1000, "")),然后按住CTRL+SHIFT+回车,向下拖动,就可以将箱号汇总起来 以上公式在Excel2016中通过,但是在2013及以前,没有TEXTJOIN公式,我正在想办法实现在2013以前可以用的方法。
bloodguy 2018-03-17
  • 打赏
  • 举报
回复
引用 4 楼 sniperhgy 的回复:
[quote=引用 2 楼 bloodguy 的回复:] 求高手给写段代码供学习一下,谢谢! E列是A列的去重复,F列是按A列筛选后B列的数据的求和,G列是F列是按A列筛选后C列的单元格文本内容的合并(中间用”,“号隔开)
楼主你好,我正在尝试写公式,E和F的很好实现,G正在想解决方法。请稍候。[/quote] 谢谢你!X-i-n 大侠的代码非常好用。我很满意。谢谢你的参与!
o大耳鼠o 2018-03-17
  • 打赏
  • 举报
回复
引用 2 楼 bloodguy 的回复:
求高手给写段代码供学习一下,谢谢! E列是A列的去重复,F列是按A列筛选后B列的数据的求和,G列是F列是按A列筛选后C列的单元格文本内容的合并(中间用”,“号隔开)
楼主你好,我正在尝试写公式,E和F的很好实现,G正在想解决方法。请稍候。
X-i-n 2018-03-17
  • 打赏
  • 举报
回复
Sub S()
    Dim listweight, listpack
    Set listweight = CreateObject("Scripting.Dictionary")
    Set listpack = CreateObject("Scripting.Dictionary")

    For i = 2 To Sheet1.UsedRange.Rows.Count
        Dim id As String
        Dim weight As Long
        Dim packno As String
        id = Sheet1.Cells(i, 1)
        weight = Sheet1.Cells(i, 2)
        packno = Sheet1.Cells(i, 3)
        
        If listweight.exists(id) Then
            listweight(id) = listweight(id) + weight
            listpack(id) = listpack(id) & packno & ","
        Else
            listweight(id) = weight
            listpack(id) = packno & ","
        End If
    Next i
    
    i = 1
    Sheet2.Cells(1, 1) = "提单号"
    Sheet2.Cells(1, 2) = "总重"
    Sheet2.Cells(1, 3) = "箱号"
    For Each Key In listweight.keys
        i = i + 1
        Sheet2.Cells(i, 1) = Key
        Sheet2.Cells(i, 2) = listweight.Item(Key)
        Sheet2.Cells(i, 3) = Left(listpack.Item(Key), Len(listpack.Item(Key)) - 1)
    Next
End Sub
bloodguy 2018-03-17
  • 打赏
  • 举报
回复
求高手给写段代码供学习一下,谢谢! E列是A列的去重复,F列是按A列筛选后B列的数据的求和,G列是F列是按A列筛选后C列的单元格文本内容的合并(中间用”,“号隔开)

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧