Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改未格式化数字的列,以便Excel可以使用VBA将其作为数字读取_Excel_Database_Vba_String_Loops - Fatal编程技术网

如何更改未格式化数字的列,以便Excel可以使用VBA将其作为数字读取

如何更改未格式化数字的列,以便Excel可以使用VBA将其作为数字读取,excel,database,vba,string,loops,Excel,Database,Vba,String,Loops,我遇到的问题是,在从在线来源导出一系列数据并粘贴到Excel后,这些数字出现了所有错误,本质上它们是以文本而不是数字的形式读取的。 我发现发生这种情况有两个原因: 每个数字的末尾都有一个空格“” 超过一千的数字在它们中间有一个“.”字符,分离其余的(例如,13540,50)。 在下面的图片中,我确切地知道了这些数字是如何出现的,我需要的是一个代码,该代码对“M”列中的每个单元格运行,然后更改该单元格,修复上述问题,以便Excel能够实际将其作为数字读取 所以在最初我尝试了这个: Sub Fat

我遇到的问题是,在从在线来源导出一系列数据并粘贴到Excel后,这些数字出现了所有错误,本质上它们是以文本而不是数字的形式读取的。 我发现发生这种情况有两个原因:

  • 每个数字的末尾都有一个空格“”
  • 超过一千的数字在它们中间有一个“.”字符,分离其余的(例如,13540,50)。 在下面的图片中,我确切地知道了这些数字是如何出现的,我需要的是一个代码,该代码对“M”列中的每个单元格运行,然后更改该单元格,修复上述问题,以便Excel能够实际将其作为数字读取

    所以在最初我尝试了这个:

    Sub Fatura()
    
    Dim c As Range
    
        For Each c In Range("M1:M1000")
    
            c.Value = Replace(c, ".", "")
            c.Value = Replace(c, " ", "")
            c.NumberFormat = "General"
            c.NumberFormat = "0.00"
    
        Next c
    
    Sub Fatura()
    
    Dim c As Range
    
        For Each c In Range("M1:M1000")
    
            c.Value = Replace(c, ".", "")
            c.Value = Left(c, Len(c) - 1)
            c.NumberFormat = "General"
            c.NumberFormat = "0.00"
    
        Next c
    
    Wich工作正常,但出于某种原因,c.value=replace(c,“,”)没有替换字符串中的最后一个“”字符

    然后我试了一下:

    Sub Fatura()
    
    Dim c As Range
    
        For Each c In Range("M1:M1000")
    
            c.Value = Replace(c, ".", "")
            c.Value = Replace(c, " ", "")
            c.NumberFormat = "General"
            c.NumberFormat = "0.00"
    
        Next c
    
    Sub Fatura()
    
    Dim c As Range
    
        For Each c In Range("M1:M1000")
    
            c.Value = Replace(c, ".", "")
            c.Value = Left(c, Len(c) - 1)
            c.NumberFormat = "General"
            c.NumberFormat = "0.00"
    
        Next c
    
    但我得到运行时错误“5”


    提前感谢您的帮助

    在@BigBen的帮助下,我终于找到了答案。 原来字符串末尾的字符不是一个真正的空格“”,而是一个不间断的空格,这很烦人。因此,在这一发现之后,我只需将我的代码改写如下:

    Sub Fatura()
    
    Dim c As Range
    
        For Each c In Range("M1:M1000")
    
            c.Value = Replace(c, ".", "")
            c.Value = Replace(c, Chr(160), "")
            c.NumberFormat = "General"
            c.NumberFormat = "0.00"
    
        Next c
    

    谢谢你的帮助@BigBen

    在尝试为此编写代码时,您遇到了哪些具体问题?如果你能展示你已经尝试过的东西,它在这里总是有帮助的。
    Trim$
    在这里可能会有帮助,也许还有
    Application.Clean
    。@BigBen我刚刚尝试了这两种方法,代码运行时没有出错,但最后的空间仍然没有消失。真烦人<代码>子Fatura()将c作为范围(“M1:M1000”)中每个c的范围进行标注c.值=替换(c,“,”)c.值=应用程序.工作表功能.Clean(c)c.NumberFormat=“General”c.NumberFormat=“0.00”下一个c结束子您可以使用
    code
    RIGHT
    来确定最后一个字符实际上是什么。@BigBen您就是那个人!我发现这个角色其实不是一个“”而是一个
    Chr(160)
    。换句话说,一个令人讨厌的不间断的空间。因此,我对我的代码进行了如下调整,现在它对范围(“M1:M1000”)中的每个c的范围(“M1:M1000”)c.Value=Replace(c,“.”,“”)c.Value=Replace(c,Chr(160),“”)c.NumberFormat=“General”c.NumberFormat=“0.00”下一个c端接头