Excel';s细胞中心移位

Excel';s细胞中心移位,excel,fractions,vba,Excel,Fractions,Vba,我现在一直在做一个数学练习程序。我以前也问过类似的问题,但没有得到任何帮助。所以我决定更彻底地研究这个问题,并发现了一些有趣的东西 在开始之前,我只想回顾一下预赛。是的,我正在使用MicrosoftExcel2007。不,虽然这可能对你有效,但对我无效 好了,现在,这已经解决了: 我遇到的问题是当我 ActiveCell.NumberFormat = "# ?/?" 在我的代码中,它会导致excel的中心线向左移动(这是我知道如何解释它的唯一方法) 意思是,如果你有右对齐的东西,它看起来会居中

我现在一直在做一个数学练习程序。我以前也问过类似的问题,但没有得到任何帮助。所以我决定更彻底地研究这个问题,并发现了一些有趣的东西

在开始之前,我只想回顾一下预赛。是的,我正在使用MicrosoftExcel2007。不,虽然这可能对你有效,但对我无效

好了,现在,这已经解决了:

我遇到的问题是当我

ActiveCell.NumberFormat = "# ?/?"
在我的代码中,它会导致excel的中心线向左移动(这是我知道如何解释它的唯一方法)

意思是,如果你有右对齐的东西,它看起来会居中,如果居中,它几乎会左对齐,左对齐和中对齐之间几乎没有什么区别

如果我有

ActiveCell.NumberFormat = "?/?"
那么上述问题就不存在了

本节的全部代码如下:

Sub test()
  Sheets("sheet1").Select
  Range("a1").Select
  For i = 1 To 10
    ActiveCell.NumberFormat = "# ?/?"
    With ActiveCell
        .Locked = False
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
    End With
    ActiveCell.Value = 33
    ActiveCell.Offset(0, 1).Select
  Next i
End Sub
如有任何建议或原因,我们将不胜感激。理想情况下,用户应该能够看到一个混合的数字

进一步的信息,如果我手动将每个单元格更改为分数,那么它工作正常。只有当excel执行此操作时,才会执行此操作。

编辑(2)

我也用Excel2007试过了,如果我手工或用脚本更改数字格式也没什么区别

无论如何,下面的脚本应该执行您想要的操作。将其添加到工作表的源中

每当值更改时,都会触发它。然后它检查正确的列是否受到影响(在我的例子中是1),然后它尝试用分数来格式化数字,但是如果没有分数,它将使用无分数格式

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    For Each cell In Target.Cells
        If cell.Column = 1 Then
            If IsNumeric(cell.value) Then
                cell.NumberFormat = "# ?/?"
                cell.Calculate
                If InStr(1, cell.Text, "/") = 0 Then
                    cell.NumberFormat = "#"
                End If
            End If
        End If
    Next cell
End Sub

原创帖子

我只在Excel2003中尝试过,但手动设置和通过VBA设置没有区别。请确保您的代码与手动操作完全相同,只需记录手动操作的宏并在另一个单元格上运行即可

改变的原因是Excel为分数保留了空间

 1,2 -> |      1 1/5|
 1   -> |      1    |
33   -> |     33    |
33,5 -> |     33 1/2|
以下是您想要的吗

 1,2 -> |      1 1/5|
 1   -> |          1|
33   -> |         33|
33,5 -> |     33 1/2|

您为什么希望它采用这种格式?

它是在对齐数字,以便在使用固定宽度字体的列中查看小数部分时对齐

3 1/3
2    
1 3/4
3 2/7
2 2/3
3 1/2
6   

事实上,条件格式将更好地将所有内容集中。有关我的设置,请参见下图


谢谢,是的,我想关闭此保留空间,以便它们可以在列中居中。我找到了将单元格从宏格式改为分数格式的代码:)@Peter Lang:我认为你编辑的文章走对了方向。但是,对于导致0/X作为余数的小数,例如8.05,它不能正确工作。为了正确地执行此操作,我几乎认为您需要一个自定义函数来处理它,但整个过程相当糟糕。我想这就引出了一个问题,那就是为什么你首先要关闭保留空间。@Ben McCormack:谢谢,我没想到!我又改了一遍,现在那个案子也处理了。我仍然不知道为什么要关闭保留空间:)我想禁用保留空间,以便分数或整数可以共享同一个单元格,都是在“分数”数字格式下,并且位于单元格的真正中心。为了确保它正确,我在vba的sheet1下添加了您的代码。如果这是对的,那么代码对我不起作用:(