【发布时间】: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 = ""中的值
如果所有这些条件都满足我需要copyCellH301和paste它在另一个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