Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1623|回复: 1

[已解决]急求VBA重新排编号

[复制链接]
发表于 2017-4-19 17:58 | 显示全部楼层 |阅读模式
请教高手:如何修改程序使得执行的后程序一班至九班编号按照001、/002………等顺序重新排列?如:一班工作表A5的值应为“003”。详见附件,万分感谢!!!
最佳答案
2017-4-19 19:09
Sub test1()
Application.ScreenUpdating = False
Dim bj As Range, hh As Long, sht As Worksheet, wb As String
For Each sht In Worksheets
        If sht.Name <> "全部" Then
            Worksheets("全部").[a1:e1].Copy sht.[a1]
            sht.[a1].CurrentRegion.Offset(1).Clear
            Worksheets("全部").[a2:e2].Copy sht.[a2]
        End If
        Next
hh = 3
wb = Sheet1.Cells(hh, "B")
Do While wb <> ""
    Set bj = Worksheets(wb).Cells(Rows.Count, 1).End(3).Offset(1, 0)
    Sheet1.Cells(hh, "A").Resize(1, 5).Copy bj
    hh = hh + 1
    wb = Sheet1.Cells(hh, "B")
Loop
'b = 0
For Each sht In Worksheets
        With sht
            If .Name <> "全部" Then
                .Columns(2).Delete   '删除第2列
                .Columns(2).ColumnWidth = 20      '设置第二列的宽度
                .Range("A:A,C:C,D:D").ColumnWidth = 15     '设置第一列、第三列的宽度
                x = Array("编辑1", "编辑2", "编辑3", "编辑4", "编辑5", "编辑6", "编辑7", "编辑8", "编辑9")  '表头内容自己编辑
                .[a1].Resize(1, 4) = x(b)
                .Range("A1:D1").Font.Size = 11   '第1行设置11号字体
                .Rows(1).RowHeight = 50       '第1行的行高
               
                With .[a1].CurrentRegion.Offset(1)   '设置下面各行
                    .Font.Size = 10   '10号字体
                    .RowHeight = 30       '行高
                    .WrapText = True        '自动换行
                End With
                .Range(sht.Cells(3, 1), .Cells(.Cells(Rows.Count, 1).End(3).Row, 4)).Sort key1:=.Cells(3, 4), Order1:=xlAscending, Header:=xlNo
                For i = 3 To sht.Cells(Rows.Count, 1).End(3).Row
                    .Cells(i, 1) = "'" & Format(i - 2, "000")
                Next

'                 b = b + 1
            End If
        End With
    Next
'    For Each sht In Worksheets
'    If sht.Name <> "全部" Then
'        sht.Range(sht.Cells(3, 1), sht.Cells(sht.Cells(Rows.Count, 1).End(3).Row, 4)).Sort key1:=sht.Cells(3, 4), Order1:=xlAscending, Header:=xlNo
'
'    End If
'    Next
    Application.ScreenUpdating = True
End Sub
大概就是改成这样

vba求助 (1).rar

33.52 KB, 下载次数: 3

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-4-19 19:09 | 显示全部楼层    本楼为最佳答案   
Sub test1()
Application.ScreenUpdating = False
Dim bj As Range, hh As Long, sht As Worksheet, wb As String
For Each sht In Worksheets
        If sht.Name <> "全部" Then
            Worksheets("全部").[a1:e1].Copy sht.[a1]
            sht.[a1].CurrentRegion.Offset(1).Clear
            Worksheets("全部").[a2:e2].Copy sht.[a2]
        End If
        Next
hh = 3
wb = Sheet1.Cells(hh, "B")
Do While wb <> ""
    Set bj = Worksheets(wb).Cells(Rows.Count, 1).End(3).Offset(1, 0)
    Sheet1.Cells(hh, "A").Resize(1, 5).Copy bj
    hh = hh + 1
    wb = Sheet1.Cells(hh, "B")
Loop
'b = 0
For Each sht In Worksheets
        With sht
            If .Name <> "全部" Then
                .Columns(2).Delete   '删除第2列
                .Columns(2).ColumnWidth = 20      '设置第二列的宽度
                .Range("A:A,C:C,D:D").ColumnWidth = 15     '设置第一列、第三列的宽度
                x = Array("编辑1", "编辑2", "编辑3", "编辑4", "编辑5", "编辑6", "编辑7", "编辑8", "编辑9")  '表头内容自己编辑
                .[a1].Resize(1, 4) = x(b)
                .Range("A1:D1").Font.Size = 11   '第1行设置11号字体
                .Rows(1).RowHeight = 50       '第1行的行高
               
                With .[a1].CurrentRegion.Offset(1)   '设置下面各行
                    .Font.Size = 10   '10号字体
                    .RowHeight = 30       '行高
                    .WrapText = True        '自动换行
                End With
                .Range(sht.Cells(3, 1), .Cells(.Cells(Rows.Count, 1).End(3).Row, 4)).Sort key1:=.Cells(3, 4), Order1:=xlAscending, Header:=xlNo
                For i = 3 To sht.Cells(Rows.Count, 1).End(3).Row
                    .Cells(i, 1) = "'" & Format(i - 2, "000")
                Next

'                 b = b + 1
            End If
        End With
    Next
'    For Each sht In Worksheets
'    If sht.Name <> "全部" Then
'        sht.Range(sht.Cells(3, 1), sht.Cells(sht.Cells(Rows.Count, 1).End(3).Row, 4)).Sort key1:=sht.Cells(3, 4), Order1:=xlAscending, Header:=xlNo
'
'    End If
'    Next
    Application.ScreenUpdating = True
End Sub
大概就是改成这样

评分

参与人数 1 +3 收起 理由
zhongyong6899 + 3 很给力

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 13:57 , Processed in 0.134611 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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