分享

VBA常用小代码003:就任性!一键批量更改工作表名称~

 L罗乐 2017-09-30



您问我为啥突然问这话,绝壁不是我犯抽,而是那段小代码对我们今天的问题非常重要。

我们今天分享的内容是——如何一键批量修改工作表名称。

举个例子,如下图的A列所示,工作表名是一些可爱家伙。


现在,我们想把工作表名称,根据E:F列的匹配信息,修改为如下形式,部门-人名:


(栗子里表名修改的规则,就是依照E:F的信息,在每个人名前增加部门的前缀)




首先,我们把该工作簿现有工作表的名称提取出来,放置在表格的A列。这样一来,我们就可以很方便的利用函数公式,比如IF、VLOOKUP函数等,根据E:F列的内容,对表名做针对性的修改。

看我小眼神,这就用到了我们之前说的VBA常用小代码系列001,一键生成工作表目录不是?

利用该段小代码,一键我们就可以把表名提取到A列了。

当然,那期的代码是批量提取工作表名称并建立超链接,我们这里不需要建立超链接,代码可以简化如下:


Sub ml()
    Dim sht As Worksheet, k&
    [a:a] = ''
    '清空A列数据
    [a1] = '目录'
    k = 1
    For Each sht In Worksheets
    '遍历工作簿中每个工作表
        k = k 1
        '累加K值
        Cells(k, 1) = sht.Name
        '将工作表名称依次放入表格A列
    Next
End Sub


第二步,我们把新的工作表名称用函数计算出来,放在表格的B列。

该例中的E:F列提供了每个人员的部门参数,我们可以在B2输入公式,并向下复制填充

=IFERROR(VLOOKUP(A2,E:F,2,)&'-'&A2,A2)

最后,就是一键更名了。

代码也不长,如下:


Sub rename()
    Dim shtname$, sht As Worksheet, i&
    On Error Resume Next
   '当程序运行中出现错误时,继续运行
    For i = 1 To Cells(Rows.Count, 1).End(3).Row
    '遍历当前表格A列的数据
        shtname = Cells(i, 1)
        '将表格A列的值,赋予变量shtname
        '之所以将shtname的变量类型定义为文本,是防止A列数据为数值时和sheet序列引用产生冲突。
        Set sht = Sheets(shtname)
        If Err = 0 Then
          '如果工作簿存在sht表,则更名
            Sheets(shtname).Name = Cells(i, 2)
        Else
           '如果工作薄不存在sht表,则清除错误,对下一个值判断处理
            Err.Clear
        End If
    Next
End Sub


看下动画效果:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多