Excel的细胞中心发生了变化

时间:2009-12-16 05:02:07

标签: excel-vba fractions vba excel

我现在一直在研究数学演习计划。我曾经问过类似的问题,但是我没有得到任何好的帮助。所以我决定更彻底地研究这个问题并找到一些有趣的东西。

现在在我开始之前,我只是想要了解预赛。是的,我正在使用Microsoft Excel 2007.不,虽然这可能适合您,但它不适合我。

现在好了,这是照顾:

我遇到的问题是我什么时候

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这样做时才会这样做。

3 个答案:

答案 0 :(得分:1)

编辑(2)

我也尝试使用Excel 2007,如果我手动或通过脚本更改NumberFormat,则没有任何区别。

无论如何,以下脚本应该做你想要的。将其添加到工作表的源代码中。

每当更改值时都会触发它。然后它检查正确的列是否受到影响(在我的情况下为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

原帖

我只在Excel 2003中尝试过,但是手动或通过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|

为什么你会喜欢这种格式?

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

实际上,条件格式可以更好地集中所有内容。请参阅下面的图片以了解我的设置。

Fraction Format Rule