使用 VBA 过滤另一列后,如果满足条件,则更新列中的单元格

问题描述 投票:0回答:1

我正在尝试编写代码来将“A”列中的数据过滤为仅“ZSFG”和“ZCNC”值。满足此条件后,我需要更新“C”列,以确保所有单元格都有“X”并突出显示已更新的值

数据:

Data

Sub Macro1()

    Selection.AutoFilter
    ActiveSheet.Range("$A$2:$C$999999").AutoFilter Field:=1, Criteria1:=Array( _
        "ZCNC", "ZSFG"), Operator:=xlFilterValues
    ActiveSheet.Range("$A$2:$C$999999").AutoFilter Field:=3, Criteria1:="="

   
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
     Selection.SpecialCells(xlCellTypeVisible).Offset(, 5).Value = "X"
    ActiveSheet.ShowAllData
End Sub

我已经尝试过这段代码,但我没有得到我想要的东西。

注意:这是一个很大的数据集,行数永远不会相同。

有人可以帮助我吗?

谢谢!

我尝试运行上面的代码以及其他一些代码。我已经能够突出显示空的单元格,但是当我再次运行代码时,突出显示的单元格会发生变化。另外,使用此代码,单元格不会被 X 填充

excel vba excel-2010
1个回答
0
投票

试试这个代码:

Sub Macro1()

Dim rg As Range
Set rg = ActiveSheet.Range("A1").CurrentRegion

With rg
    .AutoFilter Field:=1, Criteria1:=Array( _
        "ZCNC", "ZSFG"), Operator:=xlFilterValues
    .AutoFilter Field:=3, Criteria1:="="
    
    With .Columns(3).Offset(1).Resize(.Rows.Count - 1)
        With .SpecialCells(xlCellTypeVisible)
            .Value = "x"
            With .Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        End With
    End With

    .Parent.ShowAllData
End With
End Sub

首先我不会依赖

selection
。如果您的桌子是干净的,您可以使用
CurrentRegion
设置要处理的范围。

您可以使用

SpecialCells
,但您必须事先“准备”基本范围。

顺便说一句:您也可以通过公式和条件格式来实现所有这些。

© www.soinside.com 2019 - 2024. All rights reserved.