Excel精英培训网

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

[已解决]各单位间留空几列, 留空列可以增删

[复制链接]
发表于 2022-1-27 17:52 | 显示全部楼层 |阅读模式
3学分
本帖最后由 韩立 于 2022-1-27 18:03 编辑
根据sheet名增量更新2.rar (50.9 KB, 下载次数: 5)

n = Asc(UCase(Left(NM, 1))) - 64 '求列号(序号)a
      If n > 0 And n < 27 Then
--------------------------------------------------------------------------------------------------------
需求:
1、sheet名的ABCD   可以是vba允许的任意字符    用于分门别类   更灵活

2、各单位间留空5列   可以修改

3、增删列  

代码还请老师注释一下  感谢
--------------------------------------------------------------------------------------------------------

A1        b        c        d        e5        F        g        h        i        j9        k10        l        m        n        o        p        q        r        s        t        u        v        w        x        y        z
65        98        99        100        101        70        103        104        105        106        107        108        109        110        111        112        113        114        115        116        117        118        119        120        121        122
甲单位乙单位丙单位丁单位所有单位
A烟台B哇塞C哇塞D哇塞A烟台
A发过的B大师C大师D大师A发过的
A大师B发过的C发过的D发过的A大师
A哇塞B烟台C烟台D烟台A哇塞
B哇塞
B大师
B发过的
B烟台
C哇塞
C大师
C发过的
C烟台
D哇塞
D大师
D发过的
D烟台




最佳答案
2022-1-27 17:52
你再试试
Private Sub Worksheet_Activate()
    If Range("A201") = "" Then
        Range("A1:AZ1").ClearContents  '清除数据
        JG = InputBox("请输入各单位间隔空列数:", "间距设置", 5)
        If JG <> "" Then
            Range("A201") = JG
            ARR = Array("甲单位", "乙单位", "丙单位", "丁单位", "所有单位")    '列标内容
            For I = 0 To UBound(ARR)
                Cells(1, I * (JG + 1) + 1) = ARR(I)    '输入列标
            Next
        Else
            JG = 5
        End If
    Else: Exit Sub
    End If
    Range("A4:AZ200").ClearContents  '清除数据
    For Sh = 3 To Sheets.Count
        NM = Sheets(Sh).Name
        N = (Asc(UCase(Left(NM, 1))) - 64)
        If N > 0 And N < 27 Then
            N = (N - 1) * (JG + 1) + 1  '求列号(序号)
            W = Cells(200, N).End(3).Row + 1   '求最后一行+1
            If W < 4 Then W = 4    '避免数据落入前3行
            With Cells(W, N)
                .Select
                .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NM & "!A1", TextToDisplay:=NM   '添加超链接
                .Font.Name = "宋体"
                .Font.Size = 14
            End With
            N2 = UBound(ARR) * (JG + 1) + 1
            W2 = Cells(500, N2).End(3).Row + 1   '求最后一行+1
            If W2 < 4 Then W2 = 4    '避免数据落入前3行
            With Cells(W2, N2)
                .Select
                .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NM & "!A1", TextToDisplay:=NM   '添加超链接
                .Font.Name = "宋体"
                .Font.Size = 14
            End With
        Else
            N2 = UBound(ARR) * (JG + 1) + 1
            W = Cells(500, N2).End(3).Row + 1
            If W < 4 Then W = 4
            With Cells(W, N2)
                .Select
                .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NM & "!A1", TextToDisplay:=NM
                .Font.Name = "宋体"
                .Font.Size = 14
            End With
        End If
    Next
End Sub

最佳答案

查看完整内容

你再试试 Private Sub Worksheet_Activate() If Range("A201") = "" Then Range("A1:AZ1").ClearContents '清除数据 JG = InputBox("请输入各单位间隔空列数:", "间距设置", 5) If JG "" Then Range("A201") = JG ARR = Array("甲单位", "乙单位", "丙单位", "丁单位", "所有单位") '列标内容 For I = 0 To UBound(ARR) Cells(1 ...
发表于 2022-1-27 17:52 | 显示全部楼层    本楼为最佳答案   
你再试试
Private Sub Worksheet_Activate()
    If Range("A201") = "" Then
        Range("A1:AZ1").ClearContents  '清除数据
        JG = InputBox("请输入各单位间隔空列数:", "间距设置", 5)
        If JG <> "" Then
            Range("A201") = JG
            ARR = Array("甲单位", "乙单位", "丙单位", "丁单位", "所有单位")    '列标内容
            For I = 0 To UBound(ARR)
                Cells(1, I * (JG + 1) + 1) = ARR(I)    '输入列标
            Next
        Else
            JG = 5
        End If
    Else: Exit Sub
    End If
    Range("A4:AZ200").ClearContents  '清除数据
    For Sh = 3 To Sheets.Count
        NM = Sheets(Sh).Name
        N = (Asc(UCase(Left(NM, 1))) - 64)
        If N > 0 And N < 27 Then
            N = (N - 1) * (JG + 1) + 1  '求列号(序号)
            W = Cells(200, N).End(3).Row + 1   '求最后一行+1
            If W < 4 Then W = 4    '避免数据落入前3行
            With Cells(W, N)
                .Select
                .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NM & "!A1", TextToDisplay:=NM   '添加超链接
                .Font.Name = "宋体"
                .Font.Size = 14
            End With
            N2 = UBound(ARR) * (JG + 1) + 1
            W2 = Cells(500, N2).End(3).Row + 1   '求最后一行+1
            If W2 < 4 Then W2 = 4    '避免数据落入前3行
            With Cells(W2, N2)
                .Select
                .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NM & "!A1", TextToDisplay:=NM   '添加超链接
                .Font.Name = "宋体"
                .Font.Size = 14
            End With
        Else
            N2 = UBound(ARR) * (JG + 1) + 1
            W = Cells(500, N2).End(3).Row + 1
            If W < 4 Then W = 4
            With Cells(W, N2)
                .Select
                .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NM & "!A1", TextToDisplay:=NM
                .Font.Name = "宋体"
                .Font.Size = 14
            End With
        End If
    Next
End Sub
回复

使用道具 举报

发表于 2022-1-29 09:48 | 显示全部楼层
根据sheet名增量更新3.rar (40.7 KB, 下载次数: 10)
回复

使用道具 举报

 楼主| 发表于 2022-2-13 19:50 | 显示全部楼层
本帖最后由 韩立 于 2022-2-13 20:07 编辑

新年好  老师


测试了 下 基本可用  
A4:A200,G4:G200,M4:M200,S4:S200,Y4:Y200   清除数据范围 调了下   空的中间五格有公式  


不知是不是 Excel版本问题哈   我是07 精简版   sheet中文的话 下面命令出错       1004  应用程序定义或对象定义错误
W = Cells(500, N2).End(3).Row + 1

sheet带字母 暂时OK 的  

因为试试那个sheet您是添加进去了的   但是我吧A201数据去掉后就会报错





回复

使用道具 举报

 楼主| 发表于 2022-2-13 20:12 | 显示全部楼层

老师

还有一个 就是A201 单元格

不知是版本 还是设置问题 并不会自动运行  我只好做了按钮出来
回复

使用道具 举报

发表于 2022-2-13 23:10 | 显示全部楼层
不知你的系统如何,我这Win7+Excel2007环境运行正常!
A201 单元格清零后,不会自动运行,可能是你的Excel禁用事件触发,写一个宏运行一次后再试试。
SUB TEST()
   Application.EnableEvents =True
END SUB
回复

使用道具 举报

 楼主| 发表于 2022-2-13 23:32 | 显示全部楼层
本帖最后由 韩立 于 2022-2-13 23:34 编辑
zjdh 发表于 2022-2-13 23:10
不知你的系统如何,我这Win7+Excel2007环境运行正常!
A201 单元格清零后,不会自动运行,可能是你的Excel ...

谢谢老师

我的环境和您一样 的

我说的不会自动运行

Private Sub Workbook_NewSheet(ByVal Sh As Object)    '在工作簿中新建工作表时执行程序(固定格式)
Sheets("汇总").Range("A201") = ""    '<工作表>("汇总" )的<单元格>区域("A201")=空值
End Sub    '子程序结束


是这段不会   按道理是新建表即执行  
  所以 按钮解决了

现在就是中文sheet名  会1004报错  
W = Cells(500, N2).End(3).Row + 1  代码提示

字母就暂时还没发现   正在和源文件合并调试   

源文件空的列有公式  



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 11:04 , Processed in 0.400056 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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