Page 2 of 2

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Fri May 24, 2013 6:11 pm
by snasui
yodpao.b wrote::oops: ทั้งอ่านทั้งทำตามแล้วยัง งง อยู่เลย ยอม
:?: อาจารย์ครับขอถามอะไรหน่อย
The attachment untitled11.GIF is no longer available
จากรูปด้านบน
ผมสงสัยว่า Combobox ที่วงไว้ทำไมเมื่อดลิ๊กแล้ว จึงมีข้อความขึ้น
ทั้งทั้งทีไม่เห็นมี Code เลย
:D ดูภาพประกอบด้านล่างครับ จะเห็นว่าที่ Properties จะเห็นว่ามีการนำ Range Name ที่ชื่อ COM มาแสดงตรง ListFillRange

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Fri May 24, 2013 6:49 pm
by yodpao.b
ขอบคุณครับ เข้าใจแล้วครับ
ต่อไปเวลาจะทำเดือน ผมก็ไม่ต้องให้มันไปมองหาใน excel แล้ว

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Fri May 24, 2013 10:45 pm
by natthaporn
ได้ผลลัพธ์ตามที่่ต้องการแล้วคะ ขอขอบคุณอาจารย์มากคะ ดิฉันพยายามทำความเข้าใจ code ที่อาจารย์แนะนำมา ก่อนอื่นต้องขอบอกก่อนเลยว่ายากมากเลยคะ ดิฉันขอสอบถามดังนี้คะ
1. chr(34) หมายความว่าอย่างไรคะ เพราะดิฉันไม่เห็นตัวแปรใน code ชื่อว่า "chr" เลยคะ ทำไมต้องเอา chr(34) มาเชื่อมกับ dim mth และ dim sh ด้วยคะ
2. chr(34) ใน code นี้ เหมือนหรือต่างกันกับ char(255) ในสูตร excel อย่างไรคะ
3. ดิฉั้นลองปรับ code เป็น

Code: Select all

Dim sh As String, mth As String, fml As String
    Application.Calculation = xlCalculationManual
    With ActiveSheet
        sh = .ComboBox2
        mth = .ComboBox1
        fml = "=SUMIFS(INDEX('" & sh & "'!$Z$3:,0," 'debug ไว้คะ
        'fml = fml & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$Z$2:$AK$2,0))," 'debug ไว้คะ
        fml = "=SUMIFS(INDEX('" & sh & "'!$Z$3:,0," & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$Z$2:$AK$2,0)),"
        fml = fml & "INDEX('" & sh & "'!$B$3:$M$27,0,"
        fml = fml & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$B$2:$M$2,0)),$B5,"
        fml = fml & "INDEX('" & sh & "'!$N$3:$Y$27,0,"
        fml = fml & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$N$2:$Y$2,0)),C$4)"
        .Range("C5").Formula = fml 'error ที่ row นี้คะ
        .Range("C5").Copy
        .Range("C5:M16").PasteSpecial xlPasteFormulas
        Application.Calculation = xlCalculationAutomatic
        .Range("C5:M16") = .Range("C5:M16").Value
    End With
ดิฉันลองปรับดูเพื่อเอาไว้ศึกษาเป็นความรู้เพิ่มเติมคะ

4. ข้อนี้ขอรบกวนถามอาจารย์เพื่อเป็นความรู้คะ เกี่ยวกับเรื่องของสูตร excel ระหว่างสูตร "sumifs(index(match..... กับ สูตร {sum((xxx=xxx)*(xxx=xxx)*xxx)} อันไหนทำงานเร็วกว่ากันคะ เพราะที่ผ่านมาดิฉันใช้สูตรอันที่ 2 ในการดึงข้อมูลคะ

ถ้าอาจารย์เหนื่อยแล้วเอาไว้ตอบพรุ่งนี้ก็ได้นะคะ เพราะเมื่อคืนเห็นอาจารย์ ตอบกระทู้ของดิฉันตอนเที่ยงคืน
ขอบคุณอาจารย์มากคะ

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Fri May 24, 2013 10:55 pm
by natthaporn
อาจารย์คะ ดิฉันขอโทษด้วนคะ ข้อ.3 ดิฉันหาเจอแล้วเป็นเพราะ range หายไปบางส่วนคะ

Code: Select all

fml = "=SUMIFS(INDEX('" & sh & "'!$Z$3:$AK$27,0," & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$Z$2:$AK$2,0)),"
:$AK$27 ตรงนี้หายไปคะ ดิฉันเข้าไปเล่น code แล้วแก้กลับคืนไม่ครบคะ

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Fri May 24, 2013 11:00 pm
by snasui
:lol: ผมตอบปัญหามาเกิน 10 ปี ไม่ต้องเป็นห่วงในทุก ๆ เรื่องครับ

Chr(34) คือเครื่องหมาย " ใช้เชื่อมกับตัวแปรเพื่อให้แสดงเป็นเช่น "JAN", "FEB" เป็นต้น

Sumif, Sumifs เร็วกว่า Sum แบบ Array ทุกชนิดครับ

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Fri May 24, 2013 11:48 pm
by natthaporn
ดิฉันจะลองนำสูตร sumifs(index(matc... ไปแทนที่สูตรเดิมคะ
ขอขอบคุณอาจารย์มากสำหรับทุก ๆ คำแนะนำ และทุก ๆ คำตอบคะ

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Sat May 25, 2013 12:53 pm
by natthaporn
อาจารย์ดิฉันทีเรื่องรบกวนสอบถามเกี่ยวเนื่องจากคราวที่แล้ว เนื่องจาก file การทำงานของดิฉันมีหลายหลากรูปแบบมากคะ ในกรณี
นี้จะดึงข้อมูลจากชีทเพียง 1 ชีท เท่านั้น แต่ต้องเลือกเป็นรายเดือน โดยดิฉันนำ coed เดิมที่อาจารย์แนะนำมาปรับใช้ ซึ่งดิฉันมีการ
ตั้งชื่อช่วงดังนี้คะ
DATA1 = SHEETS("COMA").RANGE("B3:M23")
DATA3 = SHEETS("COMA").RANGE("N3:Y23")
DATA3 = SHEETS("COMA").RANGE("Z3:AK23")
MONTH1 = SHEETS("COMA").RANGE("B2:M2")
MONTH2 = SHEETS("COMA").RANGE("N2:Y2")
MONTH3 = SHEETS("COMA").RANGE("Z2:AK2")
ซึ่งดิฉันได้ปรับ code ตามนี้คะ พยายามปรับแล้วแต่ก็ยังเกิด error อยู่คะ

Code: Select all

Dim sh As String, mth As String, fml1 As String
     Dim dt1 As String, dt2 As String, dt3 As Integer
     Dim mth1 As String, mth2 As String, mth3 As String
     
    Application.Calculation = xlCalculationManual
    With ActiveSheet
        'sh = .ComboBox2
        mth = .ComboBox1
        dt1 = Sheets("COMA").Range("DATA1") 'เริ่ม error ที่ row นี้คะ
        dt2 = Sheets("COMA").Range("DATA2")
        dt3 = Sheets("COMA").Range("DATA3")
        mth1 = Sheets("COMA").Range("MONTH1")
        mth2 = Sheets("COMA").Range("MONTH2")
        mth3 = Sheets("COMA").Range("MONTH3")
        
        fml1 = "=SUMIFS(INDEX(dt3,0,"
        fml1 = fml1 & "MATCH(" & Chr(34) & mth & Chr(34) & ",mth3,0)),"
        fml1 = fml1 & "INDEX(dt1,0,"
        fml1 = fml1 & "MATCH(" & Chr(34) & mth & Chr(34) & ",mth1,0)),$B5,"
        fml1 = fml1 & "INDEX(dt2,0,"
        fml1 = fml1 & "MATCH(" & Chr(34) & mth & Chr(34) & ",mth2,0)),C$4)"
        .Range("C5").Formula = fml1
        .Range("C5").Copy
        .Range("C5:M16").PasteSpecial xlPasteFormulas
        Application.Calculation = xlCalculationAutomatic
        .Range("C5:M16") = .Range("C5:M16").Value
    End With
รบกวนอาจารย์ช่วยแนะนะด้วยนะคะ

ขอบคุณคะ

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Sat May 25, 2013 2:37 pm
by snasui
snasui wrote:
natthaporn wrote:รบกวนอาจารย์แนะนำด้วยคะ
:D ดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub ComboBox2_Change()
    Dim sh As String, mth As String, fml As String
    Application.Calculation = xlCalculationManual
    With ActiveSheet
        sh = .ComboBox2
        mth = .ComboBox1
        fml = "=SUMIFS(INDEX('" & sh & "'!$Z$3:$AK$27,0,"
        fml = fml & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$Z$2:$AK$2,0)),"
        fml = fml & "INDEX('" & sh & "'!$B$3:$M$27,0,"
        fml = fml & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$B$2:$M$2,0)),$B5,"
        fml = fml & "INDEX('" & sh & "'!$N$3:$Y$27,0,"
        fml = fml & "MATCH(" & Chr(34) & mth & Chr(34) & ",'" & sh & "'!$N$2:$Y$2,0)),C$4)"
        .Range("C5").Formula = fml
        .Range("C5").Copy
        .Range("C5:M16").PasteSpecial xlPasteFormulas
        Application.Calculation = xlCalculationAutomatic
        .Range("C5:M16") = .Range("C5:M16").Value
    End With
End Sub
:D กรณีไม่ต้องเลือกชี่ท จาก Code ด้านบน ให้เปลี่ยน sh = .ComboBox2 เป็น sh = "COMA" ครับ

Re: รบกวนสอบถามการเขียน code ใน combobox

Posted: Sat May 25, 2013 4:35 pm
by natthaporn
ดิฉันพยายามปรับ code เป็นชั่วโมง จริงๆ แล้วเปลี่ยนแค่นั้นเองหรือคะ ดิฉันคิดลึกไปไกลถึงพระจันทร์ โน่นเลยคะ
ขอบคุณมากคะอาจารย์