Excel 循环遍历单元格并更改字体
我正在尝试循环一行中的所有单元格,并使用以下条件更改字体大小:Excel 循环遍历单元格并更改字体,excel,vba,fonts,size,Excel,Vba,Fonts,Size,我正在尝试循环一行中的所有单元格,并使用以下条件更改字体大小: 如果字体大小小于10,则将字体大小更改为10 如果工作表中的所有单元格的字体大小相同,则此操作有效。如果工作表中的任何单元格具有不同的字体大小,则返回null。如果A1中的字体大小为8,A2中的字体大小为20,则没有变化 Sub SetSheetFont(ws As Worksheet) Dim x As Integer Dim NumRows As Long Application.ScreenUpda
- 如果字体大小小于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
子设置表字体(ws-As工作表)
作为整数的Dim x
暗淡的珠子长得一样
Application.ScreenUpdating=False
NumRows=Range(“A1”,Range(“A1”).End(xlDown)).Rows.Count
范围(“A1”)。选择
与ws
'如果字体大小小于10,则设置为10
对于x=1到NumRows
如果.Cells.Font.Size<10,则.Cells.Font.Size=10
ActiveCell.Offset(1,0)。选择
下一个
Application.ScreenUpdating=True
以
端接头
最终目标是循环遍历列中的所有单元格,直到有一定数量的空单元格,然后从下一列开始(在本例中为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
子设置表字体(ws-As工作表)
暗淡的迈塞尔山脉
Application.ScreenUpdating=False
与ws
对于ws.UsedRange中的每个myCell
'如果字体大小小于10,则设置为10
如果myCell.Font.Size<10,则myCell.Font.Size=10
下一个
以
Application.ScreenUpdating=True
端接头
旁注:一般来说,您希望在代码中保留您的代码,如注释所示,您希望访问每个单元格(而不是所有单元格,这是
.cells.
所做的:
For x = 1 To NumRows
If .Cells(x,1).Font.Size < 10 Then .Cells(x,1).Font.Size = 10
Next
编辑:为了确保,
xlDown
可以工作,只需注意它将在第一个空单元格处停止。像我那样使用xlUp
,将确保获得列A中的所有行……这可能是您想要的,也可能不是您想要的。根据我的评论,我认为这可能是FindFormat
和ReplaceFormat
的一个很好的用例:
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
根据您的描述,您可能希望将其更改为
ws.UsedRange
,如@controlnetic.nomad所述。因此,它将显示为:ws.UsedRange.Replace…
,这可能是FindFormat
和ReplaceFormat
的一个很好的用例。但不确定。而且您的循环并没有真正改变每次迭代。每次都检查相同的单元格(整个工作表的单元格)。如果要检查A列中的单元格,请将.cells.
更改为.cells(x,1).
然后它将循环遍历从第1行到numRows
的所有单元格,检查A列中的单元格。xlDown
可能是故意的,因为OP提到“循环遍历列中的所有单元格,直到有一定数量的空单元格”。我想OP的结尾有点不清楚。尽管如此,一个可靠的答案:)@JvdV-同意xlDown
,我试图在我的回答中注意到这一点,但我将进行编辑以澄清。作为附加选项,OP可以使用ws.Range(“A1:C1000”)。替换…
。我个人对使用UsedRange
总是犹豫不决,因为它不一定能达到您所期望的使用范围。和.Cells.
,当然,它对所有单元格都有效。只是想显示使用特定范围的选项。:)
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