我现在已经从事数学练习项目一段时间了。我之前曾问过类似的问题,但我没有得到任何好的帮助。所以我决定更彻底地研究这个问题并发现了一些有趣的东西。
在开始之前,我只想先回顾一下预备知识。是的,我正在使用 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 1/3
2
1 3/4
3 2/7
2 2/3
3 1/2
6
编辑(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|
您为什么喜欢这种格式?
实际上,条件格式可以更好地使所有内容居中。请参阅下图了解我的设置。
条件格式是在 Excel 中居中或右对齐分数的方法,至少对我来说是这样。这就是我所做的:
1 突出显示要对齐的单元格
2 在“主页”选项卡中选择“条件格式”
3 进入“新规则”
4 选择“仅设置包含以下内容的单元格格式”
5 在下拉列表中选择“特定文本”
6 将下一个框保留为“包含”
7 放一个 . (句点)在文本框中(这将使Excel搜索任何数字中的小数点)
8 单击“格式”按钮
9 选择“分数”
10 单击确定
11 如果您尚未右对齐(或居中)单元格,请立即执行。 (对齐按钮位于主页选项卡中。)
魔法!