我厌倦了合并的细胞。他们只是不工作。
所以当我只需要将文本放在多个列的中心时,我找到了一种避免水平合并单元格的方法。那是:Range("A1:C1").HorizontalAlignment = xlCenterAcrossSelection
。
它就像一个魅力。这是完美的。这正是我所需要的。
我天真以为你可以垂直地做同样的事情,将文本居中在多行上。类似于:Range("A1:A3").VerticalAlignment = xlCenterAcrossSelection
。
但是,唉,这不起作用。
我在这里遗漏了什么,或者Excel开发人员真的认为,虽然以列为中心是一个常见的交易,以行为中心是一个愚蠢的想法,没有人会这样做,所以为什么甚至打扰?
答案 0 :(得分:1)
你可以试试这个:
Sub VerticalAlign()
ThisWorkbook.Sheets(1).Cells(Round((WorksheetFunction.CountA(Range("A1:A6")) + WorksheetFunction.CountBlank(Range("A1:A6"))) / 2, 0), "A") = "Your Value Here"
End Sub
您需要更改要计算的范围以及它所引用的列,但这应该就是这样做的。但是有一点警告:VBA不像Excel那样循环。但它应始终在一位数内。您可以在此处详细了解:http://support.microsoft.com/kb/194983
答案 1 :(得分:0)
我们在单元格上使用文本框形状来执行此操作。如果在绘制形状时按住Alt,则角将捕捉到Excel网格并随单元格移动和调整大小,因此不需要花费太多时间来输入单元格。
答案 2 :(得分:0)
如果有人关心的话,我发现了一个可以解决我的问题的快乐事故。
对于我的情况,我需要在线性日历上跟踪员工休假时间,该日历可按名称和责任区域进行排序。当过滤下面的数据时,标题部分涵盖了我希望可见的三行。第1行=年(合并数月),第2行=月(合并数天),第3行=天。 单元格A1:A3合并并标记为姓名(员工),B1:B3合并并标记为AREA(职责),因此我们可以在日历电子表格中跟踪休假时间,以确保每个区域都有覆盖范围(至少有一名负责该区域的员工可用)。此方法的缺点导致过滤器块与行1相关联,因此在过滤名称时隐藏了第2行和第3行。
然后我尝试了之前发布的VBA代码并且它有效,但最大限度地考虑了适合的字体大小,如果太大则会被切断。从审美角度看,它看起来很糟糕。
然后我将名称/区域标题放在单元格A3和B3中而不进行合并,并在第三行设置过滤器。这有效地过滤了从第4行开始的所有内容而没有隐藏任何东西,但仍然看起来很糟糕。
现在我找到了解决方法。如果您将标题放在要合并的顶部单元格中,并在底部显示某些值。在底部设置过滤器(需要一个值来设置过滤器)。然后合并三个单元格,它的工作原理。 所以现在我的A1:A3名称和B1:B3区域被合并,但过滤器框位于各部分的底部(与第3行对齐)。
希望这适用于某些人。然后我从编辑中锁定了这些单元格(自动过滤器设置除外),现在它无法意外更改。只是过滤了。