如何用vba将文本数字改为数值?

单元格格式为文本类型,此时输入了数值"100",做自动求和时发现此100无法被计算,于是将其单元格格式改为数值类型,但自动求和仍然不能计算这100,应该是该单元格格式虽然纠正了,但其中的"100"仍然是文本类型,此时删除后重新输入一次就可以了,但这是人为纠正的,有没有办法使用vba来将这个仍然是文本类型的100变为数值类型?求高人指点,谢谢!

将文本转换为数值,推荐两种方法:

一是【分列】,选择需要转换的单列数据,点【数据】下面的【分列】按钮,弹出对话框后直接点【完成】即可。如果多列需要多次操作。【分列】按钮的位置如下图:

二是楼主要求的VBA办法,此方法主要用于解决太多列需要处理的情况,列不多的时候用不着这么复杂,先给出把全表转换为数值的程序代码:

sub 宏1()

    dim arr

    arr=activesheet.usedrange

    activesheet.usedrange=arr

end sub

注意,这个代码把全表都转换了,如果原来有部分区域有公式也会转换为数值,如果有部分区域是身份证号码等长数字,转换后会丢失内容。如果只转换某个区域(例如A2:F100),代码需要修改如下:

sub 宏1()

    dim arr

    arr=range("a2:f100")

    range("a2:f100")=arr

end sub

程序一次只处理一个连续区域,有多个区域(例如A2:F100, H3:L5)可以使用下面的循环办法:

sub 宏1()

    dim arr, rng

    for each rng in array("A2:F100",   "H3:L5")

        arr=range(rng)

        range(rng)=arr

    next rng

end sub

这个代码可以解决无数多个区域的情况,依次按格式写在后面即可。

追问

高手,再请教下,如何用vba实现将单元格中的内容强制转换为文本类型?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-03-12

用VBA是可以的,但你这个情况,感觉没必要用VBA。

方法一:

    选中这一列设置为常规格式,

    选中这一列,进行替换,0全部替换为0、1全部替换为1,2全部替换为2,......,0至9这十个数字分别替换一次,共替换十次,以保证每一个单元格都被替换到。只要单元格被替换到(单元格有变更)就会重新识别单元格格式的。

方法二:

    找一列空列进行辅助,输入公式=--A1并下拉填充,这列得出的就是数值格式。

    选中辅助列,复制,再选中A列,右键---粘贴为值,将A列覆盖,A列就变成数值了。

    最后把辅助列删除或清空。

第2个回答  2021-03-12
可采用Val函数可以将包含数值的字符型数据转化为Double(双精度)数值型数据类型,其语法为Val(string)演示代码如下:
Sub ShowFormatVal()
Dim num As Double, str As String
str = Format(Now, "Short Time")
num = Val(str)
'如果现在的时间是 1:45 AM,下面语句展示的结果为: 1:45 1
Debug.Print str, num
End Sub
说明:
1、字符型数值是不能进行四则运算的,只能通过Val函数将其转换后才能使用。
2、可以将8进制、16进制等转化为10进制数,如,Val(&o77)(8进制)、Val(&HFF)(16进制)分别转化为十进制的63和255追问

还是不懂,能按我的问题来回答么,谢谢!

追答

请问你是哪一块不了解?我给你的就是VBA的写法参考。