Page 2 of 2
Re: TRINNING RECORD
Posted: Wed Nov 23, 2011 5:35 pm
by snasui

นพดลมีอยู่ 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 อย่างเช่นใช้กับชื่อ แต่ปรากฏว่าผลที่ไม่ มันไม่ใช่ข้อมูลที่แท้จริงของมัน

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

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

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

ปรับ
ช่วงข้อมูลให้เป็นช่วงข้อมูลจริงก่อนครับ
Re: TRINNING RECORD
Posted: Wed Nov 23, 2011 7:00 pm
by bank9597

ลองตามนี้ครับ
ที่ "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" ให้ตรงกันด้วยครับ
แนะนำนิดนึงครับ ในกรณีที่เราต้องกรอกข้อมูลบ่อย เราต้องหมั่นดูด้วยว่าตอนนี้จำนวน 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

ที่ B20 ปรับสูตรใหม่เป็น
=IF(ROWS($B$20:B
20)>$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:B
20))))
Ctrl+Shift+Enter > Copy ลงด้านล่างครับ
Re: TRINNING RECORD
Posted: Wed Nov 23, 2011 7:34 pm
by bank9597

ลองตามนี้ครับ
ที่ "B20" คีย์ =IF(ROWS($B$20:B
20)>$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:B
20))))
อันเดิมคือ =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))))
ตัวอักษรสีแดงคือส่วนที่ผิดพลาดครับ ขออภัยที่ดูให้ไม่ครบครับ

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

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

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

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

Re: TRINNING RECORD
Posted: Mon Nov 28, 2011 4:36 pm
by snasui

ดีครับ มาช่วย ๆ กันแชร์
ความผิดพลาดไม่ได้เกิดจากข้อมูลมากหรือน้อยครับ
การตั้งชื่อให้กับช่วงข้อมูลนั้นก็เป็นเรื่องที่ดี ผู้อ่านสูตรทราบได้ทันทีว่าเป็นการนำข้อมูลใดมาใช้ แต่ไม่สามารถบอกได้ว่าขอบเขตของข้อมูลที่ให้ชื่อนั้นถูกต้องหรือไม่ จะทราบได้ก็ต้องเข้าไปตรวจสอบอยู่ดีครับ
การจะใช้ชื่อให้กับช่วงข้อมูลหรือ 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

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

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 ธรรมดาเท่านั้น จึงทำให้ไม่ได้ผลลัพธ์ตามต้องการ

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 เวลาใส่แล้ว ตามที่อาจารย์ได้กล่าวไว้