【Excel VBA】轻松搞定数字、文本单元格格式错乱问题

纲举目张

说明

在使用Excel的时候最遇到的烦恼就是本来应该是数字的却被认为的文本,导致不能进行计算,本来应该是文本的内容结果被认为是数字,结果显示成了科学计数法,甚至内容较长的字符被替换成了零,失去了意义。具体情形见下图:
《【Excel VBA】轻松搞定数字、文本单元格格式错乱问题》

其实这些烦恼在最开始录入数据前,设置对了单元格格式,就可以避免:对于应该是数字的列,除了“文本”、“日期”和“时间”之外,都可以根据实际需要进行设置;对于像身份证号、手机号和账号等一定要在录入数据前设置成“文本”格式。
如果数据不是你录入的,你进行操作时就已经是错误的格式了,手动解决的办法是:
1、首先对相应单元格设置正确的单元格格式,然后逐个双击单元格(或按F2键)进入编辑状态,紧接着回车确定,这样数据就成为了你想要的格式了。
2、首先对相应单元格设置正确的单元格格式,然后选中想要调整格式的数据区域(注意:选择区域只能是在同1列内),依次点击“数据”→“分列”,在“文本分列向导”对话框的第1步选择“固定宽度”,第2步中清除所有分列线(一般情况下是没有的),第3步中根据自己想要的格式进行选择,最后点击完成就可以了。
除了手动解决方法之外,在这里给出VBA代码的解决方法,解决的思路就是上面的第2种手动解决方法。上代码:

代码code

Sub 设置格式()
  Dim strResult As String
  strResult = InputBox("正确单元格格式:1-常规,2-文本。", "请输入正确单元格格式代码")
  
  '这里增加判断用户输入的内容是否正确
  If strResult <> "1" And strResult <> "2" Then
    MsgBox "输入错误"
    Exit Sub
  End If
  
  '根据输入的单元格格式进行格式设置
  uSplit Selection, Val(strResult)
End Sub

Function uSplit(obj As Range, DataFormat As Integer)
On Error Resume Next
  '先设置单元格格式
  Select Case DataFormat
    Case 1
      obj.NumberFormat = "General" '常规
    Case 2
      obj.NumberFormat = "@" '文本
  End Select
  
  '再分列设置内容格式
  obj.TextToColumns Destination:=Range(Cells(obj.Row, obj.Column), Cells(obj.Row, obj.Column)), DataType:=xlFixedWidth, _
      FieldInfo:=Array(0, DataFormat), TrailingMinusNumbers:=True
End Function

使用说明

核心是uSplit函数,sub语句只是为了方便用户操作,可以在实际中对sub语句内容进行修改和调整。也可以写两个sub语句一个为设置成常规格式,一个为设置成文本格式,然后在“自定义快速访问工具栏”中添加两个按钮,需要时直接点击相应按钮就可以了,更加的方便!
如有意见建议或使用中出现Bug留言,谢谢!

    原文作者:碰碰虎
    原文地址: https://blog.csdn.net/ppzgghgzshpph/article/details/117386358
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞