ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用VBA实现单元格内容以第一个指定字符对齐?

如何用VBA实现单元格内容以第一个指定字符对齐?

作者:绿色风 分类: 时间:2022-08-17 浏览:98
楼主
kevinchengcw
Q: 如何用VBA实现单元格内容以第一个指定字符对齐?
A: 利用VBA计算并调整单元格自定义文字格式,我们可以轻松的实现这一功能,本例以"-"作为指定字符,示例代码如下:
  1. Sub test()
  2. Dim M, N As Integer
  3. Dim Str As String
  4. Dim RegEx
  5. Set RegEx = CreateObject("vbscript.regexp")  '创建正则表达式项目用于查找双字节文本
  6. With RegEx
  7.     .Global = True  '设定作用域为全程
  8.     .Pattern = "[^\x00-\xff]"   '查找内容为所有非单字节文本
  9. End With
  10. Str = "-"   '设定特定字符,这样便于更改特定字符
  11. N = 0   '初始化最大值变量的值
  12. For M = 2 To Cells(Rows.Count, 1).End(3).Row  '循环数据区起始到最后,用于取得数据区特定字符前字符串长度的最大值
  13.     If Cells(M, 1).Value <> "" Then  '判断一下是不是空值,防止出错
  14.         If 2 * Len(Split(Cells(M, 1).Value, Str)(0)) - Len(RegEx.Replace(Split(Cells(M, 1).Value, Str)(0), "")) > N Then  '否则如果当前单元格的特定字符左侧的单字节文本长度大于现有长度最大值,则
  15.             N = 2 * Len(Split(Cells(M, 1).Value, Str)(0)) - Len(RegEx.Replace(Split(Cells(M, 1).Value, Str)(0), ""))  '则用当前单元格的长度替换原来的最大值
  16.         End If
  17.     End If
  18. Next M
  19. For M = 2 To Cells(Rows.Count, 1).End(3).Row  '再次循环数据区
  20.     If Cells(M, 1).Value <> "" Then  '判断是否是空值,防止出错
  21.         Cells(M, 2) = Cells(M, 1).Value  'B列先引用A列的值
  22.         Cells(M, 2).NumberFormatLocal = Space(N - 2 * Len(Split(Cells(M, 1).Value, Str)(0)) + Len(RegEx.Replace(Split(Cells(M, 1).Value, Str)(0), ""))) & "@"  '根据最大值与当前特定字符前的文本的差值在单元格格式前补上对应的空格(注:单元格值不会改变,即单元格值前面不会出现补加的空格)
  23.     End If
  24. Next M
  25. End Sub


如果不需要处理双字节文本的话,可以去除正则匹配部分。
附示例文件。
以特定字符进行对齐样式.rar
2楼
xyf2210
有点复杂,消化下
3楼
云龙
学习了,辛苦

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap