: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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#1

Post by joo »

มีปัญหามารบกวนอีกแล้วครับท่าน...ช่วยแนะนำด้วยครับผม :D
- ในการค้นหาข้อมูลมาแสดงผมใช้คอลัมภ์ช่วยในการค้นหาข้อมูลพบว่าค่าที่ได้มาไม่ตรงตามที่ต้องการดังตัวอย่างที่ซีท look ซึ่งระบบไม่ได้มองแค่รหัส 2000 อย่างเดียวแต่จะรวมรหัสอื่นมาด้วย เช่น 20,200,2000 ไม่เข้าใจว่าทำไมถึงเป็นเช่นนั้นครับ
- สำหรับที่ซีท look1 ค้นหาโดยใช้เงื่อนไขเดือนกับปีโดยใช้คอลัมภ์ช่วยหาเหมือนกันแต่ดูแล้วยุ่งยากหลายขั้นตอนพอจะมีวิธีที่สั้นกระทัดรัดกว่านี้ไหมครับ
- ที่ซีท Report ผมใช้การค้นหาโดยใช้สูตรโดยมีเงื่อนไขขึ้นอยู่กับรหัสและปีงบประมาณ ตอนนี้ทำได้เพียงค้นหาตามรหัสส่วนเงื่อนไขหลังยังไม่ได้ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
ysamroeng
Member
Member
Posts: 105
Joined: Fri Feb 05, 2010 11:17 am

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#2

Post by ysamroeng »

1. การใช้ SEARCH เหมาะสำหรับการค้นหา โดยการป้อนเพียงบางส่วนของคำหรือของเงื่อนไข แล้วดึงข้อมูลมาแสดง เช่น รายชื่อพนักงานที่ขึ้นต้นว่า "สม" จะสมชาย สมหญิง สมทรง ก็จะแสดงออกมาทั้งหมด แต่กรณีนี้คุณจะค้นหารหัสพนักงาน จึงควรค้นหาแบบระบุไปเลยว่า รหัสพนักงานคนไหน ดังนั้น ในชีท database ที่เซลล์ L4 จึงควรเปลี่ยนสูตรเป็น =IF(AND(B4=look!$F$5,A4=look!$F$6),LOOKUP(9.99999999999999E+307,Database!L$3:L3)+1,"") แล้วคัดลอกลงมา

2. ยังสงสัยว่า ในการระบุเงื่อนไขเป็นชื่อเดือน ในคอลัมน์ช่วยให้แสดงเดือนเป็น mmmm แต่ในชีท look2 กลับเลือกเดือนเป็นภาษาไทย ผมลองทำรายชื่อเดือนขึ้นมา (คอลัมน์ P) แล้วอ้างอิงรายการเลือกไปยังช่วงชื่อเดือน แล้วปรับสูตรในคอลัมน์ P ชีท database ใหม่ (โดยไม่จำเป็นต้องมี M และ O)
P4 =IF(AND(A4=look1!$F$5,MONTH(F4)=look1!$F$3),LOOKUP(9.99999999999999E+307,Database!P$3:P3)+1,"") แล้วคัดลอกสูตรลงมา

3. ไม่ว่าจะในชีท look, look1 หรือ report ส่วนที่แสดงข้อมูลด้านล่างนั้น ใช้สูตรลักษณะเดียวกันทั้งหมดครับ เพียงแต่ไปอ้างอิงจากคอลัมน์ช่วยในชีท database คนละคอลัมน์กันเท่านั้น สาระสำคัญคือ สูตรในแต่ละคอลัมน์ช่วยนั้นต่างหาก (ในชีท report ทำไมต้องเขียนอะเรย์ ทั้งๆ ที่ใช้สูตรเหมือนชีทก่อนหน้าก็ได้แล้ว)
You do not have the required permissions to view the files attached to this post.
มีการศึกษา (Education) ไม่ได้แปลว่า มีความรู้ (Knowledge)
http://www.e-hrit.com
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#3

Post by joo »

:lol: ขอบคุณครับสำหรับการช่วยทดสอบปรับแก้ไขสูตรให้ มองข้ามสิ่งเล็กๆน้อยๆไปได้ :D
3. ไม่ว่าจะในชีท look, look1 หรือ report ส่วนที่แสดงข้อมูลด้านล่างนั้น ใช้สูตรลักษณะเดียวกันทั้งหมดครับ เพียงแต่ไปอ้างอิงจากคอลัมน์ช่วยในชีท database คนละคอลัมน์กันเท่านั้น สาระสำคัญคือ สูตรในแต่ละคอลัมน์ช่วยนั้นต่างหาก (ในชีท report ทำไมต้องเขียนอะเรย์ ทั้งๆ ที่ใช้สูตรเหมือนชีทก่อนหน้าก็ได้แล้ว)
ที่ซีท Report นั้นต้องการใช้สูตรดึงข้อมูลให้มาแสดงโดยตรงเลย โดยไม่ต้องทำคอลัมภ์ช่วยที่ซีท Database มันก็จะสะดวกไปอีกแบบหนึ่งที่ไม่ต้องไปยุ่งกับฐานข้อมูล :D
ได้ลองปรับสูตรที่ซีท Report ใหม่ที่ C12
=INDEX(Database!A$4:A$10,MATCH($F5,Database!$B$4:$B$10,0),MATCH($F6,Database!$A$4:$A$10,0))
ก็แสดงข้อมูลได้ครับแต่ข้อมูลมันจะซ้ำๆกันและถ้าเงื่อนไขไม่ตรงจะขึ้น #N/A ครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#4

Post by snasui »

joo wrote:ได้ลองปรับสูตรที่ซีท Report ใหม่ที่ C12
=INDEX(Database!A$4:A$10,MATCH($F5,Database!$B$4:$B$10,0),MATCH($F6,Database!$A$4:$A$10,0))
ก็แสดงข้อมูลได้ครับแต่ข้อมูลมันจะซ้ำๆกันและถ้าเงื่อนไขไม่ตรงจะขึ้น #N/A ครับ
สูตรนี้ใช้ดึงข้อมูลจากตารางแบบ 2 ทาง คือ ทางบรรทัดและทางคอลัมน์ แต่จากโจทย์นี้ต้องการดึงข้อมูลทางบรรทัดเท่านั้น เพียงแต่ต้องเข้า 2 เงื่อนไข คือ รหัสพนักงานและปี จึงสามารถเปลี่ยนสูตรเป็น

=INDEX(Database!A$4:A$10,MATCH(1,If(Database!$B$4:$B$10=$F$5,IF(Database!$A$4:$A$10=$F$6,1)),0))

Ctrl+Shift+Enter

ส่วนเงื่อนไขไม่ตรงก็จะขึ้น #N/A ซึ่งเป็นเรื่องปกติ อีกอย่าง หากเงื่อนไขไม่ตรง F7, F8 ก็ต้องเป็น 0 เพราะเป็นการคำนวณแบบนับ และ รวม โดยใช้เงื่อนไขเดียวกันคือรหัสพนักงานและปี จากกรณีนี้เราสามารถนำมาประยุกต์เพิ่มเติมได้เป็น

=If($F$7=0,"",INDEX(Database!A$4:A$10,MATCH(1,If(Database!$B$4:$B$10=$F$5,IF(Database!$A$4:$A$10=$F$6,1)),0)))

Ctrl+Shift+Enter
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#5

Post by joo »

ขอบคุณครับท่านอาจารย์ทดลองดูแล้วแต่ยังไม่ตรงกับที่ต้องการครับ เช่น รหัส 2000 ผ่านการอบรมมาแล้ว 2 ครั้ง ข้อมูลที่แสดงออกมากลับมากกว่า 2 ครั้ง เดิมทีผมใช้สูตรแบบนี้
=IF(ROWS($C$12:C12)>$F$7,"",INDEX(Database!A$4:A$10,SMALL(IF(Database!$B$4:$B$10=Report!$F$5,ROW(Database!$A$4:$A$10)-ROW(Database!$B$4)+1),ROWS($C$12:C12))))
ค่าที่แสดงออกมาได้ถูกต้องเพียงแต่เข้าเงื่อนไขเดียวเท่านั้นพอเปลี่ยนปีข้อมูลกลับไม่เปลี่ยนตามครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#6

Post by snasui »

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

สูตรด้านบน :roll: ที่เขียนมาใช้เพื่อทำการ List รายการที่เข้าเงื่อนไขทั้งหมดออกมาแสดง หากมี 10 รายการก็จะ List ออกมาทั้งหมด (หากมีการ Copy สูตรลงไปทางด้านล่าง)
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#7

Post by joo »

ที่ซีท Report เซลล์ C12:M12 ต้องแสดงค่าที่ถูกต้องตามเงื่อนไข F5 และ F6 ตัวอย่างคำตอบตามไฟล์แนบครับ
ที่ซีท look1 ต้องการหาจำนวนบุคคลโดยไม่ต้องใช้คอลัมภ์เข้ามาช่วยโดยมีเงื่อนไขตาม F4 และ F5 ต้องปรับสูตรอย่างไรดีครับ :D
You do not have the required permissions to view the files attached to this post.
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#8

Post by joo »

ผมลองใช้วิธีนี้ดูไม่แน่ใจว่าถูกวิธีหรือไม่ครับ ที่ซีท Report เซลล์ F7 คีย์ =SUMPRODUCT(--(Database!$B$4:$B$10=F$5),--(Database!$A$4:$A$10=$F6)) ทดสอบเปลี่ยนรหัสและปีดูก็สามารถแสดงค่าได้ถูกต้องครับ ส่วนซีทอื่นๆก็แสดงได้ถูกต้องเหมือนกันครับ:D
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#9

Post by snasui »

:lol: จากโจทย์ด้านล่าง
ค้นหาข้อมูลโดยใช้ รหัสบุคคลและปีงบประมาณเป็นเงื่อนไขในการค้นหา เมื่อเปลี่ยนปีงบประมาณหรือรหัสบุคคลอย่างใดอย่างหนึ่งให้ข้อมูลที่แสดงมีการเปลี่ยนแปลงตามเงื่อนไข ถ้าไม่มีก็ให้แสดงค่าว่าง แต่ปัจจุบันทำได้เพียงเงื่อนไขเดียว คำตอบที่ต้องการคือเมื่อเลือกรหัสบุคคลและปีก็ให้แสดงค่าตามตัวอย่างนี้ครับ
และตัวอย่างสูตรทีใช้ดึงข้อมูลที่ C12 คือ

=IF(ROWS($C$12:C12)>$F$7,"",INDEX(Database!A$5:A$11,SMALL(IF(Database!$B$5:$B$11=$F$5,ROW(Database!$A$5:$A$11)-ROW(Database!$B$5)+1),ROWS($C$12:C12))))

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

=IF(ROWS($C$12:C12)>$F$7,"",INDEX(Database!A$5:A$11,SMALL(IF(Database!$B$5:$B$11=$F$5,IF(Database!$A$4:$A$10=$F$6,ROW(Database!$A$5:$A$11)-ROW(Database!$B$5)+1)),ROWS($C$12:C12))))

นอกจากนี้ที่ B12 ควรปรับสูตรเดิมคือ

=IF(C12<>"",(ROW()-11)*(NOT(ISBLANK(C12))),"")

เป็น

=IF(ROWS(B$12:B12)>$F$7,"",ROWS(B$12:B12))

Enter

ทั้งนี้เพื่อความยืดหยุ่น สำหรับการใช้ Row() แล้วลบด้วยบรรทัดก่อนหน้าจะมีปัญหาได้หากมีการลบหรือแทรกบรรทัด ต้องคอยแก้สูตรอยู่เรื่อยไป
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#10

Post by joo »

ขอบคุณครับสำหรับคำแนะนำในการปรับปรุงแก้ไขสูตร ทดลองแล้วสามารถใช้งานได้ดีครับ :D
มีคำถามเพิ่มครับที่ซีท look1 เซลล์ C11 ผมใช้สูตรค้นหาข้อมูลโดยมีเงื่อนไขคือเดือนกับปี เมื่อนำไปใช้กับข้อมูลปริมาณมากๆ พบว่าคำนวณช้ามากหรือว่ามันเป็นธรรมดาของสูตรแบบอเรย์ครับ พอมีวิธีแก้ไขให้เร็วขึ้นบ้างไหมครับ สูตรที่ใช้แบบนี้ครับ
=IF(ROWS($C$11:C11)>$F$6,"",INDEX(Database!A$4:A$11,SMALL(IF(TEXT(Database!$F$4:$F$10,"mmmm")=$F$4,IF(Database!$A$4:$A$10=$F$5,ROW(Database!$A$4:$A$10)-ROW(Database!$B$4)+1)),ROWS($C$11:C11))))
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#11

Post by bank9597 »

:D จากไฟล์แนบอันล่าสุด ชีท look1 เซลล์ C11 มีสูตรนี้ =IF(N($B11),LOOKUP($B11,Database!$M:$M,Database!A:A),"")

ผมดูผิดตรงไหนไหมหนอ :roll:
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#12

Post by snasui »

joo wrote:ขอบคุณครับสำหรับคำแนะนำในการปรับปรุงแก้ไขสูตร ทดลองแล้วสามารถใช้งานได้ดีครับ :D
มีคำถามเพิ่มครับที่ซีท look1 เซลล์ C11 ผมใช้สูตรค้นหาข้อมูลโดยมีเงื่อนไขคือเดือนกับปี เมื่อนำไปใช้กับข้อมูลปริมาณมากๆ พบว่าคำนวณช้ามากหรือว่ามันเป็นธรรมดาของสูตรแบบอเรย์ครับ พอมีวิธีแก้ไขให้เร็วขึ้นบ้างไหมครับ สูตรที่ใช้แบบนี้ครับ
=IF(ROWS($C$11:C11)>$F$6,"",INDEX(Database!A$4:A$11,SMALL(IF(TEXT(Database!$F$4:$F$10,"mmmm")=$F$4,IF(Database!$A$4:$A$10=$F$5,ROW(Database!$A$4:$A$10)-ROW(Database!$B$4)+1)),ROWS($C$11:C11))))
:lol: กรณีคำนวณช้าเป็นธรรมดาของสูตร Array ครับ :mrgreen:

การจะให้คำนวณเร็วขึ้นควรแทรกคอลัมน์สำหรับ List ลำดับของรายการจากข้อมูลทั้งหมดแล้วใช้ Index เข้ามาช่วย สูตรสำหรับคอลัมน์ช่วยก็จะได้เป็น เช่น Z12 คีย์

=IF(ROWS($C$11:C11)>$F$6,"",SMALL(IF(TEXT(Database!$F$4:$F$10,"mmmm")=$F$4,IF(Database!$A$4:$A$10=$F$5,ROW(Database!$A$4:$A$10)-ROW(Database!$B$4)+1)),ROWS($C$11:C11)))

Ctrl+Shift+Enter > Copy ลงด้านล่าง

จากนั้นใช้ Index เข้ามาช่วย เช่น

=INDEX(Database!A$4:A$11,$Z12)

Enter > Copy ไปด้านขวาและลงด้านล่าง
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#13

Post by bank9597 »

:D ตอบไม่เคยทันอาจารย์เลยจริงๆ :lol: :lol: :lol:
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#14

Post by joo »

ขอบคุณครับ ทดลองแล้วสามารถคำนวณได้เร็วขึ้นกว่าเดิมมากเลยครับ :D
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#15

Post by joo »

ขอคำแนะนำเพิ่มครับ คือว่าผมได้ลองใช้ VBA ช่วยในการค้นหาข้อมูลมาแสดง ที่ซีท Search โดยมี 2 เงื่อนไขคือ รหัสบุคคลกับปีงบประมาณ
และที่ซีท Search1 ค้นหาโดยมีเงื่อนไขคือ เดือนกับปีงบประมาณ ช่วยดูโค๊ดให้หน่อยครับต้องปรับเพิ่มแก้ไขอย่างไรดีครับ :D
You do not have the required permissions to view the files attached to this post.
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#16

Post by bank9597 »

:D ลองตามนี้ครับ
ที่ M3 คีย์ =E4
ที่ N3 คีย์ =E6
ที่ M4 คีย์ =F4
ที่ N4 คีย์ =F6
Procedure ชื่อ ShowDataTraining ปรับโค๊ดเป็น

Code: Select all


Sub ShowDataTraining()
    On Error Resume Next
    Application.EnableEvents = False
    Sheets("Database").Range("A3:K100").AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Sheets("Search").Range("M3:N4")
    Sheets("Database").Range("A4:K100").SpecialCells(xlCellTypeVisible).Copy
    Sheets("Search").Range("C12").PasteSpecial xlPasteValues
    Sheets("Database").ShowAllData
    Range("F4").Activate
    Application.CutCopyMode = False
    Application.EnableEvents = True
End Sub


ในชีท Search ปรับโค๊ดเป็น

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("F4:F6")) Is Nothing Then
        Call ShowDataTraining
    End If
End Sub
You do not have the required permissions to view the files attached to this post.
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#17

Post by joo »

ขอบคุณครับคุณ bank9597 ที่แนะนำ ได้ทดลองดูแล้วก็ใช้งานได้ดี แต่ก็ต้องใส่สูตรเพิ่มเติมที่คอลัมภ์ B12 ไว้ล่วงหน้าและถ้าข้อมูลใน Database มีปริมาณมากก็จะต้องคอยปรับแก้ไข
เรนจ์ที่อ้างอิงในโค๊ดอยู่เรื่อยๆซึ่งดูแล้วไม่ค่อยยืดหยุ่นเท่าไร จากโค๊ดด้านล่างนี้น่าจะยืดหยุ่นดีเพียงแต่จะเพิ่มเงื่อนไขที่2ไว้ตรงไหนดีนี้แหละช่วยดูให้หน่อยครับ :D

Code: Select all

Option Explicit
Option Base 1

Sub ShowDataTraining()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("Database")
    Set rAll = .Range("B4", .Range("B" & rl).End(xlUp))
End With
For Each r In rAll
    If r = Worksheets("Search").Range("F5") Then
        lng = lng + 1
        ReDim Preserve a(12, lng)
        a(1, lng) = lng
        a(2, lng) = r.Offset(0, -1)
        a(3, lng) = r.Offset(0, 0)
        a(4, lng) = r.Offset(0, 1)
        a(5, lng) = r.Offset(0, 2)
        a(6, lng) = r.Offset(0, 3)
        a(7, lng) = r.Offset(0, 4)
        a(8, lng) = r.Offset(0, 5)
        a(9, lng) = r.Offset(0, 6)
        a(10, lng) = r.Offset(0, 7)
        a(11, lng) = r.Offset(0, 8)
        a(12, lng) = r.Offset(0, 9)
       
    End If
Next r
If lng > 0 Then
  With Worksheets("Search")
        Set rt = .Range("B12", .Range("Q" & lng - 1 + 12))
        If .Range("B12") <> "" Then 'Check if isblank
             .Range("B12", .Range("B" & rl).End(xlUp).Offset(0, 4)).ClearContents
        End If
        .Range("B12:M12").Copy
        rt.PasteSpecial xlPasteFormats
        rt = Application.Transpose(a)
        .Range("D12", .Range("D" & rl).End(xlUp)).NumberFormat = "00000"
        .Range(.Range("B11").End(xlDown).Offset(1, 0), .Range("Q" & rl)).Clear 'Change new start cell
        .Range("F4").Activate
    End With
Else
    MsgBox "Data not found."
End If
'Range("A5:E5").AutoFilter
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#18

Post by snasui »

joo wrote:ถ้าข้อมูลใน Database มีปริมาณมากก็จะต้องคอยปรับแก้ไข
เรนจ์ที่อ้างอิงในโค๊ดอยู่เรื่อยๆซึ่งดูแล้วไม่ค่อยยืดหยุ่นเท่าไร
:lol: เราสามารถปรับ Code ให้ยืดหยุ่นได้ครับ เช่น จาก

Code: Select all

Sheets("Database").Range("A3:K100").AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Sheets("Search").Range("M3:N4")
เราสามารถเปลี่ยนเป็น

Code: Select all

Sheets("Database").Range("A3",Range("K" & Rows.Count).End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Sheets("Search").Range("M3:N4")
ส่วน Code การ Search ด้วย Array นั้นไม่ง่ายนักแต่ก็เป็นประโยชน์หากต้องการเรียนรู้ กรณีมีเงื่อนไขอื่น ๆ หลายเงื่อนไข สามารถปรับที่ Code ด้านล่างครับ

Code: Select all

For Each r In rAll
    If r = Worksheets("Search").Range("F5") Then
ยกตัวอย่างเช่นปรับเป็น

Code: Select all

For Each r In rAll
    If r = Worksheets("Search").Range("F5") And r.Offset(0,1) = Worksheet("Search").Range("F6") Then
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#19

Post by bank9597 »

:D ผมไม่ค่อยเก่ง VBA เลยครับ (สูตรก็ไม่เก่ง) ต้องขออภัยจริงๆ คงต้องรอให้อาจารย์มาดูให้อีกทีน่ะครับ

สำหรับตามวิธีผมนั้น ผมทำตามที่พอทำได้ คือ ใช้สูตรเข้ามาช่วย โดยการกำหนด RangeName เข้ามาช่วย แต่หากเก่ง VBA แล้วก็ไม่จำเป็นต้องทำแบบนี้ครับ :D
ตามไฟล์แนบครับ
You do not have the required permissions to view the files attached to this post.
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: ค้นหาข้อมูลโดยใช้สูตรและคอลัมภ์ช่วย

#20

Post by joo »

ขอบคุณครับที่ช่วยแนะนำสำหรับโค๊ดที่ท่านอาจารย์แนะนำ

Code: Select all

Sheets("Database").Range("A3",Range("K" & Rows.Count).End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Sheets("Search").Range("M3:N4")
ทดสอบแล้วพบว่าข้อมูลแสดงออกมาหมดเลยไม่ตรงตามเงื่อนไข
และโค๊ดนี้

Code: Select all

For Each r In rAll
    If r = Worksheets("Search").Range("F5") And r.Offset(0,1) = Worksheets("Search").Range("F6") Then
ทดลองดูแล้วข้อมูลไม่ยอมแสดง ขึ้นคำว่า Data No found ตลอดครับ :D
Post Reply