我有两台电脑,当我在两台电脑上打开同一个 Excel 时,它们显示的数字不同。它看起来像这样:
第一个显示数字135.05
,而另一个显示135.059.003.051.757,00
。两台 PC 具有相同的设置,如下所示:
有谁知道任何其他可能会让我搞砸的设置?
在后台运行了很多宏,我认为这可能会导致问题。每当工作表更改或激活或在开始时打开时都会调用它。该宏的任务是转换“数字存储为字符串”:
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
无论如何,存储的值是相同的,因为它是打开的相同文件(可能来自两台计算机可用的网络),或者文件及其可靠的相同副本。
有什么问题?我相信它以几种方式与宏有关。
首先,请注意,宏会查看 Excel 将值存储为文本还是数字。(甚至不是 VBA 新手,但其中的评论清楚地表明了这一点)。它的区别是因为这是它用来区分单元格中的值的逻辑......不知何故......但无论如何,不是通过用户输入,以及通过用户输入放在那里的值。因此,除了用户完全输入的情况外,文本和数值都是可以预期的。
其次,如果不是 Text,它确保 not-Text 值在运行时无论出于何种目的都是双精度值。
第一部分很重要……事实上,部分或全部值可能被存储为文本并被视为文本,然后只有当 Excel 认为合适时才作为数值存储。
这对事情有什么影响?Excel 查看带有数字字符(和分隔符)的值,并将其形式与 Windows(或 Apple)系统设置进行比较,以确定这是不是一个数字。例如,如果一个值被存储为,
12345.34
Excel 几乎肯定愿意以大多数方式将其视为数值,即使它所在的单元格被明确格式化为文本。可以肯定的是,当存在不确定性时,它会将其视为文本,例如在查找中,并且在将单元格格式化为文本时“尊重”您的方向。但是,如果您添加2
到它,它也会很乐意这样做,显然考虑到您希望这样做并“尊重”该选择。但是,如果它被存储为,比如说,
12,345.34
并且单元格被标记为文本,Excel 会与操作系统的数字类型值(数字、日期、时间......)的设置进行比较,在这种情况下它可能会匹配一个它会为您执行上述添加,或者它可能不匹配,在这种情况下它不会为您执行上述添加。对于此示例,如果您的系统设置使用逗号作为整数分隔符并使用句点作为小数分隔符,它将了解如何将其解释为数字并进行加法运算。但是,如果您的整数分隔符是句点,那么 Excel 作为数字将没有意义,并且无法进行加法。
在继续之前,您的信息有点矛盾。据说您的第二张图片代表两台机器,并将整数分隔符显示为逗号,将小数分隔符显示为句点。但是您的第一张图片清楚地显示左侧机器有一个逗号作为小数分隔符(15 个字符,Excel 为匹配显示的输入值的单元格值保留最多,加上在逗号后显示两个零......这些零只能存在在示例中作为小数位,作为排序格式
#.##0,00
而不是“相反”:#,@@0.00
。所以这里没有争论的余地。)除非它是一个文本显示,但这不适合这个问题,所以我打折“除非。”那个,以及它上面的那个,说,如果你有一个值作为文本存储在表单中
135,050003051757
,并在计算机上使用逗号作为整数分隔符和句点作为小数分隔符打开电子表格,你会得到你得到的显示左边的值以万亿为单位,后跟两位(零)小数位。Excel 会从单元格中去除“奇数”单个逗号,因此在公式编辑器中,您会看到左侧显示的确切内容。但是,如果您在操作系统预期逗号是小数分隔符的机器上打开它,Excel 会将其视为整数部分“135”和小数部分“其余部分”,并根据格式显示为“135.05” “......让事情变得更有趣,因为两台机器之间的文件及其单元格格式实际上是相同的(也就是说,
#,##0.00
这台机器的操作系统设置的“相反”,但这只是在解释 Excel 认为自己呈现的 TEXT 值时很重要,而不是它如何显示它真正决定的内容)是单元格本身的格式,而不是操作系统(它的角色已经结束),说使用句号用于小数点分隔符。这充分解释了两个显示的结果。左边的人从未意识到“135”之后有一个小数位,因此完全显示为一个整数值,其中包括(仅用于显示目的)两个小数位(始终为“00”)。正确的解释正确,但随后混淆了问题,不是通过用于解释它的格式显示,而是通过计算哪些位进入哪个“部分”,然后由单元格格式本身显示的那些部分,哪个(令人困惑的部分)与系统设置不一致。
有许多可用的修复程序,但它们都完全取决于您希望做什么以及您可以做什么。通过“可以做”我的意思是你可能对如何存储值完全没有影响,所以你只能通过像上面那样处理它们的事情来解决它......处理变幻莫测,这肯定是说起来容易做起来难。通过“希望做”,我的意思是更改该宏以执行与这些值有关的更多操作,尤其是您不会让它留下任何实际文本。而且,公式方法是存在的,Excel 甚至明确地为这种事情提供了一个简单的函数。但是就像让某人在他不想使用时使用“辅助栏”一样,您希望(愿意)做的事情对如何解决问题产生巨大的影响。并在两者之上“
您应该针对该部分提出第二个问题,并明确说明可用的内容,您可以影响的内容以及您愿意影响的内容,以便我们可以帮助您解决这个问题。
但以上肯定是发生在你身上的事情。