1

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

现在,在我开始之前,我只想回顾一下预赛。是的,我使用的是 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 这样做时。

4

3 回答 3

1

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

3 1/3
2    
1 3/4
3 2/7
2 2/3
3 1/2
6   
于 2009-12-16T06:05:33.367 回答
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|

你为什么喜欢这种格式?

于 2009-12-16T05:56:20.037 回答
0

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

分数格式规则

于 2010-07-22T19:35:31.103 回答