上篇我在讲《更改单元格数据类型》的时候有提到如何将单元格里以文本形式存储的数字转换为常规数字。当时是以A列数据举例,通过进一步点击提醒标志以及分列的方式对数据类型进行修改。细心的你如果进一步对分列进行拓展,那么一定会发现其局限性:即分列操作只能对单列进行转换:
当你需要调整很多列数据的时候,如果多次分列不是说不可以,但不够简洁优雅。本文将延续之前的两种操作方式来解决这一痛点。
首先是通过进一步点击提醒标志的方式对多个区域,之前是鼠标选中A列,事实上完全可以通过用鼠标选中多个单元格(或者直接选中多列的方式)来选定区域,然后点击提醒标志的下拉箭头,再点击转换为数字即可达成目标。
此方法的注意事项有两个:1.鼠标选中区域的第一个单元格必须是以文本格式存储的数字(如果选中了一整列那么默认是该列第一个单元格);2.无法通过按住Ctrl的方式选中多个区域。上述两种操作过后都不会导致提醒标志弹出,也就无从谈起进一步的转换为数字操作了。
因此,本文的重点将着重放在用宏的方式来实现批量分列。思路如下:通过遍历每一列的方式对分列进行多次重复操作。
如果你需要将工作表里的每一列数据都转化为“常规”格式(“常规”数据格式将数值转换成数字,日期值会转换成日期,其余数据则转换成文本),那么代码如下:
Sub 批量分列为常规格式()
'将活动工作表所有列均转化为常规格式
Dim i As Integer
i = 1
Do While i <= ActiveSheet.UsedRange.Columns.Count
Columns(i).Select
Selection.TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
i = i + 1
Loop
End Sub
如果你需要将工作表里的每一列数据都转化为文本格式,那么代码如下:
Sub 批量分列为文本格式()
'将活动工作表所有列均转化为文本格式
Dim i As Integer
i = 1
Do While i <= ActiveSheet.UsedRange.Columns.Count
Columns(i).Select
Selection.TextToColumns DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 2), TrailingMinusNumbers:=True
i = i + 1
Loop
End Sub
你会发现两段代码的区别在于Array后面的(1,1)变成了(1,2)。括号里的第一个1代表着1列,逗号后面的1和2分别代表着“常规”以及“文本”类型。关于这一点,微软对Excel列的数据类型有进一步的概括:
现在你可以通过只改变Array后面括号的内容来按需求自己编写代码啦!这里就不进一步进行列举了。如有任何问题欢迎留言沟通。
参考文献
o365devx. (2022年4月). XlColumnDataType 枚举(Excel). Microsoft. 2022年12月引用自
https://learn.microsoft.com/zh-cn/office/vba/api/Excel.XlColumnDataType.
领取专属 10元无门槛券
私享最新 技术干货