Excel VBA-迭代所有行并高亮显示相同特定字符内的所有行

Excel VBA-迭代所有行并高亮显示相同特定字符内的所有行,vba,excel,loops,iteration,Vba,Excel,Loops,Iteration,我有一个excel文件,看起来像这样(用实际数据替换A和Z): 我需要能够遍历所有n行并突出显示“==”分隔符中包含的所有行。这意味着我需要能够突出显示以下几行:1-7、13-22和28-33。(即,分隔符的每个“奇数”实例是开始,每个“偶数”实例是结束) 我正在考虑设置一个标志变量,当遇到第一个delimter时将其打开,然后在下一个delimter时将其再次关闭,然后再次打开,等等,但我无法正确切换它 任何人都可以分享一些代码片段来突出显示必要的行吗?有几种方法可以实现这一点。其中之一是:

我有一个excel文件,看起来像这样(用实际数据替换A和Z):

我需要能够遍历所有n行并突出显示“==”分隔符中包含的所有行。这意味着我需要能够突出显示以下几行:1-7、13-22和28-33。(即,分隔符的每个“奇数”实例是开始,每个“偶数”实例是结束)

我正在考虑设置一个标志变量,当遇到第一个delimter时将其打开,然后在下一个delimter时将其再次关闭,然后再次打开,等等,但我无法正确切换它


任何人都可以分享一些代码片段来突出显示必要的行吗?

有几种方法可以实现这一点。其中之一是:

Option Explicit 'force variable declaring

Sub MarkSomeData()
Dim iCounter As Integer
Dim iStart As Integer, iEnd As Integer
Dim wsh As Worksheet

'working sheet
Set wsh = ThisWorkbook.Worksheets(1)

iCounter = 1
Do While wsh.Range("A" & iCounter) <> ""
    If wsh.Range("A" & iCounter) = "===" Then
        If iStart = 0 Then iStart = iCounter
        If iEnd <= iStart Then iEnd = iCounter
        If iEnd > iStart Then
            wsh.Range("A" & iStart & ":A" & iEnd).Font.Color = vbRed
            iStart = 0
            iEnd = 0
        End If
    End If
    iCounter = iCounter + 1
Loop

Set wsh = Nothing

End Sub
Option Explicit“强制变量声明
子标记somedata()
作为整数的Dim I计数器
Dim iStart为整数,iEnd为整数
将wsh设置为工作表
“工作表
设置wsh=This工作簿。工作表(1)
i计数器=1
执行While wsh.Range(“A”&i计数器)”
如果wsh.Range(“A”&i计数器)=“则
如果iStart=0,则iStart=i计数器
如果我是伊恩德,那么
wsh.Range(“A”&iStart&“:A”&iEnd).Font.Color=vbRed
iStart=0
iEnd=0
如果结束
如果结束
i计数器=i计数器+1
环
设置wsh=Nothing
端接头
您可以根据自己的需要随意更改代码


祝你好运

有几种方法可以实现这一点。其中之一是:

Option Explicit 'force variable declaring

Sub MarkSomeData()
Dim iCounter As Integer
Dim iStart As Integer, iEnd As Integer
Dim wsh As Worksheet

'working sheet
Set wsh = ThisWorkbook.Worksheets(1)

iCounter = 1
Do While wsh.Range("A" & iCounter) <> ""
    If wsh.Range("A" & iCounter) = "===" Then
        If iStart = 0 Then iStart = iCounter
        If iEnd <= iStart Then iEnd = iCounter
        If iEnd > iStart Then
            wsh.Range("A" & iStart & ":A" & iEnd).Font.Color = vbRed
            iStart = 0
            iEnd = 0
        End If
    End If
    iCounter = iCounter + 1
Loop

Set wsh = Nothing

End Sub
Option Explicit“强制变量声明
子标记somedata()
作为整数的Dim I计数器
Dim iStart为整数,iEnd为整数
将wsh设置为工作表
“工作表
设置wsh=This工作簿。工作表(1)
i计数器=1
执行While wsh.Range(“A”&i计数器)”
如果wsh.Range(“A”&i计数器)=“则
如果iStart=0,则iStart=i计数器
如果我是伊恩德,那么
wsh.Range(“A”&iStart&“:A”&iEnd).Font.Color=vbRed
iStart=0
iEnd=0
如果结束
如果结束
i计数器=i计数器+1
环
设置wsh=Nothing
端接头
您可以根据自己的需要随意更改代码


祝你好运

请尝试此代码。注意,如果有列标题,可以指定要处理的列和要搜索分隔符的第一行

Sub GroupData()
    ' 07 Nov 2017

    Const SearchColumn As String = "B"          ' change as appropriate
    Const FirstRow As Long = 1                  ' change as appropriate

    Dim Rl As Long                              ' last row
    Dim Rmark As Long
    Dim Counter As Integer
    Dim Rstart As Long

    With ActiveSheet
        Rl = .Cells(.Rows.Count, SearchColumn).End(xlUp).Row
        Rmark = FindRow(Range(Cells(FirstRow, SearchColumn), Cells(Rl, SearchColumn)))
        Do While Rmark
            Counter = Counter + 1
            If Counter Mod 2 Then
                Rstart = Rmark + 1
            Else
                .Range(.Cells(Rstart, SearchColumn), _
                       .Cells(Rmark - 1, SearchColumn)).Interior.Color = vbYellow
            End If
            Rmark = FindRow(Range(Cells(Rmark + 1, SearchColumn), Cells(Rl, SearchColumn)))
        Loop
    End With
End Sub

Function FindRow(Rng As Range) As Long
    ' 06 Nov 2017
    ' return 0 if not found

    Dim Fnd As Range

    With Rng
        Set Fnd = .Find(What:="===", _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False, _
                        MatchByte:=False)
    End With
    If Not Fnd Is Nothing Then FindRow = Fnd.Row
End Function

请尝试此代码。注意,如果有列标题,可以指定要处理的列和要搜索分隔符的第一行

Sub GroupData()
    ' 07 Nov 2017

    Const SearchColumn As String = "B"          ' change as appropriate
    Const FirstRow As Long = 1                  ' change as appropriate

    Dim Rl As Long                              ' last row
    Dim Rmark As Long
    Dim Counter As Integer
    Dim Rstart As Long

    With ActiveSheet
        Rl = .Cells(.Rows.Count, SearchColumn).End(xlUp).Row
        Rmark = FindRow(Range(Cells(FirstRow, SearchColumn), Cells(Rl, SearchColumn)))
        Do While Rmark
            Counter = Counter + 1
            If Counter Mod 2 Then
                Rstart = Rmark + 1
            Else
                .Range(.Cells(Rstart, SearchColumn), _
                       .Cells(Rmark - 1, SearchColumn)).Interior.Color = vbYellow
            End If
            Rmark = FindRow(Range(Cells(Rmark + 1, SearchColumn), Cells(Rl, SearchColumn)))
        Loop
    End With
End Sub

Function FindRow(Rng As Range) As Long
    ' 06 Nov 2017
    ' return 0 if not found

    Dim Fnd As Range

    With Rng
        Set Fnd = .Find(What:="===", _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False, _
                        MatchByte:=False)
    End With
    If Not Fnd Is Nothing Then FindRow = Fnd.Row
End Function

现在告诉我们你尝试了什么……MACIEJ洛斯-不幸的是,我已经删除了我的试用代码,因为这是我第一次与VBA,我对我的进展感到不安。你应该考虑使用条件格式化。告诉我们你尝试了什么……MACIEJ洛斯-不幸的是,我已经删除了我的试用码,因为这是我第一次和VBA和我的进展不太对劲,你应该考虑使用条件格式化。