【问题标题】:Find the Row of a String Value in a Column while Criteria are met in the same Row but the other Columns在同一行但其他列满足条件时,在列中查找字符串值的行
【发布时间】:2014-05-31 13:16:38
【问题描述】:

好的,我正在尝试从 Column 中查找值。这个Column 有大约600 个values。虽然找到例如“Lassie”的值并找到它在Cell A301 上不是问题,但它会产生一个问题,即我需要检查value Lassie 所在的Row(这里是301) 并搜索是否满足其他条件。

我需要这样的东西:

  • 如果CellA301 中的值是“Sales Revenue, Net”并且,
  • 如果CellK301 = Start_Period中的值
  • 如果CellL301 = End_Period中的值
  • 如果CellM301 = ""CellN301 = ""CellO301 = ""CellP301 = ""CellQ301 = "" 中的值

如果所有这些条件都满足我需要copyCellH301paste它在另一个Sheet

诀窍是我不能先搜索CellA301,如果它等于“Sales Revenue, Net”,请执行所有其他测试因为 A 列中有许多单元格用字符串值“Sales Revenue, Net”填充,只有完全满足上述条件的那个才是正确的。

编辑

Sub wussss()

''disable autofilter in case it's already enabled'
ThisWorkbook.Sheets("31_December_2010").AutoFilterMode = False

With ThisWorkbook.Sheets("31_December_2010").Range("A1:AZ1")
    'set autofilter'
    .AutoFilter Field:=1, Criteria1:="Sales Revenue, Net"
    .AutoFilter Field:=11, Criteria1:="1/1/2010"
    .AutoFilter Field:=12, Criteria1:="12/31/2010" 'x
    .AutoFilter Field:=13, Criteria1:=""
    .AutoFilter Field:=14, Criteria1:=""
    .AutoFilter Field:=15, Criteria1:="" 'X  IT FAILS HERE
    .AutoFilter Field:=16, Criteria1:=""
    .AutoFilter Field:=17, Criteria1:=""
    .AutoFilter Field:=18, Criteria1:=""
    .AutoFilter Field:=19, Criteria1:=""
    .AutoFilter Field:=20, Criteria1:=""
    .AutoFilter Field:=21, Criteria1:=""
    .AutoFilter Field:=22, Criteria1:=""
    .AutoFilter Field:=23, Criteria1:=""
    .AutoFilter Field:=24, Criteria1:=""
    .AutoFilter Field:=25, Criteria1:=""
    .AutoFilter Field:=26, Criteria1:=""
    .AutoFilter Field:=27, Criteria1:=""
    .AutoFilter Field:=28, Criteria1:=""
    .AutoFilter Field:=29, Criteria1:=""
    .AutoFilter Field:=30, Criteria1:=""

End With

With ThisWorkbook.Sheets("Sheet1")
    On Error Resume Next
    Set Rng = .Range("A2:A" & .Rows.Count).Rows.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
End With
If Not Rng Is Nothing Then
   MsgBox Rng.Row ' returns first visible row number
End If

ThisWorkbook.Sheets("Sheet1").AutoFilterMode = False 'disable autofilter'
End Sub

【问题讨论】:

  • 这可能会有所帮助:Searching over multiple columns in excel vba。另一种方法 - 添加带有公式的附加列:=AND(A1="Sales Revenue, Net",K1="something",L1="something else",..) 并找到此公式返回的行 True
  • i want to search with this way over 80 times - 我会用公式创建额外的列(可能通过 vba)=AND(A1="Sales Revenue, Net",K1="something",L1="something else",..) 并找到带有TRUE 结果的行
  • 你在工作表上合并了单元格吗?
  • 我去看看,我觉得你真的搞定了~
  • 我想通了。 Autofiler 仅适用于工作表的“使用过的部分”。所以,在With ThisWorkbook.Sheets("31_December_2010").Range("A1:AZ1") 之后添加.Value = .Value 行(使A1:AZ1 成为工作表的一部分)。顺便说一句,在您的代码中不要忘记将 Sheet1 更改为 31_December_2010

标签: vba excel copy paste


【解决方案1】:

作为 cmets 的跟进,此代码有效:

Sub test()
    Dim i As Byte
    Dim rng As Range

    With ThisWorkbook.Sheets("31_December_2010")
        'disable autofilter in case it's already enabled'
        .AutoFilterMode = False
        With .Range("A1:AZ1")
            .Value = .Value
            'set autofilter'
            .AutoFilter Field:=1, Criteria1:="Sales Revenue, Net"
            .AutoFilter Field:=11, Criteria1:="1/1/2010"
            .AutoFilter Field:=12, Criteria1:="12/31/2010" 'x
            For i = 13 To 30
                .AutoFilter Field:=i, Criteria1:=""
            Next i
        End With

        On Error Resume Next
        Set rng = .Range("A2:A" & .Rows.Count).Rows.SpecialCells(xlCellTypeVisible)
        On Error GoTo 0

        If Not rng Is Nothing Then MsgBox rng.Row ' returns first visible row number

        .AutoFilterMode = False 'disable autofilter'
    End With
End Sub

还有一点注意:

您只能将AutoFilter 应用于工作表的已使用部分。例如。如果UsedRange 的最后一列是M,则在.Range("A1:AZ1").Autofilter 行中,Excel 仅对A1:M1 应用过滤器。但是上面代码的.Value = .Value 部分,明确地将A1:AZ1 添加到工作表的使用部分。

【讨论】:

  • 我明天会更好地编辑我的问题!现在是喝一杯的时候了。我给你喝一个!
猜你喜欢
  • 2022-11-15
  • 2021-05-12
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2021-02-27
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多