Page 1 of 1

ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sat Feb 12, 2022 12:51 pm
by Aoonne
ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form ค่ะ

ตอนนี้สร้างฟอร์มสำหรับให้ user กรอกข้อมูล user แต่ละคน จะมีข้อมูลไม่ครบทุก cell ในฟอร์มนั้น

เลยอยากจะให้ cell ใดก็ตาม ที่ user ไม่ได้กรอกข้อมูล ให้ค่าใน cell นั้นเป็น 0.00 หลังกดปุ่ม เพิ่มข้อมูล ค่ะ

แล้วค่า 0.00 นั้น จะไป insert ในตารางที่กำหนด ทำให้ตารางจะไม่มี cell ใดที่เป็นค่าว่างค่ะ

เขียนโค้ดไว้แบบนี้ค่ะ

Private Sub CommandButton1_Click()

Do

r = r + 1

Loop Until Cells(r, 1) = ""

Cells(r, 1) = ComboBox2.Text

Cells(r, 2) = ComboBox1.Text

Cells(r, 3) = TextBox1.Value

Cells(r, 4) = TextBox2.Value

Cells(r, 5) = TextBox3.Value

Cells(r, 6) = TextBox4.Value

Cells(r, 7) = TextBox5.Value

Cells(r, 8) = TextBox6.Value

Cells(r, 9) = TextBox7.Value

Cells(r, 11) = TextBox8.Value

Cells(r, 12) = TextBox9.Value

Cells(r, 13) = TextBox10.Value

Cells(r, 14) = TextBox11.Value

Cells(r, 15) = TextBox12.Value

Cells(r, 16) = TextBox13.Value

Cells(r, 17) = TextBox14.Value

Cells(r, 18) = TextBox15.Value

Cells(r, 19) = TextBox16.Value

Cells(r, 20) = TextBox17.Value

Cells(r, 21) = TextBox18.Value

Cells(r, 22) = TextBox19.Value

ComboBox1.Text = ""

ComboBox2.Text = ""

TextBox1.Value = ""

TextBox2.Value = ""

TextBox3.Value = ""

TextBox4.Value = ""

TextBox5.Value = ""

TextBox6.Value = ""

TextBox7.Value = ""

TextBox8.Value = ""

TextBox9.Value = ""

TextBox10.Value = ""

TextBox11.Value = ""

TextBox12.Value = ""

TextBox13.Value = ""

TextBox14.Value = ""

TextBox15.Value = ""

TextBox16.Value = ""

TextBox17.Value = ""

TextBox18.Value = ""

TextBox19.Value = ""

End Sub

Private Sub CommandButton2_Click()

ComboBox1.Text = ""

ComboBox2.Text = ""

TextBox1.Value = ""

TextBox2.Value = ""

TextBox3.Value = ""

TextBox4.Value = ""

TextBox5.Value = ""

TextBox6.Value = ""

TextBox7.Value = ""

TextBox8.Value = ""

TextBox9.Value = ""

TextBox10.Value = ""

TextBox11.Value = ""

TextBox12.Value = ""

TextBox13.Value = ""

TextBox14.Value = ""

TextBox15.Value = ""

TextBox16.Value = ""

TextBox17.Value = ""

TextBox18.Value = ""

TextBox19.Value = ""

End Sub

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sat Feb 12, 2022 1:14 pm
by snasui
:D กรุณาวาง Code ให้เป็นรูปแบบ Code ดูตัวอย่างในกฎการใช้บอร์ดข้อ 5 ด้านบน :roll: นอกจากนี้ ช่วยแนบไฟล์ตัวอย่างมาด้วย จะได้สะดวกในการตอบของเพื่อนสมาชิกครับ

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sat Feb 12, 2022 8:38 pm
by Aoonne
ขอโทษด้วยค่ะ ที่ไม่ได้ทำตามกฎ

ส่วนนั้นทำได้แล้ว มีคำถามในส่วนอื่นค่ะ
อ้างอิงข้อมูลโดยใช้สูตร INDEX แล้วดึงค่าได้เฉพาะคนที่ชื่ออยู่ในแถวแรกค่ะ

แนบไฟล์ตัวอย่างมาให้แล้วค่ะ
ที่ sheet TemplateUser cell I10 ไม่สามารถเปลี่ยนชื่อเป็นคนอื่นได้เลยค่ะ ค่าจะเป็น #ref
ค่าที่ I10 เป็นได้แค่ชื่อเดียวชื่อ นางรัตน์ เรืองมณี ถึงจะดึงค่ามาได้

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sat Feb 12, 2022 10:03 pm
by snasui
:D ตัวอย่างสูตรในเซลล์ C14 ครับ

=SUMIFS(tbldata[เงินเดือน],tbldata[เดือน],$I$9,tbldata[ชื่อ - นามสกุล],$I$10)

งานลักษณะนี้ควรเลือกใช้สูตรหายอดรวมโดยมีเงื่อนไขเช่น Sumproduct, Sumifs การใช้ Index และ Match ตามรูปแบบที่เขียนมานั้น ลักษณะข้อมูลจะต้องเป็นเช่น ข้อมูลเดือนอยู่ในแนวตั้ง (คอลัมน์) แต่ข้อมูลชื่ออยู่ในแนวนอน (บรรทัด) ไม่ใช่แนวตั้งทั้งคู่ครับ

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sat Feb 12, 2022 11:09 pm
by Aoonne
ขอบคุณมากค่ะอาจารย์ ทำได้แล้วค่ะ
ตอนนี้พยายามเรียนรู้ด้วยตัวเองไปทีละอย่าง
ถ้ามีอะไรติดขัดแล้วหาข้อมูลแก้ไขเองไม่ถูกก็จะมาถามอาจารย์ที่นี่
ขอบคุณอาจารย์นะคะที่แนะนำ
เริ่มรู้สึกสนุกแล้ว ยิ่งทำได้ไปทีละอย่างยิ่งสนุกเลยค่ะ :D
ไว้มีปัญหาอะไรต่อจากนี้ ขอรบกวนอีกนะคะ

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sun Feb 13, 2022 7:54 pm
by Aoonne
รบกวนอีกหนึ่งข้อสงสัยค่ะ

อยากจะให้มีหนึ่งชีต เพื่อให้ผู้บริหารเรียกดูข้อมูลเงินเดือน เฉพาะเดือนที่ต้องการ
โดยสร้างเป็นชีตชื่อว่า Retrieve ไว้ มี drop down list เป็นเดือนกับปีให้เลือก
แล้วสร้างหัวตารางทิ้งไว้ สมมติว่าผู้บริหารต้องการเรียกดูข้อมูลของเดือนใด ให้เลือก drop down list
แล้วข้อมูลของเดือนนั้น ของพนักงานทุกคน จะมาแสดงในตารางด้านล่าง
โดยข้อมูลจะดึงมาจากข้อมูลใน tableData ที่อยู่อีกชีตนึง ที่ชื่อ Data ค่ะ
กรณีแบบนี้ควรใช้วิธีใดดีคะ เนื่องจากไม่อยากให้ผู้บริหารไป filter ในชีต Data ค่ะ
เลยเลือกใช้วิธีเพิ่มอีกชีตให้เข้าใช้งานดีกว่า

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sun Feb 13, 2022 9:08 pm
by logic
ลองแบบนี้ดูครับ

Y4 =IFERROR(SMALL(IF(Data!$B$3:$B$29=$B$1,ROW(Data!$B$3:$B$29)),ROWS(Y$4:Y4)),"") เป็นสูตรอาร์เรย์ เขียนเสร็จแล้วอย่ากด enter อย่างเดียว ต้องกด ctrl ค้างไว้ตามด้วย shift+enter เสร็จแล้วคัดลอกสูตรลง เอาไว้แสดงค่าบรรทัดที่เข้าเงื่อนไข

A4 =IF($Y4="","",INDEX(Data!A:A,$Y4)) enter คัดลอกลงด้านล่าง เอาไว้ดึงข้อมูลตามค่าบรรทัดในคอลัมน์ Y ถ้าคัดลอกไปใช้ที่อื่นเปลี่ยนที่ Data!A:A ในสูตร

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Sun Feb 13, 2022 10:54 pm
by Aoonne
ลองทำตามที่คุณ logic แนะนำ ทำได้แล้วค่ะ

ทีนี้ลองคิดใหม่ทำใหม่ โดยแยก ปี กับ เดือน ในชีต data อยู่คนละ column กัน

ในคำสั่งนี้

Y4 =IFERROR(SMALL(IF(Data!$B$3:$B$29=$B$1,ROW(Data!$B$3:$B$29)),ROWS(Y$4:Y4)),"")

ในชีต retrieve ก็เพิ่ม drop down list ให้เลือก เดือน กับ ปี แยกกัน

ถ้าจะเพิ่มให้เช็ค drop down list B2 (ปี) ด้วย แทนที่จากเดิม เช็คแค่ B1 (เดือน) อย่างเดียว ต้องเพิ่มสูตรยังไงคะ

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Mon Feb 14, 2022 10:52 am
by Aoonne
ลองแก้ไขสูตรดู โดยเพิ่มเงื่อนไขให้เช็คเป็นสองเงื่อนไข คือ B1 (เดือน) และ B2 (ปี)

ํY5=IFERROR(SMALL(IF(AND(tbldata[เดือน]=Retrieve!B1,tbldata[ปี]=Retrieve!B2),ROW(Data!$B$3:$B$29)),ROWS(Y$5:Y5)),"")

ค่าจำนวนบรรทัดที่นับมาได้เป็น 0 ไม่ทราบว่าใส่เงื่อนไขผิดตรงไหนคะ

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Mon Feb 14, 2022 7:43 pm
by snasui
:D ตัวอย่างการปรับสูตรครับ
Y4

=IFERROR(SMALL(IF(tbldata[เดือน]=$B$1,IF(tbldata[ปี]=$B$2,ROW(tbldata[เดือน])-MIN(ROW(tbldata[เดือน]))+1)),ROWS(Y$5:Y5)),"")

Ctrl+Shift+Enter > Copy ลงด้านล่าง

A4

=IF($Y5="","",INDEX(tbldata[ชื่อ - นามสกุล],$Y5))

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Tue Feb 15, 2022 10:19 am
by Aoonne
เรียบร้อยแล้วค่ะอาจารย์ ขอบคุณมากค่ะ

ขอสอบถามเพิ่มเติมอีกกรณีนะคะ ยิ่งทำยิ่งมีข้อสงสัยเยอะ :D

ถ้าเรามีตาราง 2 ตาราง คือ tblEmployee กับ tblComboBox รายละเอียดในตารางเหมือนกัน 1 column

อยากจะให้เมื่อเพิ่มข้อมูล column "ชื่อ" ใน tblEmployee ข้อมูลชื่อนามสกุลที่เพิ่มใน table นี้ ก็จะไปเพิ่มใน Column "รายชื่อ" ใน

tblComboBox อัตโนมัติ แบบนี้จะสามารถทำได้มั้ยคะ

Re: ขอสอบถาม กรณี ไม่ได้กรอกข้อมูล TextBox ใน form

Posted: Tue Feb 15, 2022 6:55 pm
by snasui
:D สามารถทำได้ครับ

ตัวอย่างการ Link เซลล์ ที่ชีต ComboBox
  1. คลิกขวาที่เซลล์ A2 > Format Cells > ที่แถบ Number เลือก General > OK
  2. ที่เซลล์ A2 คีย์สูตร
    =Employee!B3&""
    Enter > Copy ลงด้านล่าง โดยเผื่อไว้เท่าที่คิดว่าข้อมูลจะขยายไปถึง