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