Page 1 of 1

การค้นข้อมูล

Posted: Thu Mar 26, 2015 11:43 am
by colinz
สอบถามเรื่อง Excel หน่อยครับ

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

ขอบคุณครับ

Re: การค้นข้อมูล

Posted: Thu Mar 26, 2015 3:26 pm
by DhitiBank
ลองแนบไฟล์ที่มีตัวอย่างและคำตอบที่ต้องการมาดูครับ เพื่ออาจารย์และเพื่อนๆ จะได้ช่วยเหลือได้สะดวก

Re: การค้นข้อมูล

Posted: Fri Mar 27, 2015 9:05 am
by colinz
ผมแนบไฟล์มาแล้วนะครับ สูตรที่ใช้จะเป็นสูตรพื้นฐานซะมากกว่า
อีกเรื่องนะครับ Sheet DB ที่ทำไว้ ผมอยากจะทำให้มันคำนวนอายุได้
แต่เท่าที่ทราบมา MS 2007 คำสั่งนี้มีปัญหา(DATEDIF) เลยอยากทราบว่า มีวิธีอื่นไหมครับ

ขอบคุณครับ

Re: การค้นข้อมูล

Posted: Fri Mar 27, 2015 9:52 am
by DhitiBank
1. เรื่่องวันที่ ทดลองแบบนี้ครับ
ที่ F2 คีย์
=--TEXT(E2-D2,"y")
แต่ คุณต้องเปลี่ยนวันที่ในคอลัมน์ D ก่อนครับ โดยคีย์เป็น ปี ค.ศ. แล้วค่อยจัดรูปแบบเป็น พ.ศ. ทีหลัง เพราะ excel จะคำนวณจากปี ค.ศ. นะครับ (หากคีย์ดังไฟล์ที่แนบมา แม้เป็น excel 2010 ขึ้นไป ก็ยังให้ค่าผิดพลาดครับ)

2. เรื่องการค้นหาชื่อพนักงาน ถ้าหาจากรหัสพนักงานที่ไม่ซ้ำกันแน่นอน แบบนี้ไม่สะดวกใช่ไหมครับ
แต่หากยังต้องการค้นหาจากชื่อและสกุลเหมือนเดิม ลองแบบนี้ครับ
ให้ D3 เอาไว้คีย์นามสกุลครับ
ที่ C6 คีย์
=IF(AND($C$3="",$D$3=""),"",INDEX('DB-Employee'!$A$2:$A$3,SMALL(IF(
IF($C$3="",--('DB-Employee'!$A$2:$A$3<>""),--('DB-Employee'!$B$2:$B$3=$C$3))*
IF($D$3="",--('DB-Employee'!$A$2:$A$3<>""),--('DB-Employee'!$C$2:$C$3=$D$3)),
ROW('DB-Employee'!$B$2:$B$3)-ROW('DB-Employee'!$B$2)+1),1)))

แล้วกด Ctrl+Shift ค้างไว้ แล้วกด Enter ครับ (หากกดถูกต้องจะมีเครื่องหมาย { } คร่อมสูตรอยู่นะครับ)

จากนั้นคัดลอกสูตรไปยังเซลล์อื่น แล้วเปลี่ยนเซลล์อ้างอิงสีแดง เป็นช่วงที่ต้องการครับ

Re: การค้นข้อมูล

Posted: Fri Mar 27, 2015 11:56 am
by colinz
ตอนนี้ทำได้แล้วครับ ขอบคุณมากเลยครับ
แต่ผมสงสัยว่ามัน...
1.มีวิธีที่ทำให้ เราสามารถค้นหา ชื่อ หรือ สกุลจาก จากเซลล์เดียวกันหรือไม่ครับ
2.ผมพยายามทำความเข้าใจโค๊ด แต่ไม่ค่อยเข้าใจเท่าไหร่ และที่สงสัย คือ "--" มีความหมายว่ายังไงครับ และ "*" ในเชิงคำนวน มันคือการคูณ แล้วในเชิงตรรกะมันมีความหมายว่ายังไงครับ

ขอบคุณครับ

Re: การค้นข้อมูล

Posted: Fri Mar 27, 2015 1:28 pm
by DhitiBank
ตอบข้อ 1
มีครับ แต่คงต้องใช้สูตรที่ยืดหยุ่นกว่านี้ สมมตินะครับ หากมีนาย M และ N ต่างก็นามสกุล "กไก่" หากเราพิมพ์ "กไก่" ลงในช่องค้นหา สูตรจะรู้ได้อย่างไรครับว่าต้องเลือกนาย M หรือ N มาแสดง เนื่องจากฟอร์มที่วางไว้เป็นของคนๆ เดียว หรือว่าจะทำฟอร์มเผื่อเอาไว้ในกรณีมีชื่อซ้ำครับ แต่หากเป็นฟอร์มเพื่อเรียกดูข้อมูลของคนๆ เดียว ก็คงต้องมีการระบุข้อมูลเฉพาะอื่นอีกอยู่ดีเพื่อให้เรียกมาถูกคนตามที่ต้องการ ผมเลยแยกช่องชื่อกับนามสกุลไว้คนละช่องกันครับ :)

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


ตอบข้อ 2
2.1 "--" มีความหมายคือ การเอา -1 เข้าไปคูณครับ คูณ 2 ครั้ง เพื่อเปลี่ยนค่าตรรกะ True False เป็นตัวเลข 1 และ 0
เช่นจากตัวอย่างข้างต้น
--('DB-Employee'!$A$2:$A$3<>"")
ผมเอาคอลัมน์ A ในชีท DB-Employee ไปตรวจว่า "ไม่เท่ากับค่าว่าง" หากเป็นค่าว่างก็จะ False หากมีข้อความอะไรสักอย่างก็จะ True ซึ่งคอลัมน์นี้ไม่มีค่าว่างอยู่แล้วเพราะเป็นรหัสจึงจะ True ตลอด ดังนั้นจะได้ว่า
--{True;True} = (-1)*(-1)*{True;True} = (-1)*{-1;-1} = {1;1}

2.2 เครื่องหมาย "*" ที่ใช้ก็คงยังเป็นการคูณครับ ที่ผมใช้ IF ในสูตร
IF($C$3="",--('DB-Employee'!$A$2:$A$3<>""),--('DB-Employee'!$B$2:$B$3=$C$3)) __(1) กับ
IF($D$3="",--('DB-Employee'!$A$2:$A$3<>""),--('DB-Employee'!$C$2:$C$3=$D$3)) __(2)

เพื่อให้สูตรค้นหาตามชื่อหรือนามสกุลที่เราคีย์เข้าไปครับ เช่น
==>คีย์ชื่ออย่างเดียว แสดงว่า C3 ไม่ใช่ค่าว่าง ดังนั้น เงื่อนไข (1) จะเป็นเท็จ สูตรก็จะเลือก --('DB-Employee'!$B$2:$B$3=$C$3) มาทำงานต่อ โดยให้เอาไปเปรียบเทียบกับค่าในฐานข้อมูลว่ารายการไหนตรงกับชื่อที่คีย์ (หากตรงก็จะเป็น 1 ไม่ตรงก็ 0) และเงื่อนไข (2) จะเป็นจริง สูตรก็จะเลือก --('DB-Employee'!$A$2:$A$3<>"") มาทำงานต่อได้ค่าตามที่อธิบายข้างต้น เสร็จแล้วก็จะเอาทั้ง (1) และ (2) มาคูณกัน หาก 1 ทั้งคู่ พอคูณกันก็จะได้ 1 ซึ่งหมายความว่า ข้อมูลตำแหน่งนั้นๆ ในฐานข้อมูลมีชื่อ (หรือนามสกุล) ตรงกับที่เราต้องการ การคีย์นามสกุลอย่างเดียว หรือทั้งชื่อทั้งสกุลก็มีหลักการทำงานแบบเดียวกันครับ