Page 2 of 2

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 5:35 pm
by snasui
:D นพดลมีอยู่ 3 คน และนพดล คชสิทธิ์คือคนแรก

ถ้า Vlookup โดยใช้ชื่อเป็นหลัก จะเจอนพดล คชสิทธิ์ตลอดกาล เนื่องจากเป็นนพดลคนแรก และ Vlookup จะนำข้อมูลที่เจอตัวแรกมาแสดงเสมอ การใช้ Vlookup จะต้อง Lookup ด้วยข้อมูลใด ๆ ที่ไม่ซ้ำกัน ยกตัวอย่างเช่น รหัส ครับ

สูตรที่ถูกต้องใน C544 คือ

=VLOOKUP(A544,Data!A:Q,3,FALSE)

ไม่ใช่

=VLOOKUP(B544,Data!B:Q,2,FALSE) ตามไฟล์ที่แนบมาครับ

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 5:59 pm
by bank9597
ใช้คำสั่ง VLOOKUP อย่างเช่นใช้กับชื่อ แต่ปรากฏว่าผลที่ไม่ มันไม่ใช่ข้อมูลที่แท้จริงของมัน
:D ถ้าเข้าใจไม่ผิดหลักการน่ะครับ การทำ VLOOKUP เราจะอ้างจากชื่อไปรหัสไม่ได้ หรือ อ้างจากข้อมูลที่เป็น Text ไป Number ไม่ได้ (รบกวนอาจารย์แก้ข้อสงสัยให้ผมด้วยครับ) ตรงนี้อาจจะเป็นข้อจำกัดของ VLOOKUP ที่จะใช้อ้างอิงจากซ้ายไปขวา อ้างอิงจากขวาไปซ้ายไม่ได้ครับ
ถ้า Vlookup โดยใช้ชื่อเป็นหลัก จะเจอนพดล คชสิทธิ์ตลอดกาล เนื่องจากเป็นนพดลคนแรก และ Vlookup จะนำข้อมูลที่เจอตัวแรกมาแสดงเสมอ การใช้ Vlookup จะต้อง Lookup ด้วยข้อมูลใด ๆ ที่ไม่ซ้ำกัน ยกตัวอย่างเช่น รหัส ครับ
:D ตรงนี้สำคัญมากๆครับ เห็นด้วยอย่างยิ่งครับ

แนะนำอีกนิดนึงครับ เนื่องจากรูปแบบจำลองฐานข้อมูลที่ผมทำไปให้นั้น อาจจะต้องปรับปรุงอีกครับ เพราะดูการจัดเก็บข้อมูลแล้วค่อนข้างเยอะแน่นอน จะใช้ VLOOKUP ไปตลอดคงไม่ได้ครับ ควรจะปรับสูตรเป็นสูตรอื่นเมื่อมีข้อมูลจำนวนมากครับ เหตุผลที่ไม่แนะนำให้ใช้ VLOOKUP คือจะใช้ทรัพยากรเยอะ คำนวนช้าครับ (อาจารย์แนะนำมาครับ) :D

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 6:07 pm
by khunapple
ทำไมในส่วนของ REPORT ถึงไม่ขึ้นข้อมูลให้ค่ะ แสดงเป็นN/A

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 6:57 pm
by snasui
:lol: ปรับช่วงข้อมูลให้เป็นช่วงข้อมูลจริงก่อนครับ

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 7:00 pm
by bank9597
:D ลองตามนี้ครับ
ที่ "B20" คีย์ =IF(ROWS($B$20:B21)>$F$16,"",INDEX(Record!D$2:D$1500,SMALL(IF(Record!$A$2:$A$1500=Report!$D$3,ROW(Record!$D$2:$D$1500)-ROW(Record!$A$2)+1),ROWS($B$20:B21))))
กด Ctrl+Shift+Enter แล้วคัดลอกลงมาข้างล่างครับ

ให้สังเกตุ สูตร ในเซลล์ "F16" เพราะเซลล์ "B20" จะอ้างอิงมาจากตรงนั้น จะเห็นได้ว่าสูตรที่ "F16" คือ =COUNTIF(Record!A2:A1500,Report!D3) นั่นคือนับไปแล้วถึง 1500 Record เมื่อเป็นเช่นนั้นแล้ว เราก็ต้องแก้ไขจำนวน Record ในสูตร "B20" ให้ตรงกันด้วยครับ :D

แนะนำนิดนึงครับ ในกรณีที่เราต้องกรอกข้อมูลบ่อย เราต้องหมั่นดูด้วยว่าตอนนี้จำนวน Record ไปถึงไหนแล้ว
และก้พยายามปรับใช้สูตรไปเรื่อยครับ ลองศึกษาเองดูครับ เพราะถ้าไม่อย่างนั้น ข้อมูลยิ่งมากขึ้นไป ก็จะเจอปัญหานี้เดิมอีกครับ

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 7:16 pm
by khunapple
ต้องขอโทษด้วยค่ะ พอดีว่าใหม่จริง ๆ กับ EXCEL ทำให้บางครั้งไม่เข้าใจความหมาย ตอนนี้พบปัญหา ในส่วนของ REPORT แสดง 15 รายการ แต่ว่าขึ้นข้อมูลจริงแค่ 14 รายการ และ ด้านท้ายตารางมีอักษรซ้อนขึ้นมา #REF ค่ะ

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 7:27 pm
by snasui
:D ที่ B20 ปรับสูตรใหม่เป็น

=IF(ROWS($B$20:B20)>$F$16,"",INDEX(Record!D$2:D$1500,SMALL(IF(Record!$A$2:$A$1500=Report!$D$3,ROW(Record!$D$2:$D$1500)-ROW(Record!$A$2)+1),ROWS($B$20:B20))))

Ctrl+Shift+Enter > Copy ลงด้านล่างครับ

Re: TRINNING RECORD

Posted: Wed Nov 23, 2011 7:34 pm
by bank9597
:D ลองตามนี้ครับ
ที่ "B20" คีย์ =IF(ROWS($B$20:B20)>$F$16,"",INDEX(Record!D$2:D$1500,SMALL(IF(Record!$A$2:$A$1500=Report!$D$3,ROW(Record!$D$2:$D$1500)-ROW(Record!$A$2)+1),ROWS($B$20:B20))))

อันเดิมคือ =IF(ROWS($B$20:B21)>$F$16,"",INDEX(Record!D$2:D$1500,SMALL(IF(Record!$A$2:$A$1500=Report!$D$3,ROW(Record!$D$2:$D$1500)-ROW(Record!$A$2)+1),ROWS($B$20:B21))))

ตัวอักษรสีแดงคือส่วนที่ผิดพลาดครับ ขออภัยที่ดูให้ไม่ครบครับ :lol:

Re: TRINNING RECORD

Posted: Mon Nov 28, 2011 4:09 pm
by snoopy1150
ผมลองดูไฟล์แล้ว คือ มีปัญหาอยู่คือช่วงข้อมมูลมันเลื่อน ครับ เลยแสดงข้อมูลผิด

จากตัวอย่าง ช่อง ชื่อ คือดึงข้อมูลจากรหัส
=VLOOKUP(A544,Data!A:P,2,FALSE)

ช่อง นามสกุล ก็ต้องดึงจากรหัสเช่นกันครับ ข้อมูลถึงจะตรง
=VLOOKUP(A544,Data!A:P,3,FALSE) <------ ลองแก้ตามนี้ดูครับ

ขออนุญาติ แนะนำครับ ถ้าจะให้ดีควรล็อคช่วงข้อมูล คือ เพิ่ม $ เป็นการล็อคข้อมูล ครับ

=VLOOKUP($A544,Data!$A:$P,3,FALSE)

Re: TRINNING RECORD

Posted: Mon Nov 28, 2011 4:22 pm
by bank9597
:D ขอบคุณเพื่อนสมาชิกที่ช่วยกันตรวจสอบครับ ถือว่าเป็นเรื่องที่ดีครับ :D

ผมคิดว่าปัญหาการแสดงข้อมูลไม่ถูกต้องเกิดจาก การทำ VLOOKUP ในลักษณะนี้ :arrow: =VLOOKUP(A544,Data!A:P,3,FALSE)
ไม่ได้กำหนดช่วงข้อมูล (Array) ถึงแม้จะมี FALSE ที่บังคับให้ข้อมูลตรงกันทั้งหมดก็ตาม อาจจะสรุปได้ว่าเมื่อข้อมูลยิ่งมากขึ้นเท่าไหร ความผิดพลาดก็จะเกิดขึ้นได้มากขึ้นเท่านั้น

ซึ่งต่างจากการทำ VLOOKUP ในลักษณะนี้ :arrow: =IF(B20<>"",VLOOKUP(B20,CourseName,2,FALSE),"")
ซึ่งเราจะกำหนดช่วงข้อมูล (CourseName) ไว้ชัดเจน เก็บไว้เป็น Array ข้อมูลเพิ่มขึ้นเท่าไหร่ เราก็เพิ่มช่วงข้อมูลตาม ความผิดพลาดก็ไม่เกิดครับ

ฉะนั้น ลองเลือกใช้ตามความเหมาะสมครับ :D

Re: TRINNING RECORD

Posted: Mon Nov 28, 2011 4:36 pm
by snasui
:lol: ดีครับ มาช่วย ๆ กันแชร์

ความผิดพลาดไม่ได้เกิดจากข้อมูลมากหรือน้อยครับ

การตั้งชื่อให้กับช่วงข้อมูลนั้นก็เป็นเรื่องที่ดี ผู้อ่านสูตรทราบได้ทันทีว่าเป็นการนำข้อมูลใดมาใช้ แต่ไม่สามารถบอกได้ว่าขอบเขตของข้อมูลที่ให้ชื่อนั้นถูกต้องหรือไม่ จะทราบได้ก็ต้องเข้าไปตรวจสอบอยู่ดีครับ

การจะใช้ชื่อให้กับช่วงข้อมูลหรือ Range Name ให้เกิดประโยชน์ได้มากขึ้นควรกำหนดให้ยืดหยุ่นได้ นั่นคือชื่อจะขยายเพิ่มลดตามปริมาณข้อมูลที่มี ไม่ต้องกำหนดเผื่อไว้ทั้งคอลัมน์ ซึ่งการทำเช่นนั้นต้องใช้ฟังก์ชั่นอื่น ๆ เข้ามาช่วยกำหนดขอบเขต เช่นฟังก์ชั่น Offset, Match ,Count, Counta, Lookup เป็นต้น

ส่วนข้อเสียคือ การให้ชื่อกับช่วงเซลล์ปริมาณมาก ๆ ทั้งเป็นการอ้างอิงข้ามไฟล์ จะทำให้ไฟล์ใหญ่ ทำงานช้า

Re: TRINNING RECORD

Posted: Mon Nov 28, 2011 4:39 pm
by snoopy1150
ผมลองเขียนสูตร Vlookup ใหม่ครับ ลองดูว่าตรงตามที่ต้องการหรือป่าว ครับ

หากผิดพลาดประการใด ขออภัยด้วยครับ

Re: TRINNING RECORD

Posted: Mon Nov 28, 2011 4:51 pm
by bank9597
:D โอ๊ว...ขอบคุณอาจารย์มากครับ ได้ความรู้เพิ่มอีกแล้วครับ

และขอบคุณเพื่อนสมาชิกด้วยครับ ที่ร่วมแชร์ความคิดกัน เป็นประโยชน์มากครับ :D

Re: TRINNING RECORD

Posted: Sat Dec 24, 2011 3:18 pm
by khunapple
ขอบคุณทุกคนเลยค่ะ ที่ช่วยแบ่งปันข้อมูลกัน

Re: TRAINING RECORD

Posted: Sat Dec 24, 2011 5:19 pm
by khunapple
ผู้รู้ทุกท่านทำไม REPORT ถึงไม่ขึ้นอีกค่ะ งง

Re: TRAINING RECORD

Posted: Sat Dec 24, 2011 5:32 pm
by snasui
ที่ B20 เป็นสูตร Array การกดแป้นให้รับสูตรจำเป็นต้องกด 3 แป้น คือ กดแป้น Ctrl+Shift ค้างไว้แล้วตามด้วย Enter หากกดแป้นถูกต้องจะเห็นเครื่องหมายปีกกาคร่อมสูตร ปีกกานี้จะคีย์เข้าไปเองไม่ได้ครับ กรณีมีการเปลี่ยนแปลงแก้ไขก็จะต้องกด 3 แป้นให้รับสูตรเสมออีกเช่นกัน ซึ่งในไฟล์ที่ส่งมาเป็นการกดแป้นให้รับด้วยการ Enter ธรรมดาเท่านั้น จึงทำให้ไม่ได้ผลลัพธ์ตามต้องการ :P

Re: TRAINING RECORD

Posted: Mon Dec 26, 2011 9:28 am
by khunapple
COPY ไม่ไป ทำไงค่ะ

Re: TRAINING RECORD

Posted: Mon Dec 26, 2011 10:23 am
by bank9597
COPY ไม่ไป ทำไงค่ะ
อะไรคือ Copy ไม่ไป อธิบายเพิ่มหน่อยได้ไหมหนอ

ลองดูตามไฟล์แนบครับ
อย่าลืมกด Ctrl+Shift+Enter เวลาใส่แล้ว ตามที่อาจารย์ได้กล่าวไว้