循环浏览单元格并更改字体



我正在尝试循环遍历一行中的所有单元格并使用以下条件更改字体大小:

如果字体大小小于 10
  • ,则将字体大小更改为 10

如果工作表中的所有单元格的字体大小相同,则此方法有效。如果工作表中的任何单元格具有不同的字体大小,它将返回null。如果我在 A1 中的字体大小为 8,在 A2 中的大小为 20,则没有变化。

Sub SetSheetFont(ws As Worksheet)
Dim x As Integer
Dim NumRows As Long
Application.ScreenUpdating = False
NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
Range("A1").Select
With ws
' If the font size is lower than 10, set to 10
For x = 1 To NumRows
If .Cells.Font.Size < 10 Then .Cells.Font.Size = 10
ActiveCell.Offset(1, 0).Select
Next
Application.ScreenUpdating = True
End With
End Sub

最终目标是遍历列中的所有单元格,直到有一定数量的空单元格,然后从下一列(在本例中为 B1(开始。

我怎样才能至少在一列中完成此操作?我很确定如果我从那里开始,我可以让它工作。

您可以遍历UsedRange中的所有单元格

Sub SetSheetFont(ws As Worksheet)
Dim myCell As Range
Application.ScreenUpdating = False
With ws
For each myCell in ws.UsedRange
' If the font size is lower than 10, set to 10
If myCell.Font.Size < 10 Then myCell.Font.Size = 10
Next
End With
Application.ScreenUpdating = True
End Sub

旁注:通常,您希望避免在代码中使用 select

根据我的评论,我认为这可能是FindFormatReplaceFormat的一个很好的用例:

Dim x As Double
'Set ReplaceFormat just once
Application.ReplaceFormat.Clear
Application.ReplaceFormat.Font.Size = 10
'Set FindFormat in a For loop
For x = 1 To 9.5 Step 0.5
Application.FindFormat.Clear
Application.FindFormat.Font.Size = x
ws.Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
Next x

这可以防止对所有ws.Cells进行迭代。循环是必需的,因为我们不能设置类似的东西:Application.FindFormat.Font.Size < 10.而且由于Font.Size会自动调整(至少对我来说(到最接近的 0.5(1 是最小尺寸(,我们可以以 0.5 的步长从 1 步进到 9.5。

根据您的描述,您可能希望根据提到的 @cybernetic.nomad 将其更改为ws.UsedRange。所以它会读作:ws.UsedRange.Replace...

保留您的代码,如注释所示,您将希望访问每个单元格(而不是所有单元格,这就是.Cells.的作用:

For x = 1 To NumRows
If .Cells(x,1).Font.Size < 10 Then .Cells(x,1).Font.Size = 10
Next

这将遍历 A 列(.Cells(x,1)中的1(。

我还建议使用.End(xlUp)而不是xlDown,以防您的 A 列有一个空白行分隔数据。 如果没问题,那么你可以保留它...另一个选项是:NumRows = Range("A" & rows.count).End(xlUp).row(另外,将Long用于x

Sub SetSheetFont(ws As Worksheet)
Dim x As Long, NumRows as Long
Application.ScreenUpdating = False
With ws
NumRows = .Range("A" & rows.count).End(xlUp).Row
' If the font size is lower than 10, set to 10
For x = 1 To NumRows
If .Cells(x,1).Font.Size < 10 Then .Cells(x,1).Font.Size = 10
Next
Application.ScreenUpdating = True
End With
End Sub

编辑:可以肯定的是,xlDown会起作用,只需注意它将在第一个空单元格处停止。 像我一样使用xlUp肯定会获得 A列中的所有行......这可能是也可能不是您想要的。

最新更新