有条件地更改字体和大小(Microsoft Excel)
罗宾问是否有一种方法可以使用Excel的条件格式设置功能来更改单元格中使用的字体或更改单元格中的字体大小。简短的答案是“不”,这是无法做到的-至少不能使用条件格式设置。 (允许您指定字体名称和大小的控件在与条件格式一起使用的格式对话框中以灰色显示。)
但是,您可以使用宏检查单元格内容并更改单元格的外观。考虑下面的宏,该宏检查运行宏时选择的所有单元格。如果任何一个单元格的长度超过两个字符或一个值大于10,则将更改该单元格的字体。
Sub DoReformat() Dim rCell As Range For Each rCell In Selection.Cells If Len(rCell.Text) > 2 Or _ Val(rCell.Value) > 10 Then rCell.Font.Name = "Arial" rCell.Font.Size = 16 Else rCell.Font.Name = "Times New Roman" rCell.Font.Size = 12 End If Next End Sub
若要使用宏,只需选择要更改的单元格,然后运行宏。如果希望格式更自动地进行更改,则可以进行宏检查以查看是否在特定的单元格范围内进行了更改:
Private Sub Worksheet_Calculate() Dim rng As Range Dim rCell As Range Set rng = Range("A1:A10") For Each rCell In rng If Len(rCell.Text) > 2 Or _ Val(rCell.Value) > 10 Then rCell.Font.Name = "Arial" rCell.Font.Size = 16 Else rCell.Font.Name = "Times New Roman" rCell.Font.Size = 12 End If Next End Sub
将此宏添加到工作表对象后,将在每次重新计算工作表时运行。它使用与上一个宏相同的测试来检查范围A1:A10。结果是单元格的格式被检查并连续更改。要让宏检查一个不同的范围,只需在宏的开头附近更改分配给rng变量的地址即可。
此宏的一个缺点是,如果要检查的范围很大,它可能会变慢。如果您正在检查A1:A10(十个单元格),它将非常快,但是如果您继续检查B2:N465(超过6,000个单元格),它可能会变慢得多。在这种情况下,您可能需要设计宏,以便它在工作表更改时运行,但仅在对目标范围内的单元格进行更改后才执行操作。以下版本也已添加到工作表对象:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCell As Range If Union(Target, Range("A1:A10")).Address = _ Range("A1:A10").Address Then Application.EnableEvents = False For Each rCell In Target If Len(rCell.Text) > 2 Or _ Val(rCell.Value) > 10 Then rCell.Font.Name = "Arial" rCell.Font.Size = 16 Else rCell.Font.Name = "Times New Roman" rCell.Font.Size = 12 End If Next Application.EnableEvents = True End If End Sub
宏使用联合函数检查更改的单元格(传递给Target变量中的事件处理程序)是否与要检查的范围有任何重叠。如果是这样,那么将对目标范围内的单元格进行检查。
影响宏格式的宏要记住的一件事是,如果将条件格式应用到也由宏检查的单元格,则条件格式中的格式优先于宏中的格式。如果您的宏正在更改字体名称和字体大小,则不必担心,因为条件格式不会影响这些属性。但是,如果您更改宏以同时更改其他格式属性(例如单元格颜色),并且该属性也被条件格式更改,则看起来该宏没有做任何事情,因为Excel优先使用条件格式宏的作用。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2380)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: