首页 > 解决方案 > 双“根据列中的值选择行”

问题描述

我需要根据“C”列中的标准 value="REZ" 选择整行。

Dim c As Range
Dim rngG As Range
 
For Each c In Intersect(ActiveSheet.UsedRange, Columns("C"))
 
    If c = "REZ" Then
        If rngG Is Nothing Then Set rngG = c.EntireRow
        Set rngG = Union(rngG, c.EntireRow)
    End If
 
Next c
rngG.Select

每个选定的行在“J”列中都有一些值。

我现在需要另外选择包含从第一步获得的值的所有整行。

更好地解释的图像:
首先在“C”列中获取带有“REZ”的行
https://i.stack.imgur.com/uwHzT.png

现在我们知道列“J”中的行值,在这种情况下是“27.2.12”。
因此,现在除了我们选择的内容之外,我们还需要选择所有包含“27.2.12”的行,这总是在步骤 1 中找到并选择的行之后直接有一些行,并且永远不会与列中的每个值完全匹配“ J”是独一无二的。

在这种情况下,它将是:
在此处输入图像描述

我想象两个 IF 函数,其中第二个函数从第一个函数的结果中获取信息。

工作簿示例:https ://easyupload.io/yewg9o

我用黄色突出显示了在步骤 1 中选择的“REZ”行,我希望根据步骤 1 选择的单元格用绿色突出显示。

标签: excelvbaif-statement

解决方案


试试这个:

Sub Tester()

    Dim c As Range, ws As Worksheet
    Dim rngG As Range, lastJ, rngJ As Range
    
    Set ws = ActiveSheet

    For Each c In Intersect(ws.UsedRange, ws.Columns("C"))
        Set rngJ = c.EntireRow.Columns("J")
        If c = "REZ" Then
            AddRange rngG, c.EntireRow
            lastJ = rngJ.Value   'remember the J value
        Else
            'not REZ, but see if we're to check for matching J values
            If Len(lastJ) > 0 Then
                If rngJ.Value Like lastJ & "*" Then
                    AddRange rngG, c.EntireRow
                Else
                    lastJ = "" 'stop checking on first non-match
                End If
            End If
        End If
    Next c
    rngG.Select
End Sub

'Utility sub for building up a range
Sub AddRange(rngTot As Range, rngAdd As Range)
    If rngTot Is Nothing Then
        Set rngTot = rngAdd
    Else
        Set rngTot = Application.Union(rngTot, rngAdd)
    End If
End Sub

推荐阅读