Page 2 of 2
Re: รบกวนสอบถามการเขียน code ใน combobox
Posted: Fri May 24, 2013 6:11 pm
by snasui
yodpao.b wrote:
ทั้งอ่านทั้งทำตามแล้วยัง งง อยู่เลย ยอม

อาจารย์ครับขอถามอะไรหน่อย
The attachment untitled11.GIF is no longer available
จากรูปด้านบน
ผมสงสัยว่า Combobox ที่วงไว้ทำไมเมื่อดลิ๊กแล้ว จึงมีข้อความขึ้น
ทั้งทั้งทีไม่เห็นมี Code เลย

ดูภาพประกอบด้านล่างครับ จะเห็นว่าที่ 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

ผมตอบปัญหามาเกิน 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:รบกวนอาจารย์แนะนำด้วยคะ

ดูตัวอย่างการปรับ 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

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