【问题标题】:Search only rows within a color index仅搜索颜色索引中的行
【发布时间】:2016-09-28 02:49:26
【问题描述】:

我是 VBA 的新手(有点),我被分配了一项繁琐的任务,即根据单元格值搜索 5000 多行以突出显示行(从 A 到 j,colorindex=6),这让我很费时间。基本上我正在尝试开发一个程序来搜索列 C 下的字符串,如果单元格等于搜索的字符串,然后从活动单元格偏移到下面的 4 行,并且对于任何大于 37 的数字,当它找到一个时停止索引颜色为 33 的连续单元格。有什么想法吗?我开始了,现在卡住了。任何想法都会有所帮助。谢谢

Sub Priority()

'Declaring all worksheets in the excel file
Dim US As Worksheet
Dim Venr50 As Worksheet
Dim Priority As Worksheet
Dim CBT As String

'setting all variables declared
Set US = Worksheets("US CKS")
Set Venr = Worksheets("VENR50 US 09.24")
Set Priority = Worksheets("Priority")

CBT = Priority.Range("$C$6").Value

With US

Dim x As Long

For x = 4 To 3000

If Cells(x, "C").Value = CBT Then

ActiveCell.Interior.ColorIndex = 33
ActiveCell.Offset(4, 0).Select

End If

【问题讨论】:

  • 当你找到 CBT 时,你想给它上色 33,然后偏移 4 行?那么您是否希望循环检查 CBT 是否从该偏移行开始?如果是这样,您应该增加 x。您还需要 End If 之后的 Next x 来完成您的 for 外观。
  • 我希望它找到已经是 colorindex 33 的 CBT(在 C 范围内),然后开始搜索其下方四行大于 37 的数字(仍在 C 范围内)并将其突出显示为 colorindex 6 (从 A 到 J),直到遇到一个单元格 colorindex = 33。然后停止。

标签: vba excel macros


【解决方案1】:

您可以在 For 循环中执行另一个循环,如下所示:

Dim x As Long
Dim j as integer

For x = 4 To 3000

If Cells(x, "C").Value = CBT Then

    For j=1 to 4
        If Cells(x+j,"C").Value>37 then Cells(x+j,"C").ColorIndex = 6
        If Cells(x+j,"C").Interior.ColorIndex = 33 then exit sub
    Next j

End If

If Cells(x+j,"C").Interior.ColorIndex = 33 Then Exit Sub

Next x

编辑: 要更改多行的颜色索引,您可以使用:

Range(Cells(x+j,"A"),Cells(x+j,"J")).Interior.ColorIndex = 6

【讨论】:

  • 谢谢!我想知道为什么在 for 和 next j 语句之间,你没有包括 end if 的?我以为你总是必须包括它们。
  • 当你的If语句只有一个动作时,你可以把它放在then关键字后面的同一行。否则,如果您在 if 语句中有多件事情要做,您会将它们放在额外​​的行上并包含和 End If。您仍然可以使用 End If 将它们放在单独的行中,以提高您自己的可读性。
  • 有没有办法突出显示从 a 到 J 的颜色索引 6 而不是那个单元格?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多