:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#21

Post by snasui »

yodpao.b wrote::oops: ทั้งอ่านทั้งทำตามแล้วยัง งง อยู่เลย ยอม
:?: อาจารย์ครับขอถามอะไรหน่อย
The attachment untitled11.GIF is no longer available
จากรูปด้านบน
ผมสงสัยว่า Combobox ที่วงไว้ทำไมเมื่อดลิ๊กแล้ว จึงมีข้อความขึ้น
ทั้งทั้งทีไม่เห็นมี Code เลย
:D ดูภาพประกอบด้านล่างครับ จะเห็นว่าที่ Properties จะเห็นว่ามีการนำ Range Name ที่ชื่อ COM มาแสดงตรง ListFillRange
Attachments
RangeName.png
RangeName.png (86.44 KiB) Viewed 187 times
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

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

#22

Post by yodpao.b »

ขอบคุณครับ เข้าใจแล้วครับ
ต่อไปเวลาจะทำเดือน ผมก็ไม่ต้องให้มันไปมองหาใน excel แล้ว
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#23

Post 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 ในการดึงข้อมูลคะ

ถ้าอาจารย์เหนื่อยแล้วเอาไว้ตอบพรุ่งนี้ก็ได้นะคะ เพราะเมื่อคืนเห็นอาจารย์ ตอบกระทู้ของดิฉันตอนเที่ยงคืน
ขอบคุณอาจารย์มากคะ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#24

Post 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 แล้วแก้กลับคืนไม่ครบคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#25

Post by snasui »

:lol: ผมตอบปัญหามาเกิน 10 ปี ไม่ต้องเป็นห่วงในทุก ๆ เรื่องครับ

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

Sumif, Sumifs เร็วกว่า Sum แบบ Array ทุกชนิดครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#26

Post by natthaporn »

ดิฉันจะลองนำสูตร sumifs(index(matc... ไปแทนที่สูตรเดิมคะ
ขอขอบคุณอาจารย์มากสำหรับทุก ๆ คำแนะนำ และทุก ๆ คำตอบคะ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#27

Post 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
รบกวนอาจารย์ช่วยแนะนะด้วยนะคะ

ขอบคุณคะ
Attachments
Code VBA-Combobox7.xlsm
(33.17 KiB) Downloaded 27 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#28

Post 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" ครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#29

Post by natthaporn »

ดิฉันพยายามปรับ code เป็นชั่วโมง จริงๆ แล้วเปลี่ยนแค่นั้นเองหรือคะ ดิฉันคิดลึกไปไกลถึงพระจันทร์ โน่นเลยคะ
ขอบคุณมากคะอาจารย์
Post Reply