如何查找和格式化具有特定范围内文本的单元格?



我正在尝试搜索一列并对该列中带有文本的所有单元格执行某些操作,跳过空白单元格。

具体来说
- 如果单元格在同一行中有 G 列中的文本,则移动单元格后 4 列。
- 将文本格式设置为居中/粗体/Arial 10.
- 更改我移动的文本同一行中 A-F 列中单元格的颜色。

我可以使用下面的 VBA 为一个单元格执行此操作,但我想将其作为该列中所有单元格的循环。

Sub back_5_format()
Application.CutCopyMode = False
Selection.Copy
ActiveCell.Offset(0, -5).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 5).Range("A1").Select
Application.CutCopyMode = False
Selection.ClearContents

' Format Cells Orange
ActiveCell.Offset(0, -6).Range("A1:F1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With

' Format Cell Font, Size and Bold

ActiveCell.Offset(0, 1).Range("A1").Select

With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With

With Selection.Font
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With

Selection.Font.Bold = True
End Sub

您可以按坐标对单元格进行寻址,也可以按名称对区域进行寻址。Cells(1, "A")是单元格,Range("A1")是范围。

您还可以通过单元格集合中的索引号对单元格进行寻址。您可以创建区域中单元格的集合,也可以创建工作表中所有单元格的集合。Worksheets("Sheet1").Cells(1, "A")地址Sheet1!A1. Range("A1:F1").Cells(1)地址 A1:F1 中的第一个单元格,碰巧也是 A1。但在 C12:E23 范围内,它将是 C12。

您可以选择任何范围,无论是一个单元格还是多个单元格。Cells(1, "A").Select选择 A1。Sheet1!A1. Range("A1:F1").Cells(1).Select只会产生相同的效果,因为 A1 是 Range("A1:F1"( 的第一个单元格。通过选择单元格或区域,该单元格或区域将成为Selection对象。下面的代码会将"选择">的地址打印到"即时"窗格中。Selection是一个范围。在这种情况下,地址为 $A$1。

Cells(1, "A").Select
Debug.Print Selection.Address          ' prints $A$1

当然,Cells(1, "A")是一个单元格,但您仍然可以询问其第一个单元格的地址。Cells(1, "A").Cells(1).Address将给出相同的结果。

选择单元格后,该单元格将成为ActiveCell。但一次只能有一个细胞处于活动状态。默认情况下,Excel将激活Selection范围的第一个单元格。在下面的示例中,A1 默认是活动单元格。

Worksheets("Sheet1").Range("A1:F1").Select
Debug.Print ActiveCell.Address        ' prints $A$1
Selection.Cells(2).Activate
Debug.Print ActiveCell.Address        ' prints $B$1

最后,是的。您可以按单元格区域的坐标(行和列(指定单元格区域中的单元格。Range("A1:C10").Cells(1, 1)Range("A1:C10").Cells(1)或A1相同,但Range("A1:C10").Cells(2, 1)Range("A1:C10").Cells(2)不同。后者将返回$B 1美元,前者将返回$A 2美元。这个游戏可以扩展为指定Range("A1:C10").Range("A1")但这里的"A1"仅指定 Cells(1, 1(,与工作表坐标的任何相似之处纯属巧合,因为它是范围 A1:C10 被划分为单元格而不是整个工作表。

现在,如果你对ActiveCell.Offset(0, -5).Range("A1")进行逆向工程,你必须首先说你不知道哪个细胞是活跃的。但是从任何地方开始,您都会向下数 0 行和向左数 5 列,然后从您将拥有的范围的第一行中取出第一个单元格。当然,那个细胞是ActiveCell.Offset(0, -5).由于 ActiveCell 始终只是一个单元格,因此生成的偏移范围也必须是单个单元格,并且单个单元格的第一行的第一个单元格是同一个单元格。

但是,您无需选择它。一旦你知道你在说哪个单元格,你就可以从中读取或写入它。因此,您还可以检查它是否包含任何内容。下面的代码可以做到这一点。

If ActiveCell.Offset(0, -5).Value = "" Then
Debug.Print "The cell is empty"
Else If ActiveCell.Offset(0, -5).Value = "Hello" Then
Debug.Print "The cell contains 'Hello'"
End If

当然,正如你现在知道的,没有人会使用该代码,因为没有人会想要检查他不知道它在哪里的单元格的内容。任何程序员也不会选择一个范围来使用其Selection对象。在 Excel 中,Range对象比Select对象更强大。您需要知道范围才能定义选择:那为什么不立即使用范围呢?下面是一个示例。

With Range("A1:F1").Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With

我找到了非常简单的代码,这是最重要的。用文本引用单元格。 这是带有消息框的简单代码。

Sub Reference_Cell_if_Contains_Text()
If ActiveCell.Value > 0 Then
Msgbox("This Cell Has Something in it!")
End If
End Sub

现在我需要学习如何创建一个循环,以便在整个列中向下移动。

我能够使用 For Each/Next 参数编写代码。这是代码:

Sub Format_Cells_if_contains_text_in_range()

Dim Cell As Range
For Each Cell In Range("G1:G200")
If Cell.Value > 0 Then
Cell.Select
Application.CutCopyMode = False
Selection.Copy
ActiveCell.Offset(0, -5).Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 5).Range("A1").Select
Application.CutCopyMode = False
Selection.ClearContents
' Format Cells Orange
ActiveCell.Offset(0, -6).Range("A1:F1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
.PatternTintAndShade = 0
End With
' Format Cell Font, Size and Bold
ActiveCell.Offset(0, 1).Range("A1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection.Font
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Selection.Font.Bold = True
End If
Next Cell
End Sub

最新更新