【问题标题】:How to Highlight all the zeros in the table with vba如何使用 vba 突出显示表格中的所有零
【发布时间】:2018-09-11 01:41:29
【问题描述】:

我有一个有标题的表,第一列有学生姓名。表格的其余部分是学生成绩。

到目前为止,我需要突出显示所有带有零的单元格,这就是我得到的

Sub HighLightZeros()
Dim region As Range
Set region = ActiveSheet.Range("a1").End(xlDown)

If region.Value = 0 Then

region.Interior.Color = vbYellow
Else
region.Interior.ColorIndex = xlColorIndexNone
End If

End Sub

我还必须制作宏,这样当我在表格末尾添加更多分数时,它仍然会突出显示所有零值。我无法弄清楚如何选择整个表格。

【问题讨论】:

  • 您考虑过使用条件格式吗?
  • 我只能使用 vba 来解决这个问题
  • 虽然我了解教育背景,但编码的一项技能是学习何时不编码。技术上正确的回答是 - 应用程序已内置功能来完成这项工作,最有效的方法是使用该功能。

标签: vba


【解决方案1】:

你可以关注

Sub HighLightZeros()
    With ActiveSheet.UsedRange
        With .Resize(, .Columns.Count - 1).Offset(, 1) 'reference all "used" cells except column A ones
            .Interior.ColorIndex = xlColorIndexNone ' uncolor referenced range
            .Replace what:=0, lookat:=xlWhole, replacement:="XXX" ' replace 0's with "XXX"
            .SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues).Interior.Color = vbYellow ' color referenced range cells with text content in yellow
            .Replace what:="XXX", lookat:=xlWhole, replacement:=0 ' replace "XXX"'s with 0
        End With
    End With
End Sub

试图从问题中的骨架构建一些工作代码,它可能是

Sub HighLightZeros2()
    Dim region As Range, cell As Range
    Set region = Range("a1", Range("A1").End(xlDown))

    For Each cell In region
        If cell.Value = 0 Then
            cell.Interior.Color = vbYellow
        Else
            cell.Interior.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

但它只会扫描第一列单元格

【讨论】:

  • 哇,这很有效,但我仍在做 vba 的初学者课程,还没有做过类似的事情。如果您可以查看我的代码并让我知道我可以进行哪些更改以获得相同的结果,那就太好了。
  • 完成,必须有一种更简单的方法来执行此操作,而不是将数字更改为突出显示文本单元格的文本,然后将文本更改为数字。我们可以使用 if 语句得到相同的结果吗?
  • 查看已编辑的代码,我在其中添加了从您的代码构建的代码。但它只会扫描A列单元格。因此,您可能需要对其进行调整以满足您的需求。还有一件事:简单并不总是代表高效......
  • 嗯,我知道你在那里做了什么,我想我知道如何选择整个列范围。让我试试这个并回复你,然后我会发布结果。再次感谢
  • 好的,所以我让它在其他列上工作,方法是 'Sub HighLightZeros() Dim region As Range, cell As Range Set region = Range("B2:N502", Range("B2 :N502").End(xlDown)) For Each cell In region If cell.Value = 0 Then cell.Interior.Color = vbYellow Else cell.Interior.ColorIndex = xlColorIndexNone End If Next End Sub'
【解决方案2】:

这比@DisplayName 的方法效率低,但却是另一种方式。假设表是一个实际的表(List 对象。使用 Ctrl + T 创建)

Option Explicit

Sub HighlightZeroes()

    Dim table As ListObject
    Dim currentCell As Range

    Set table = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1") 'change as required

    For Each currentCell In table.DataBodyRange

         With currentCell

            .Interior.ColorIndex = xlColorIndexNone
            If .Value = 0 Then .Interior.Color = vbYellow

         End With

    Next currentCell

End Sub

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 2014-10-18
    • 2014-02-11
    • 2010-09-08
    • 1970-01-01
    • 2013-04-03
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多