VBA การใช้ AdvancedFilter ครับ
Posted: Sat Feb 13, 2016 5:13 pm
สวัสดีอาจารย์และเพื่อนๆ ครับ
ผมพยายามจะเขียนโค้ดกรองข้อมูลดิบจากชีท temp2 เอามาไว้ใน temp3 โดยมีเกณฑ์ที่ต้องการกรองคือ
1. ระหว่างวันที่ที่กำหนด (วันที่ในคอลัมน์ A) ค่าวันที่กำหนดไว้ในโค้ดครับ
2. DocType คอลัมน์ D เอาเฉพาะ SL และ CN
3. DocStat คอลัมน์ E ไม่เอา 0 และ 3
โดยกำหนดเกณฑ์ไว้แล้วในโค้ด บรรทัดที่ 11 ถึง 20 แต่ติดปัญหาคือ กรองแล้วไม่ได้อะไรเลยครับ ผมต้องกำหนดเกณฑ์อย่างไรครับ (ลองกำหนดเกณฑ์แค่วันที่อย่างเดียว กรองได้ แต่พอเพิ่ม DocType กับ DocStat เข้าไปด้วยก็ไม่ได้อะไรมาเลยครับ)
โค้ดอยู่ใน module1 ตามด้านล่างนี้ครับ
ผมพยายามจะเขียนโค้ดกรองข้อมูลดิบจากชีท temp2 เอามาไว้ใน temp3 โดยมีเกณฑ์ที่ต้องการกรองคือ
1. ระหว่างวันที่ที่กำหนด (วันที่ในคอลัมน์ A) ค่าวันที่กำหนดไว้ในโค้ดครับ
2. DocType คอลัมน์ D เอาเฉพาะ SL และ CN
3. DocStat คอลัมน์ E ไม่เอา 0 และ 3
โดยกำหนดเกณฑ์ไว้แล้วในโค้ด บรรทัดที่ 11 ถึง 20 แต่ติดปัญหาคือ กรองแล้วไม่ได้อะไรเลยครับ ผมต้องกำหนดเกณฑ์อย่างไรครับ (ลองกำหนดเกณฑ์แค่วันที่อย่างเดียว กรองได้ แต่พอเพิ่ม DocType กับ DocStat เข้าไปด้วยก็ไม่ได้อะไรมาเลยครับ)
โค้ดอยู่ใน module1 ตามด้านล่างนี้ครับ
Code: Select all
Public Sub NetSale()
Dim dDay1#, dDay2#, lRow&
dDay1 = CDbl(DateSerial(2016, 2, 3))
dDay2 = CDbl(DateSerial(2016, 2, 10)) + 0.99991
'collect source data
With ThisWorkbook
.Sheets(3).Activate
.Sheets(3).Cells.Clear
.Sheets(3).Range("a1:b1") = .Sheets(2).Range("a1")
.Sheets(3).Range("c1:d1") = .Sheets(2).Range("d1")
.Sheets(3).Range("e1:f1") = .Sheets(2).Range("e1")
With .Sheets(3)
.Range("a2") = ">=" & dDay1
.Range("b2") = "<=" & dDay2
.Range("c2") = "SL"
.Range("d2") = "CN"
.Range("e2") = "<>0"
.Range("f2") = "<>3"
End With
.Sheets(2).UsedRange.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=.Sheets(3).Range("a1:f2"), _
CopyToRange:=.Sheets(3).Range("a3"), Unique:=False
.Sheets(3).Rows("1:2").Delete shift:=xlUp
lRow = .Sheets(3).Range("a" & Rows.Count).End(xlUp).Row
'exit if not data found
If lRow = 1 Then
MsgBox "ไม่มีข้อมูลในช่วงวันที่ " & Format(dDay1, "d mmm yy") & _
" ถึง " & Format(dDay2, "d mmm yy"), vbExclamation, "Not Found"
GoTo suddenEnd
End If
End With
suddenEnd:
End Sub