Excel VBA-迭代所有行并高亮显示相同特定字符内的所有行
我有一个excel文件,看起来像这样(用实际数据替换A和Z): 我需要能够遍历所有n行并突出显示“==”分隔符中包含的所有行。这意味着我需要能够突出显示以下几行:1-7、13-22和28-33。(即,分隔符的每个“奇数”实例是开始,每个“偶数”实例是结束) 我正在考虑设置一个标志变量,当遇到第一个delimter时将其打开,然后在下一个delimter时将其再次关闭,然后再次打开,等等,但我无法正确切换它Excel VBA-迭代所有行并高亮显示相同特定字符内的所有行,vba,excel,loops,iteration,Vba,Excel,Loops,Iteration,我有一个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和我的进展不太对劲,你应该考虑使用条件格式化。