新年马上就要到了,这篇文章是写来刷 guid 的,凑凑数,原因请参看上上篇文章(已经在 GR 里正常更新了!)。

10 来年前就玩过宏,不过只会录制和播放,那时候连 26 个字母都认不全更谈不上 VBA 的编辑了。现在处理一些表格的时候人工操作太繁琐,就想利用宏来进行一些自动化的操作,大概看了看 VBA,基本上5分钟就上手了,函数随用随查,VB 果然入门简单,很快就写了几个不太能拿得出手的宏...

下面是这几个宏的说明:

  • 去中文空格保留英文空格
    只替换中文内的空格。
  • 去除单元格内的所有中文
    如果单元格内含有中文并且不含有英文则清空该单元格,如果单元格内是中英混合,则只删除中文。
    注:请执行前保存文件,避免非预期的结果
  • 去除单元格内的所有英文
    将表格内的英文删除,只保留中文
    注:请执行前保存文件,避免非预期的结果
  • 删除空行空列
    把空行和空列删除,如果没有删除干净可以多执行几次。
    注:在没有合并单元格的情况下操作;有些不能删除的空行空列可能是因为其中含有空格等不可见内容
  • 合并多行内容 默认快捷键Ctrl+W
    将多行内容合并为一行。(不要Ctrl多选内容;合并顺序先左后右,先上后下;合并后会根据内容插入空格)
  • 去掉所有换行符
    将换行符号替换成空格。
  • 调整英文空格和缩进
    对英文的标点格式进行控制。
  • 获取当前文件名
    在第一行内容的右侧单元格显示当前文件名(不含扩展名)。
  • 批处理 EXCEL 文件
    执行后可以打开对话框批量选择需要处理的 xls(x) 文件。需要注意的是,批量执行的代码必需手动编辑宏,将代码插入到此 sub 内适当的位置(VB 不支持宏替换),再执行即可。另外执行过程可以选择是否自动保存、保留或关闭处理过的文件。

还有两个 function 为常用的函数(使用需引入 Microsoft VbScript Regular Expression 5.5):

  • 正则测试:regTest(测试字符串, 正则表达式),返回 true 或 false
  • 正则替换:regReplace(被替换字符串, 正则表达式, 替换字符串, 全局布尔, 多行布尔),返回 string


Excel文件:macro.xls
代码必然有许多不足和错误之处,欢迎探讨~~

另外今晚就是平安夜了,祝所有人圣诞快乐,愿望成真~~

  1. 你好,google 过来的,想问下,VB 能实现这样一种效果么:批量对现有文件按照 Excel 里指定的名称和顺序重新命名?

    • @Jes
      应该是可以的:获取当前文件的文件名,然后在 Excel 表中找到要命名的文件名,另存为该文件名。关键在于找到原文件名和新文件名的对应关系,不知道你的具体命名规则是什么。

    • @小虾
      我遇到的实际情况有两种:
      情况一:
      【现有条件】——Excel 中两列数据,分别对应原文件名和修改后文件名
      【欲实现效果】——批量按照 Excel 中的对应关系修改文件名。这种情况与你描述的一样。
      情况二:新文件名与原文件名无对应关系也没有规则,但与原文件的创建顺序有关。
      【现有条件】——①4 个需要改名的文件,可以查到创建时间。②一列 Excel 数据,按照从上至下顺序,内容为 AAA BBB EEE JJJ。
      【欲实现效果】——原文件按照其创建顺序,最早被创建的——代号 1,改名为 AAA,2 改名为 BBB,3 改名为 EEE,4 改名为 JJJ。
      哎,希望我的表述能够达意。我查了很多办法,都不行。实际情况中我有将近 6900 个需要改名的文件。愁死我了。

    • @Jes
      对于你这个情况,我觉得用 cmd 命令行更简单:

      1. dir /d /od >1.txt把要改名的文件按创建日期顺序列出一个列表,剔除里面一些没用的信息;
      2. 然后把 Excel 中预改名列表提出为 2.txt;
      3. 用 Excel 把 A 列填充为ren,B 列填充为 1.txt 的内容,C 列填充为 2.txt 的内容,另存为 bat 文件;
      4. 把 bat 文件放到要执行的文件夹里面,执行。

      我对批处理不是很熟,但这个方法我觉得远比用 macro 实现简单得多

    • @小虾
      太感谢你啦! 你真是太天才啦!Ren 命令十分简单却强大,我用你给我的方法,一分钟之内快速把所有文件名都改了。小技巧解决大问题!我会关注你的博客的,记得分享好的技巧哦。 :lol: