標題:
請問VBA尋找使用方法
[打印本頁]
作者:
ginbow
時間:
2012-5-26 00:00
標題:
請問VBA尋找使用方法
想請問一下 如何使用多重條件尋找 如附檔
條件式 A欄和B欄都符合 才把C蘭的直抓進來
這樣的話也可以用Vooklup 或是 find 嗎?
作者:
register313
時間:
2012-5-26 10:59
本帖最後由 register313 於 2012-5-26 14:05 編輯
回復
1#
ginbow
Sub xx()
Dim AR()
I = 1
For Each A In Range("A2:A" & [A2].End(xlDown).Row)
ReDim Preserve AR(1 To I)
If A = "2011/12/7" And A.Offset(0, 1) = 3 Then
AR(I) = A.Offset(0, 2)
I = I + 1
End If
Next
[E1].Resize(UBound(AR), 1) = Application.Transpose(AR)
End Sub
複製代碼
Sub bb()
Set Rng = Range("A1:C" & Range("A65536").End(xlUp).Row)
Rng.AutoFilter Field:=1, Criteria1:=DateValue("2011/12/7")
Rng.AutoFilter Field:=2, Criteria1:=3
Rng.Offset(0, 2).Resize(, 1).SpecialCells(xlCellTypeVisible).Copy [E1]
Rng.AutoFilter
End Sub
複製代碼
Sub cc()
[E:E] = ""
Set Rng = [A:A].Find(DateValue("2011/12/7"), , , xlWhole)
If Not Rng Is Nothing Then
S = Rng.Address
Do
If Rng.Offset(0, 1) = 3 Then [E65536].End(xlUp).Offset(1, 0) = Rng.Offset(0, 2)
Set Rng = [A:A].FindNext(Rng)
Loop While Not Rng Is Nothing And Rng.Address <> S
End If
End Sub
複製代碼
作者:
ginbow
時間:
2012-5-26 15:46
謝謝 我稍微改了一下 可是不知道為什麼抓不到
可以幫我看一下哪裡出錯嗎 謝謝
作者:
register313
時間:
2012-5-26 16:34
回復
3#
ginbow
Sub data()
nrow = Worksheets("sheet1").Range("A65536").End(xlUp).Row
With Worksheets("sheet2").Range("A1:D" & Worksheets("sheet2").Range("A65536").End(xlUp).Row)
For i = 2 To nrow
.AutoFilter Field:=1, Criteria1:=DateValue(Worksheets("sheet1").Cells(i, 1))
.AutoFilter Field:=2, Criteria1:=Worksheets("sheet1").Cells(i, 8)
.AutoFilter Field:=3, Criteria1:=Worksheets("sheet1").Cells(i, 3)
.AutoFilter Field:=4, Criteria1:="買權"
.Offset(1, 4).Resize(, 1).SpecialCells(xlCellTypeVisible).Copy Worksheets("選擇權資料").Cells(i, 1)
Next
.AutoFilter
End With
End Sub
複製代碼
作者:
ginbow
時間:
2012-5-26 23:49
回復
4#
register313
謝謝你已經修改成我要的格式了 想另外請問一下 我是用你所提出來的第二個方法 但怕資料量多時效率會比較慢
上面三種方法哪一種效率會比較快呢?
作者:
register313
時間:
2012-5-27 17:59
回復
5#
ginbow
Sub 字典()
t = Timer
Application.ScreenUpdating = False
Set d = CreateObject("scripting.dictionary")
With Worksheets("sheet1")
AR = .[A1].CurrentRegion
For i = 2 To UBound(AR)
d(AR(i, 1) & AR(i, 8) & AR(i, 3) & "買權") = ""
Next i
End With
With Worksheets("sheet2")
BR = .[A1].CurrentRegion
For i = 2 To UBound(BR)
If d.Exists(BR(i, 1) & BR(i, 2) & BR(i, 3) & BR(i, 4)) Then d(BR(i, 1) & BR(i, 2) & BR(i, 3) & BR(i, 4)) = BR(i, 5)
Next
End With
Worksheets("選擇權資料").[A2].Resize(d.Count, 1) = Application.Transpose(d.items)
Application.ScreenUpdating = True
MsgBox Timer - t & "秒"
End Sub
複製代碼
Sub 自動篩選()
t = Timer
Application.ScreenUpdating = False
nrow = Worksheets("sheet1").Range("A65536").End(xlUp).Row
With Worksheets("sheet2").Range("A1:D" & Worksheets("sheet2").Range("A65536").End(xlUp).Row)
For i = 2 To nrow
.AutoFilter Field:=1, Criteria1:=DateValue(Worksheets("sheet1").Cells(i, 1))
.AutoFilter Field:=2, Criteria1:=Worksheets("sheet1").Cells(i, 8)
.AutoFilter Field:=3, Criteria1:=Worksheets("sheet1").Cells(i, 3)
.AutoFilter Field:=4, Criteria1:="買權"
.Offset(1, 4).Resize(, 1).SpecialCells(xlCellTypeVisible).Copy Worksheets("選擇權資料").Cells(i, 1)
Next
.AutoFilter
End With
Application.ScreenUpdating = True
MsgBox Timer - t & "秒"
End Sub
複製代碼
作者:
ginbow
時間:
2012-6-7 00:16
回復
6#
register313
謝謝大大~
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)