如何在 Excel 中将某一列居中、小数点对齐并且仅显示每个数字所需的小数位?

如何在 Excel 中将某一列居中、小数点对齐并且仅显示每个数字所需的小数位?

如何在 Excel 中将一列居中,使小数点对齐,并仅显示每个数字所需的小数位(即不在小数点右侧使用不必要的零)?所需输出的示例:

|      0.12    |
|  1,122       |
|    -12.2835  |
|      0.6667  |

用@Scott的话来说,当我说“将一列居中”时,我的意思是:“查看列中的所有数字。找到小数点左侧字符最多的数字,并找到小数点右侧字符最多的数字。然后调整整个列的单元格边距,使这两个值与相应单元格边框的距离相等。”

我不需要居中功能根据小数点左边和右边的最大位数的变化自动调整。我可以手动完成此操作。

答案1

首先,将所有单元格右对齐。

您必须使用两种不同的自定义格式:一种用于十进制数,另一种用于整数。

对于小数,请使用以下自定义格式:

# ##0.0?????;−# ##0.0?????  

对于整数,请使用以下自定义格式:

# ##0_._0_0_0_0_0_0;−# ##0_._0_0_0_0_0_0

_0表示宽度为 的空间0

左边的空格##0表示系统中选择的千位分隔符。

我使用真正的减号(−)代替连字符(-)来改善印刷输出。

将单元格右对齐的理由是不要使用?左侧的符号,这会导致减号和数字之间出现空格(小数点左侧位数最多的数字除外)。

使用尽可能多的?符号表示小数,以便将数字近似地居中,并使用相同数量的_0空格表示整数。此过程比从对齐对话框窗口缩进更能实现更精细的近似。正如@Scott 所说,“您必须输入数据,然后手动编辑自定义格式,估计您需要多少个问号,目视检查结果以查看它是否居中,然后迭代直到您得到正确的结果”。上述自定义格式符合问题的示例。

答案2

如果您可以让列的宽度达到所需的任意宽度,无论是窄还是宽,任一种(不仅是宽,而且限制为超过某个最小宽度),那么就可以很容易地完成。

首先,使用以下格式,按照稍后所述编辑列中的最大小数位数。该格式使用?字符作为小数位,从而创建与 Word 的小数位制表符等效的格式。这样,值就会像您在示例中显示的那样排列:

#,##0.??????

(您显示一个仅带有一个前导零的十进制值,以及另一个用逗号作为千位分隔符的值,即“#,##0。”部分。)

这样既可以实现您想要的小数点排列,又可以避免出现尾随零的情况。

接下来是实现小数点“左侧”和“右侧”条件的“格式塔”的全面开花。在大多数情况下,人们会认为,这些值来自两个不同的值,它们可能相差甚远,很难在调整边距时通过直接观察来发挥魔力。所以让 Excel 为您完成这件事吧。

使用列宽调整技术,通常首先选择(突出显示)列(不是必需的,但它可以集中注意力),然后将鼠标指针移动到列标签区域并将其轻松地移到列标签和其右侧的下一列标签之间的分隔线上,直到指针发生显著变化,然后双击以告诉 Excel 将列宽设置为最窄,以容纳列中的值......格式化。

现在,约束值两侧的空白将相同。如果您有 6,000 个条目,并且约束值的两个单元格相隔 4,206 行,那么这可能不会“光彩夺目”,但这正是您所要求的。如果列表很小,则很容易看出这一点。

此外,如果您希望增加空白并保持两边的空白量相等,只需在自定义格式的两边添加空格字符即可。我将使用字符来展示它们,\以便清晰起见(并将其设置为,""以便尾随字符显而易见),但空格键空白不需要它。但是,除空格字符之外的所有选项都需要它:

“\ #,##0.??????\ ”

现在,您如何确定哪些单元格对您有限制?我会在数组公式中使用一种简单的强力技术(“CSE”,这样您就可以得到 {})。这里的难点在于bit mathExcel 使用的。例如,要获取小数部分(这就是我在这里要讨论的全部内容,因为一旦您有了一边,从总长度中减去该数量(加上 1 作为小数点的位置)就会得到另一边 — 但您永远不需要知道它,所以……)可以取每个值并减去其TRUNC(A1,0)(截断为“0”位小数)值。但是...一旦您执行了该数学运算,“干净的”“0.653”在 Excel 中可能会变成“0.652222222222973”,并且由于小数点以及二进制数学创建小数的方式,您可能会得到 17 的长度而不是 3。但它可以完美地处理文本字符串,因为它对源材料进行的数学运算会生成准确的长度(肉眼看来,这才是最重要的)。

因此,类似于以下公式(检查 A 列):

{=IFERROR(LEN(MAX(VALUE(RIGHT(A1:A5,LEN(A1:A5)-FIND(".",TEXT(A1:A5,"@")))))),0)}

我认为范围必须是单元格:单元格,而不是 A:A,因为当在任何一个函数中使用 A:A 时,每个函数都会生成错误。此外,如果它们都是整数,整数也会产生错误,因此将整个内容包装起来以IFERROR()返回0结果。

基本上,它会生成值TEXT,找到小数点(您可以在这里捕获错误,但上面的方法更简单,不会造成问题),并从总长度中减去其位置,以告知RIGHT()要提取多少个字符才能给出精确的小数部分。VALUE()将它们返回为数字,以便MAX()可以对它们进行求值(它无法对文本进行求值),最后LEN()告诉您最长小数部分的长度。因此,您无需检查每个单元格,否则可能会出错:简单的公式会为您解答。

将列格式化为具有该数量的?'s格式,现在您已为列的宽度设置设置了所有内容(如上所示)。

全做完了。

除了一件烦人的事情,对吧?整数的小数点...

我从未见过使用常规自定义格式解决该问题的方法。但有人解决了这个问题。先进行常规格式化(如上文所述,或者在其他情况下),然后应用测试Conditional Format值是否为整数并将其格式化为不带小数点的格式。遗憾的是……对于这种整体情况,这种方法行不通,因为格式无法使其在“小数点制表符”上对齐。您可以尝试在格式末尾添加空格,以将整数推到正确的位置。使用 Comic Sans MS,11 pt 可以快速且几乎完美地完成。使用其他空格字符可以使其完美。毕竟,您不会更改字体,因此只需学习一次,即可轻松永久应用,对吗?

但这并非完美自然的解决方案。但非常接近(对于使用鼠标而不是数字来定位图片等的大多数人来说,这是不可察觉的),并且混合了两个空格字符而不是只有空格字符,我相信它甚至会让我满意。

我想我触及了您要求的所有内容。描述起来很长,但实现和使用起来非常快捷方便。只需输入内容,获取小数位数并编辑列格式,自动调整宽度,如果空格不够,则在两边添加空格字符,然后就大功告成了。

相关内容