: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

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
colinz
Member
Member
Posts: 22
Joined: Thu Mar 26, 2015 11:39 am

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

#1

Post by colinz »

สอบถามเรื่อง Excel หน่อยครับ

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

ขอบคุณครับ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#2

Post by DhitiBank »

ลองแนบไฟล์ที่มีตัวอย่างและคำตอบที่ต้องการมาดูครับ เพื่ออาจารย์และเพื่อนๆ จะได้ช่วยเหลือได้สะดวก
colinz
Member
Member
Posts: 22
Joined: Thu Mar 26, 2015 11:39 am

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

#3

Post by colinz »

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

ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#4

Post 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 ครับ (หากกดถูกต้องจะมีเครื่องหมาย { } คร่อมสูตรอยู่นะครับ)

จากนั้นคัดลอกสูตรไปยังเซลล์อื่น แล้วเปลี่ยนเซลล์อ้างอิงสีแดง เป็นช่วงที่ต้องการครับ
colinz
Member
Member
Posts: 22
Joined: Thu Mar 26, 2015 11:39 am

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

#5

Post by colinz »

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

ขอบคุณครับ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

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

#6

Post 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 ซึ่งหมายความว่า ข้อมูลตำแหน่งนั้นๆ ในฐานข้อมูลมีชื่อ (หรือนามสกุล) ตรงกับที่เราต้องการ การคีย์นามสกุลอย่างเดียว หรือทั้งชื่อทั้งสกุลก็มีหลักการทำงานแบบเดียวกันครับ
Post Reply