excel 清除和重置货币格式

n9vozmp4  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(171)

我有以下代码来清除和重置单元格区域的格式。
firstRowlastRow的设置是否正确。
有些单元格的格式不正确。我发现这些单元格是通过寻找一个丢失的“€”符号。
我所知道的唯一解决方法是双击单元格,然后出现“€”符号,计算再次开始。
您是否知道更智能的解决方案以及检测和调试此问题的方法?

' Amount in EUR
Dim amountInEurRange As Range
Set amountInEurRange = Full.Range(f_amountInEUR & firstRow & ":" & f_amountInEUR & lastRow)
amountInEurRange.ClearFormats
amountInEurRange.Select
With Selection
    .NumberFormat = "#,##0.00 [$€-de-DE]"
    .Value = .Value
End With

d7v8vwbk

d7v8vwbk1#

显然,Excel没有将第二个值识别为数字,而是将其存储为文本。文本没有数字值,因此不会在Sum-函数中相加。文本也不会设置格式。
首先,您需要了解单元格的 valueformat 之间的区别。数值在内部以二进制格式存储。然后,该值以人类可读的形式显示。值1234可以显示为12341.234,001,234.0€1,234.01.23E+03等格式设置不会更改其内部值
第二件事是你需要了解Excel是如何工作的,如果你输入一些数据。你输入键1821,37,然后按回车键。如果在你的计算机上(不在Excel中!)区域设置将十进制字符定义为逗号,则Excel会将您的输入视为数字,并将其转换为内部二进制值。然后,它会查看单元格的格式并相应地显示它。但是,如果您的小数点字符是一个点,Excel不会将您的输入视为数字,因此会将其存储为字符串。字符串的存储方式完全不同(简单地说:每个字符为一个字节)。
当然,实际情况要复杂得多,Excel在接收到您的输入时也会检查格式。如果您将单元格设置为日期格式,它会尝试将您的输入解释为日期,这也是通过检查区域设置来实现的。将单元格设置为文本格式会将输入存储为文本,即使它可以转换为数字。
现在,您的工作表中的数据被输入,但Excel没有将其解释为数字。可能是具有不同区域设置的用户输入的,也可能是从CSV导入的。当您双击单元格时,Excel会处理内容,就像您刚刚输入一样-在您的PC上,它 * 可以 * 解释为数字,因此会被转换。看起来相似或相同,但是是完全不同的值。
你可以做的就是把下面的代码添加到你的例程中,它会尝试把一个字符串转换成一个数字

For Each cell In amountInEurRange
    If VarType(cell.Value) = vbString Then
        Dim s As String, v As Variant
        s = cell.Value
        On Error Resume Next
        v = CDbl(Replace(s, ",", ".")) ' In VBA, decimal char is always "."
        On Error GoTo 0
        If VarType(v) = vbDouble Then cell.Value = v
    End If
Next cell

相关问题