纲举目张
说明
在使用Excel的时候最遇到的烦恼就是本来应该是数字的却被认为的文本,导致不能进行计算,本来应该是文本的内容结果被认为是数字,结果显示成了科学计数法,甚至内容较长的字符被替换成了零,失去了意义。具体情形见下图:
其实这些烦恼在最开始录入数据前,设置对了单元格格式,就可以避免:对于应该是数字的列,除了“文本”、“日期”和“时间”之外,都可以根据实际需要进行设置;对于像身份证号、手机号和账号等一定要在录入数据前设置成“文本”格式。
如果数据不是你录入的,你进行操作时就已经是错误的格式了,手动解决的办法是:
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留言,谢谢!