作者:绿色风
分类:
时间:2022-08-17
浏览:145
楼主 kevinchengcw |
Q: 如何用VBA实现单元格内容以第一个指定字符对齐? A: 利用VBA计算并调整单元格自定义文字格式,我们可以轻松的实现这一功能,本例以"-"作为指定字符,示例代码如下:
- Sub test()
- Dim M, N As Integer
- Dim Str As String
- Dim RegEx
- Set RegEx = CreateObject("vbscript.regexp") '创建正则表达式项目用于查找双字节文本
- With RegEx
- .Global = True '设定作用域为全程
- .Pattern = "[^\x00-\xff]" '查找内容为所有非单字节文本
- End With
- Str = "-" '设定特定字符,这样便于更改特定字符
- N = 0 '初始化最大值变量的值
- For M = 2 To Cells(Rows.Count, 1).End(3).Row '循环数据区起始到最后,用于取得数据区特定字符前字符串长度的最大值
- If Cells(M, 1).Value <> "" Then '判断一下是不是空值,防止出错
- If 2 * Len(Split(Cells(M, 1).Value, Str)(0)) - Len(RegEx.Replace(Split(Cells(M, 1).Value, Str)(0), "")) > N Then '否则如果当前单元格的特定字符左侧的单字节文本长度大于现有长度最大值,则
- N = 2 * Len(Split(Cells(M, 1).Value, Str)(0)) - Len(RegEx.Replace(Split(Cells(M, 1).Value, Str)(0), "")) '则用当前单元格的长度替换原来的最大值
- End If
- End If
- Next M
- For M = 2 To Cells(Rows.Count, 1).End(3).Row '再次循环数据区
- If Cells(M, 1).Value <> "" Then '判断是否是空值,防止出错
- Cells(M, 2) = Cells(M, 1).Value 'B列先引用A列的值
- 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), ""))) & "@" '根据最大值与当前特定字符前的文本的差值在单元格格式前补上对应的空格(注:单元格值不会改变,即单元格值前面不会出现补加的空格)
- End If
- Next M
- End Sub
如果不需要处理双字节文本的话,可以去除正则匹配部分。 附示例文件。 以特定字符进行对齐样式.rar |
2楼 xyf2210 |
有点复杂,消化下 |
3楼 云龙 |
学习了,辛苦 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一