Page 1 of 1

VBA วิธีเอาตัวแปรวันที่ไปคำนวณใน Application.Sumifs ครับ

Posted: Sat Jan 23, 2016 8:15 pm
by DhitiBank
สวัสดีอาจารย์และเพื่อนๆ ครับ

ผมเจอปัญหาว่า เมื่อเอาวันที่เป็นเกณฑ์หนึ่งในสูตร Sumifs ที่เขียนด้วย VBA ผลลัพธ์จะหาไม่ได้ทุกครั้งไป ผมต้องกำหนดอะไรผิดแน่ๆ (เมื่อเอาตัวแปรวันที่ไปใช้ใน AdvancedFilter ก็เจอลักษณะเดียวกัน)

จากไฟล์แนบ ผมมีตารางข้อมูลในเซลล์ A1:D14 แสดงคะแนนของแต่ละคนในวันเวลาต่างๆ คือ
คอลัมน์ A --> วัน เวลา
คอลัมน์ B --> ชื่อ
คอลัมน์ C --> สถานะเอกสาร (0 คือยกเลิกครับ จะเอามารวมเฉพาะรายการที่มากกว่า 0)
คอลัมน์ D--> คะแนน

ที่เซลล์ G4 เขียนสูตร Sumifs และได้ผลรวมตามปกติ แต่เมื่อเอามาเขียน VBA โดยต้องใส่วันที่ในเซลล์ G3 โค้ดจึงจะทำงาน ปรากฏว่าไม่ได้ผลลัพธ์ตามต้องการครับ ผมต้องปรับโค้ดอย่างไรดี :?:

โค้ดอยู่ใน Sheet1 ครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, dDate As Date
    If Target.Address = "$G$3" Then
        With Me
            Set r = .Range("a2:a" & .Range("a" & .Rows.Count).End(xlUp).Row)
            dDate = Target.Value
            .Range("h4") = Application.SumIfs(r.Offset(0, 3), _
                r.Offset(0, 1), .Range("g2"), _
                r.Offset(0, 2), ">0", _
                r, "<=" & dDate)
        End With
    End If
End Sub
ผมลองเอา r, "<=" & dDate ออก ปรากฎว่าคำนวณได้ (แต่ก็ไม่ถูก เพราะมันต้องดูวันที่ด้วย) แต่พอเอาวันที่มาเป็นเกณฑ์ด้วย ได้คำตอบเป็น 0 ทันที งงจริงๆ ครับ

Re: VBA วิธีเอาตัวแปรวันที่ไปคำนวณใน Application.Sumifs ครับ

Posted: Sat Jan 23, 2016 8:31 pm
by snasui
:D เปลี่ยนตัวแปรที่ใช้แทนวันที่ให้เป็น Double ครับ

เช่น dDate As Double เพราะ Sumif, Sumifs, Countif, Countifs จะแปลงค่าของวัน เวลา รวมทั้งค่าที่สามารถแปลงเป็นตัวเลขไดให้เป็นตัวเลขเสียก่อนครับ

Re: VBA วิธีเอาตัวแปรวันที่ไปคำนวณใน Application.Sumifs ครับ

Posted: Sat Jan 23, 2016 8:35 pm
by DhitiBank
:o ขอบคุณอาจารย์มากครับ นั่งงงอยู่นานแล้ว กระจ่างเลย