สวัสดีอาจารย์และเพื่อนๆ ครับ
ผมพยายามจะเขียนโค้ดกรองข้อมูลดิบจากชีท 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