两台计算机对同一份 Excel 文档显示不同的数字

两台计算机对同一份 Excel 文档显示不同的数字

我有两台电脑,当我在两台电脑上打开同一个 Excel 时,它们显示的数字不同。它看起来像这样:

在此处输入图片描述

第一台电脑显示数字135.05,另一台电脑显示135.059.003.051.757,00。两台电脑的设置相同,如下所示:

在此处输入图片描述

是否有人知道其他可能给我带来麻烦的设置?


后台有很多宏在运行,我认为这个宏可能会导致问题。每当工作表在开始时被更改、激活或打开时,它都会被调用。这个宏的任务是转换“以字符串形式存储的数字”

Public Function remove_numbers_formated_as_text(ByVal sh As Worksheet)

    Dim r As Range
    Dim arr As Variant
    Dim i As Long '''' arr's rows
    Dim j As Long '''' arr's columns
    
    Dim s As String
    Dim b As Boolean
    
    Set r = sh.ListObjects(1).DataBodyRange
    arr = r.Formula2

    '''' Iterate over a whole row and then proceed to next column
    For i = 1 To UBound(arr)
        For j = 1 To UBound(arr, 2)
            If IsEmpty(arr(i, j)) = False Then
                
                '''' Check whether array mamber stores formula
                b = r(i, j).HasFormula
                If b = True Then GoTo A
                
                '''' If cell doesn't treat numbers as text and is a numeric value,
                '''' then this is definitely a measurement that somebody entered and
                '''' it is therefore converted to double.
                s = r(i, j).NumberFormat
                If IsNumeric(arr(i, j)) And s <> "@" Then
                    arr(i, j) = CDbl(arr(i, j))
                End If
            
            End If
A:
        Next
    Next

    r.Formula2 = arr
    
End Function

答案1

无论如何,存储的值都是相同的,因为它是打开的同一个文件(大概来自两台计算机都可用的网络),或者是该文件及其可靠的相同副本。

可能出了什么问题?我认为这与宏有几方面的关联。

首先,请注意,宏会查看 Excel 中某个值是以文本形式还是数字形式存储的。(虽然我并不是 VBA 新手,但其中的注释已经说明了这一点)。它之所以区分,是因为这是它用来区分单元格中以某种方式放置的值的逻辑……但无论如何,不​​是由用户输入,而是由用户输入放置的值。因此,除了用户完全输入的情况外,其他情况下都可以预期文本和数字值。

其次,如果不是文本,它会确保非文本值在运行时无论出于何种目的都是双精度的。

但是第一部分非常重要...事实上,部分或全部值可能被存储为文本并被视为文本,然后仅在 Excel 认为合适时才被视为数值。

这会如何影响事情?Excel 查看带有数字字符(和分隔符)的值,并将其形式与 Windows(或 Apple)系统设置进行比较,以确定它是否是数字。如果将值存储为,12345.34Excel 几乎肯定会愿意在大多数情况下将其视为数值,即使它所在的单元格明确格式化为文本。可以肯定的是,当存在不确定性时(例如在查找中),它会将其视为文本,并且在将单元格格式化为文本时“尊重”您的指示。但是,如果您向2它添加内容,它也会很乐意这样做,显然考虑到您希望这样做并“尊重”您的选择。

但是,如果它被存储为,12,345.34并且单元格标记为文本,Excel 会将其与操作系统的数字类型值(数字、日期、时间……)设置进行比较,它可能会匹配一个,在这种情况下它会为您执行上述加法,或者它可能不匹配,在这种情况下它不会为您执行上述加法。

对于此示例,如果您的系统设置使用逗号作为整数分隔符,使用句点作为小数分隔符,则系统会将其解释为数字并进行加法运算。但是,如果您的整数分隔符是句点,则 Excel 不会将其视为数字,也无法进行加法运算。

在继续之前,您的信息有点矛盾。据说您的第二张图片代表两台机器,并将整数分隔符显示为逗号,将小数分隔符显示为句点。但您的第一张图片清楚地显示左侧机器的小数分隔符为逗号(15 个字符,这是 Excel 为与显示的输入值匹配的单元格值保留的最多字符,另外在逗号后显示两个零……这些零只能在示例中作为小数位存在,如 sort 格式#.##0,00,而不是“相反”: #,@@0.00。所以这里没有争论的余地。)除非它是文本显示,但这不符合问题,所以我忽略了“除非”。

上面说的是,如果您在表单中以文本形式存储了一个值,135,050003051757并在计算机上打开电子表格,使用逗号作为整数分隔符,使用句点作为小数分隔符,您将在左侧看到以万亿为单位的值,后面跟着两个(零)位小数。而且 Excel 会从单元格中删除“奇数”逗号,因此在公式编辑器中,您将看到左侧显示的内容。

但是,如果您在一台操作系统认为逗号是小数分隔符的机器上打开它,Excel 会将其视为整数部分“135”和小数部分“其余部分”,并根据格式显示为“135.05”......并且让事情变得更有趣,因为两台机器之间实际上相同的地方是文件和它的单元格格式(也就是说,与#,##0.00该机器的操作系统设置“相反”,但这只在解释 Excel 感觉到自己呈现的文本值时才重要,而不是它如何显示它真正决定的内容)是单元格本身的格式,而不是操作系统(它的角色已经结束),说使用句点作为小数分隔符。

这完全解释了两个显示结果。左边的那个从未意识到“135”后面有一个小数位,因此完全显示为一个整数值,仅用于显示目的,包含两个小数位(即始终为“00”)。而右边的那个被正确解释,但随后混淆了问题,没有通过用于解释它的格式显示,而是通过这种方式来确定哪些位进入哪个“部分”,然后通过单元格格式本身显示这些部分,这(令人困惑的部分)与系统设置不一致。

有许多可用的修复方法,但它们完全取决于您希望做什么以及您能做什么。我说的“能做”是指您可能对值的存储方式没有任何影响,因此您只能通过处理上述内容并处理异常情况来解决问题,这肯定说起来容易做起来难。我说的“希望做”是指更改该宏以对这些值进行更复杂的处理,尤其是您不会让它将任何值保留为实际文本。但同时,公式方法也存在,Excel 甚至有一个简单的函数专门用于这种事情。但就像让某人在他不愿意的情况下使用“辅助列”一样,您希望(愿意)做的事情对解决问题的方式产生了巨大的影响。以上两个“要做”是您的老板愿意看到的事情。

您应该针对该部分提出第二个问题,并清楚地表明可用的内容、您可以影响的内容以及您愿意影响的内容,以便我们可以为您提供帮助。

但上述情况肯定就是您正在经历的事情。

相关内容