ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: kifun

[求助] vba 汇总然后变成横向排列

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-12-28 13:42 | 显示全部楼层
有些不是数值格式的没有参与计算
image.png

TA的精华主题

TA的得分主题

发表于 2023-12-28 13:43 | 显示全部楼层
结果放在表2,

20231228-122639.rar

15.44 KB, 下载次数: 29

TA的精华主题

TA的得分主题

发表于 2023-12-28 14:55 | 显示全部楼层
Sub 汇总()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ar As Variant
Dim d As Object
Dim br()
Set d = CreateObject("scripting.dictionary")
With Sheets("sheet0")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    y = .Cells(1, Columns.Count).End(xlToLeft).Column
    If r < 2 Or y < 3 Then MsgBox "数据表为空!": End
    ar = .Range(.Cells(1, 1), .Cells(r, y))
End With
ReDim br(1 To UBound(ar), 1 To 1000)
br(1, 1) = "车牌号"
y = 1: k = 2
For i = 2 To UBound(ar)
    If ar(i, 1) <> "" Then
        t = d(ar(i, 1))
        If t = "" Then
            k = k + 1
            d(ar(i, 1)) = k
            t = k
            br(k, 1) = ar(i, 1)
        End If
        For j = 3 To UBound(ar, 2)
            zd = ar(i, 2) & "|" & ar(1, j)
            lh = d(zd)
            If lh = "" Then
                y = y + 1
                d(zd) = y
                lh = y
                br(1, y) = ar(i, 2)
                br(2, y) = ar(1, j)
            End If
            br(t, lh) = br(t, lh) + Val(ar(i, j))
        Next j
    End If
Next i
With Sheets("汇总")
    .[a1].CurrentRegion.Clear
    .[a1].Resize(k, y) = br
    .[a1].Resize(k, y).Borders.LineStyle = 1
    ls = UBound(ar, 2) - 2
    For j = 2 To y Step ls
        .Cells(1, j).Resize(1, ls).Merge
    Next j
    .Rows("1:1").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
    End With
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-12-28 14:55 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-28 15:33 | 显示全部楼层
JSA版本
  1. function 转换(){
  2.         let arr=Range("a1").CurrentRegion.Value2;
  3.         let obj={"bt":[,],"cp":[,],"gzl":[,]},bt=arr[0];
  4.         arr.slice(1).forEach(x=>{
  5.                 let temp=obj[x[0]]=obj[x[0]] || [x[0]];
  6.                 bt.forEach((y,i)=>{
  7.                         if (i<=1) return;
  8.                         let key=x[1] + y;
  9.                         if (!obj["bt"].includes(key)){
  10.                                 obj["bt"].push(key),obj["gzl"].push(y);
  11.                                 !obj["cp"].includes(x[1])?obj["cp"][obj["bt"].length-1]=x[1]:null;
  12.                         }
  13.                         let n=obj["bt"].indexOf(key);
  14.                         temp[n]=temp[n]==null?x[i]:temp[n]+x[i];
  15.                 });
  16.         });
  17.         let res=Object.values(obj).slice(1);
  18.         Range("h1").CurrentRegion.EntireColumn.Delete();
  19.         Range("h1").Resize(res.length,res[1].length).Value2=res;
  20.         let c=Cells.Item(2,Columns.Count).End(xlToLeft).Column;
  21.         for (let i=c;i>=Range("h1").Column;i--){
  22.                 if (Cells.Item(1,i).Value2!=null) Cells.Item(1,i).Resize(1,bt.length-2).Merge();
  23.         }
  24.         Range("h1").CurrentRegion.HorizontalAlignment=xlHAlignCenter;
  25. }
复制代码

TA的精华主题

TA的得分主题

发表于 2023-12-28 15:34 | 显示全部楼层
附件,WSP测试

工作簿1.zip

16.11 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-7-18 09:51 | 显示全部楼层

选定区域包含多重数值,合并到一个单元格只能保留最左上角的数据。
需要不断的点确定。
怎么在代码中解决?
谢谢

TA的精华主题

TA的得分主题

发表于 2024-7-18 16:31 | 显示全部楼层
jjmysjg 发表于 2024-7-18 09:51
选定区域包含多重数值,合并到一个单元格只能保留最左上角的数据。
需要不断的点确定。
怎么在代码中解 ...

加上 On Error Resume Next

TA的精华主题

TA的得分主题

发表于 2024-7-18 19:05 | 显示全部楼层
戎马书生222 发表于 2024-7-18 16:31
加上 On Error Resume Next

没有效果,继续提示合并

TA的精华主题

TA的得分主题

发表于 2024-7-19 09:00 | 显示全部楼层
jjmysjg 发表于 2024-7-18 19:05
没有效果,继续提示合并

还有一个application.DisplayAlerts =False

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 08:31 , Processed in 0.043463 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表