ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 拆分的新表生成新序号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-5-15 17:25 | 显示全部楼层 |阅读模式
在本论坛找到了一段汇总表拆分成分表的代码,实现了拆分,但序号还是原序号。要求拆分后,分表的序号列重新产生从1-n的顺序号,怎么实现


00-汇总表拆开--自动序号问题.zip (166.93 KB, 下载次数: 13)




TA的精华主题

TA的得分主题

发表于 2023-5-15 17:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
00-汇总表拆开--自动序号问题.rar (144.28 KB, 下载次数: 10)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 18:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

好像每次都生成一个“空值”工工作簿,怎么才能不让它生成呢

TA的精华主题

TA的得分主题

发表于 2023-5-15 18:48 | 显示全部楼层
增加两行代码即可
ActiveSheet.Columns("a:c").NumberFormat = "@"
             ActiveSheet.Columns("e:i").NumberFormat = "@"
            
             ActiveSheet.Range("A2").Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
            
            
              
             ActiveSheet.Range("J2") = "=Row()- 1"
             ActiveSheet.Range("J2:J" & ActiveSheet.[A65536].End(xlUp).Row).FillDown
微信图片_20230515184346.png

00-汇总表拆开--自动序号问题.7z

129.82 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2023-5-15 19:29 | 显示全部楼层
hhxq001 发表于 2023-5-15 18:20
好像每次都生成一个“空值”工工作簿,怎么才能不让它生成呢

Private Sub CommandButton19_Click()

'选择以哪个列为工作簿名称,选择哪个列为工作表名称
Application.DisplayAlerts = False
         
Dim ARR, brr()
Dim bkk, shh, bk, sh, Rngh
Dim d1, d2, i, k1, k2, j, k
Dim n, m, ab
bkk = Application.InputBox("请输入拆分成的新工作簿名称所在的列:", "工作簿名称所在列", "F", Type:=2)
If bkk = "" Then Exit Sub
shh = Application.InputBox("请输入拆分成的新工作表名称所在的列:", "工作表名称所在列", "G", Type:=2)
If shh = "" Then Exit Sub
bk = Cells(1, bkk).Column
sh = Cells(1, shh).Column
Set Rngh = Rows(1) '标题
Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
ARR = [A1].CurrentRegion '数据写入数组
  For i = 2 To UBound(ARR)
  d1(Replace(ARR(i, bk), Chr(9), "")) = "" '第bk列去重
  d2(Replace(ARR(i, sh), Chr(9), "")) = "" '第sh列去重
  Next
k1 = d1.Keys '第bk列去重后的集合
k2 = d2.Keys '第sh列去重后的集合

For i = 0 To d1.Count - 2
  With Workbooks.Add(xlWBATWorksheet) '按照第2列新建工作簿
    If k1(i) <> "" Then
        '.SaveAs FileName:=ThisWorkbook.Path & "\" & "空值" & ".xlsx" '另存为工作簿并命名
     'Else
    .SaveAs FileName:=ThisWorkbook.Path & "\" & k1(i) & ".xlsx" '另存为工作簿并命名
    End If
  End With

      For j = 0 To d2.Count - 1
         For k = 2 To UBound(ARR)
             If Replace(ARR(k, bk), Chr(9), "") = k1(i) And Replace(ARR(k, sh), Chr(9), "") = k2(j) Then    '筛选满足第bk列和第sh列条件的数据
               n = n + 1
               ReDim Preserve brr(1 To UBound(ARR, 2), 1 To n)
                  For m = 1 To UBound(ARR, 2)
                       brr(m, n) = Replace(ARR(k, m), Chr(9), "")   '写入数组brr
                  Next m
              End If
         Next k
         If n > 0 Then
                If k2(j) <> "" Then
                  'Sheets.Add.Name = "空值"
                  'Else
                 Sheets.Add.Name = k2(j) '新增工作表
                 
                End If
             Rngh.Copy ActiveSheet.Range("A1") '把标题写入第一行

             ActiveSheet.Columns("a:c").NumberFormat = "@"
             ActiveSheet.Columns("e:i").NumberFormat = "@"
            
             ActiveSheet.Range("A2").Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
             r = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row
             If r >= 2 Then
                 For s = 2 To r
                    ActiveSheet.Cells(s, 10) = s - 1
                Next s
            End If
             'ActiveSheet.Cells.EntireColumn.AutoFit '所有列自动列宽
             ActiveSheet.Range("a:h").EntireColumn.AutoFit 'a-h列自动列宽
             'ActiveSheet.Rows(2).Columns.AutoFit
             ActiveSheet.[d1].ColumnWidth = 9.5       'd列列宽9.5

             ab = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
             ActiveSheet.Range("a2:j" & ab).Borders.LineStyle = xlContinuous '表加表格线
             ActiveSheet.Range("A2:j" & ab).ShrinkToFit = True '自动缩小字体
             ActiveSheet.Range("A2:H" & ab).RowHeight = 17.25 '行宽
             Erase brr
             n = 0
          End If
    Next j
     Sheets("sheet1").Delete
     ActiveWorkbook.Close True '关闭保存
Next i
Set d1 = Nothing
Set d2 = Nothing
Application.DisplayAlerts = True
End Sub

TA的精华主题

TA的得分主题

发表于 2023-5-15 19:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
序号重新生成并不产生空值表

VBA 汇总表按指定列拆分并重新排序.7z

118.94 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 20:28 | 显示全部楼层
hhxq001 发表于 2023-5-15 18:20
好像每次都生成一个“空值”工工作簿,怎么才能不让它生成呢

没明白为什么要产生一个空值文件

TA的精华主题

TA的得分主题

发表于 2023-5-15 20:43 | 显示全部楼层
hhxq001 发表于 2023-5-15 18:20
好像每次都生成一个“空值”工工作簿,怎么才能不让它生成呢

只能是根据你的需求修改代码,没有情趣去研究你的代码的,感觉,目前的代码就是非常低端的,

TA的精华主题

TA的得分主题

发表于 2023-5-15 21:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看原码很头疼,重新写了一个:

00-汇总表拆开--自动序号问题.rar

68.97 KB, 下载次数: 12

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-15 22:13 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 10:34 , Processed in 0.041591 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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