Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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_Vba_Decimal_Comma - Fatal编程技术网

Excel VBA数字格式(以逗号作为十进制分隔符)

Excel VBA数字格式(以逗号作为十进制分隔符),excel,vba,decimal,comma,Excel,Vba,Decimal,Comma,主要问题始于我想用绿色三角形“转换为数字”(我知道我可以用手来做,但是有很多这样的单元格,将来我只想使用代码) 所以我想通过代码来实现它,我发现这段代码很有帮助,但是我对删除十进制数的数字格式有一个问题 Sub-Valor3() 昏暗的最后一排一样长,我一样长 LastRow=Sheets(“Hoja3”).范围(“A”和Rows.Count).结束(xlUp).行 'Sheets(“Hoja3”).Range(“A1:A”和LastRow).NumberFormat=“###0,00” 对

主要问题始于我想用绿色三角形“转换为数字”(我知道我可以用手来做,但是有很多这样的单元格,将来我只想使用代码)

所以我想通过代码来实现它,我发现这段代码很有帮助,但是我对删除十进制数的数字格式有一个问题

Sub-Valor3()
昏暗的最后一排一样长,我一样长
LastRow=Sheets(“Hoja3”).范围(“A”和Rows.Count).结束(xlUp).行
'Sheets(“Hoja3”).Range(“A1:A”和LastRow).NumberFormat=“###0,00”
对于i=1到最后一行
如果Val(图纸(“Hoja3”).范围(“A”&i).Value)为0,则_
表(“Hoja3”)。范围(“A”和i)。公式=_
Val(图纸(“Hoja3”).范围(“A”和“i”).值)
接下来我
端接头
我尝试了很多格式,但似乎没有一种有用。 这可能是因为这里我们使用逗号作为十进制分隔符,没有英里分隔符。 ?什么数字格式对我有帮助?

问题是您与非美式英语小数分隔符结合使用,这不是解决问题的正确方法

Val
函数仅将句点(
)识别为有效的十进制分隔符。当使用不同的十进制分隔符时,如在国际应用程序中,使用
CDbl
将字符串转换为数字。

资料来源:微软文档

因为
Val
函数不会将文本转换为值,而是提取
Val
函数只能使用点
作为十进制分隔符

例如:

Val("2.55") 'will return 2.55 as number
Val("2,55") 'will return 2 as number (because it cuts off all text and the comma is not considered as decimal separator)
要去除绿色三角形并将保存为文本的数字正确转换为实数,请使用以下命令:

Option Explicit

Public Sub ConvertNumberAsTextIntoRealNumber()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Hoja3")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    With ws.Range("A1", "A" & LastRow)
        .NumberFormat = "# ##0.00"  'set your desired number format
        .Value = .Value  'this will in most cases already convert to real numbers.
    End With

    'But if your numbers are hard coded to text and begin with a `'` you need the following additionally:
    Dim iRow As Long
    For iRow = 1 To LastRow
        With ws.Cells(iRow, "A")
            If IsNumeric(.Value) Then  'can the value be interpreted as a number
                If .Value <> 0 Then  'is the value not zero
                    .Value = CDbl(.Value)  'then convert it into a real number
                End If
            End If
        End With
    Next iRow
End Sub
选项显式
公共子转换器NumberAstextIntoRealNumber()
将ws设置为工作表
设置ws=ThisWorkbook.Worksheets(“Hoja3”)
最后一排一样长
LastRow=ws.Cells(ws.Rows.Count,“A”).End(xlUp).Row
带ws.Range(“A1”、“A”和LastRow)
.NumberFormat=“###0.00”设置所需的数字格式
.Value=.Value'在大多数情况下,这将转换为实数。
以
'但是如果您的数字硬编码为文本,并且以``开头,则您还需要以下信息:
暗淡无光
对于iRow=1到最后一行
使用ws.Cells(iRow,“A”)
如果是数字(.Value),那么“该值是否可以解释为数字?”
如果.Value为0,则“值”不是零
.Value=CDbl(.Value)'然后将其转换为实数
如果结束
如果结束
以
下一步
端接头
问题在于您与非美式英语小数分隔符结合使用,这不是解决问题的正确方法

Val
函数仅将句点(
)识别为有效的十进制分隔符。当使用不同的十进制分隔符时,如在国际应用程序中,使用
CDbl
将字符串转换为数字。

资料来源:微软文档

因为
Val
函数不会将文本转换为值,而是提取
Val
函数只能使用点
作为十进制分隔符

例如:

Val("2.55") 'will return 2.55 as number
Val("2,55") 'will return 2 as number (because it cuts off all text and the comma is not considered as decimal separator)
要去除绿色三角形并将保存为文本的数字正确转换为实数,请使用以下命令:

Option Explicit

Public Sub ConvertNumberAsTextIntoRealNumber()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Hoja3")

    Dim LastRow As Long
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    With ws.Range("A1", "A" & LastRow)
        .NumberFormat = "# ##0.00"  'set your desired number format
        .Value = .Value  'this will in most cases already convert to real numbers.
    End With

    'But if your numbers are hard coded to text and begin with a `'` you need the following additionally:
    Dim iRow As Long
    For iRow = 1 To LastRow
        With ws.Cells(iRow, "A")
            If IsNumeric(.Value) Then  'can the value be interpreted as a number
                If .Value <> 0 Then  'is the value not zero
                    .Value = CDbl(.Value)  'then convert it into a real number
                End If
            End If
        End With
    Next iRow
End Sub
选项显式
公共子转换器NumberAstextIntoRealNumber()
将ws设置为工作表
设置ws=ThisWorkbook.Worksheets(“Hoja3”)
最后一排一样长
LastRow=ws.Cells(ws.Rows.Count,“A”).End(xlUp).Row
带ws.Range(“A1”、“A”和LastRow)
.NumberFormat=“###0.00”设置所需的数字格式
.Value=.Value'在大多数情况下,这将转换为实数。
以
'但是如果您的数字硬编码为文本,并且以``开头,则您还需要以下信息:
暗淡无光
对于iRow=1到最后一行
使用ws.Cells(iRow,“A”)
如果是数字(.Value),那么“该值是否可以解释为数字?”
如果.Value为0,则“值”不是零
.Value=CDbl(.Value)'然后将其转换为实数
如果结束
如果结束
以
下一步
端接头

我知道您正在寻找VBA解决方案,但下面是一个Excel小技巧,您可能会发现它很有用:

  • 在文件中的某个位置输入
    1
    (数值)并复制:
  • 选择您的范围(A1:A6)并进入粘贴>粘贴特殊>选择倍增:
  • 最终结果是将所有文本值转换为数字:

  • 同样的技巧也适用于其他组合,例如
    操作:在复制
    0
    时添加
    ,等等。

    我知道您正在寻找VBA解决方案,但这里有一个Excel小技巧,您可能会发现它很有用:

  • 在文件中的某个位置输入
    1
    (数值)并复制:
  • 选择您的范围(A1:A6)并进入粘贴>粘贴特殊>选择倍增:
  • 最终结果是将所有文本值转换为数字:

  • 同样的技巧也适用于其他组合,例如
    操作:在复制
    0
    时添加
    ,等等尝试
    Sheets(“Hoja3”).Range(“A”和“i”).Formula=Val(替换(Sheets(“Hoja3”).Range(“A”和“i”).Value,“,”)
    可能
    Val
    期望十进制分隔符为
    @TimWilliams实际上这是正确的
    Val
    函数只接受句点作为十进制分隔符。出于您的兴趣,如果十进制分隔符与句点不同,文档建议使用
    CDbl
    。尝试
    Sheets(“Hoja3”).Range(“a”&i)。Formula=Val(替换(Sheets(“Hoja3”).Range(“a”&i).Value,”,“,”)
    可能
    Val