: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

ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
OonjunG
Member
Member
Posts: 13
Joined: Tue Oct 13, 2015 9:20 pm

ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#1

Post by OonjunG »

เรียนทุกท่าน รบกวนขอสอบถามปัญหาดังนี้ครับ

จากตารางที่แนบมานั้น ใน worksheet "RAW DATA" เป็นข้อมูลลูกหนี้ที่ทั้งหมดโดย Column "E" เป็นข้อมูลที่บอกว่าสถานะการชำระหนี้ของลูกหนี้แต่ละราย

คำถามคือ ผมต้องการที่จะสรุปข้อมูลว่ามีลูกหนี้รายใดบ้างที่มีการชำระหนี้ล่าช้าเกินกว่า 60 วัน ใน worksheet "summary" โดยให้ดึงข้อมูลลูกหนี้, กลุ่ม, ยอดหนี้ ของลูกหนี้ที่มีชำระหนี้ล่าช้าเกินกว่า 60 วัน มาจากตารางใน worksheet "RAW DATA" ครับ ซึ่งตามตารางจะมีลูกหนี้ที่ชำระหนี้ล่าช้าเกินกว่า 60 วัน ทั้งสิ้น 3 รายคือ F, K, L

ขอบคุณล่วงหน้าครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#2

Post by snasui »

:D เซลล์ C7 คีย์สูตรตามด้านล่างครับ

=IFERROR(INDEX('RAW DATA'!C$7:C$26,AGGREGATE(15,6,1/('RAW DATA'!$E$7:$E$26=4)*(ROW('RAW DATA'!$E$7:$E$26)-ROW('RAW DATA'!$E$7)+1),ROWS(C$7:C7))),"")

Enter > Copy ลงด้านล่าง จากนั้น Copy ไปใช้ยังคอลัมน์ที่เกี่ยวข้องโดยปรับช่วงข้อมูลที่ผมระบายสีให้ตรงกับข้อมูลที่ต้องการนำมาแสดงครับ
OonjunG
Member
Member
Posts: 13
Joined: Tue Oct 13, 2015 9:20 pm

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#3

Post by OonjunG »

ขอบคุณมากครับ ตรงตามที่ต้องการครับ อย่างไรก็ตาม ช่วยอธิบายการทำงานของสูตรด้วยได้ไหมครับ เพื่อที่จะได้สามารถเอาไปประยุกต์ใช้ได้ในอนาคตครับ
OonjunG
Member
Member
Posts: 13
Joined: Tue Oct 13, 2015 9:20 pm

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#4

Post by OonjunG »

ขออนุณาตถามต่อครับ สูตรนี้สามารถใช้กับ excel 2007 ได้รึป่าวครับ เนื่องจากตอนที่ลองครั้งแรกกับ excel 2010 ใช้ได้ แต่พอมาใช้กับ excel 2007 มันใช้ไม่ได้ครับ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#5

Post by DhitiBank »

Excel 2007 ไม่มีฟังก์ชัน Aggregate ครับ หากต้องใช้ในเวอร์ชัน 2007 ลองปรับสูตรที่ C7 เป็น

=IFERROR(INDEX('RAW DATA'!C$7:C$26,SMALL(IF('RAW DATA'!$E$7:$E$26=4,ROW('RAW DATA'!$E$7:$E$26)-ROW('RAW DATA'!$E$7)+1),ROWS(C$7:C7))),"")

จากนั้นกด Ctrl+Shift ค้างไว้ แล้ว Enter --> คัดลอกลงและปรับช่วงตรงสีแดงเมื่อคัดลอกไปคอลัมน์อื่นครับ
OonjunG
Member
Member
Posts: 13
Joined: Tue Oct 13, 2015 9:20 pm

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#6

Post by OonjunG »

ขอบคุณมากครับ อย่างไรก็ตาม ช่วยอธิบายการทำงานของสูตรด้วยได้ไหมครับ เพื่อที่จะได้สามารถเอาไปประยุกต์ใช้ได้ในอนาคตครับ
User avatar
DhitiBank
Gold
Gold
Posts: 1676
Joined: Mon Oct 15, 2012 12:07 am

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#7

Post by DhitiBank »

ได้ครับ จะลองดูนะครับ
จากสูตร
=IFERROR(INDEX('RAW DATA'!C$7:C$26,SMALL(IF('RAW DATA'!$E$7:$E$26=4,ROW('RAW DATA'!$E$7:$E$26)-ROW('RAW DATA'!$E$7)+1),ROWS(C$7:C7))),"")

ดูจากข้างนอกเข้าไปแล้วกันครับ

:arrow: (1) =Iferror(...(2)...,"")
สูตรนี้เอาไว้ดักค่า error ครับ หากผลลัพธ์จากข้อ (2) เป็นค่า error สูตรก็จะให้แสดงค่าว่างแทน

:arrow: (2) INDEX('RAW DATA'!C$7:C$26,[color=#FF0000]n[/color])
Index จะคืนค่าเป็นข้อมูลใน 'RAW DATA'!C$7:C$26 ตำแหน่งใดตำแหน่งหนึ่งขึ้นกับค่า n ครับ เช่น ค่า n=2 ก็จะเอาค่าในเซลล์ C8 ในชีท Raw Data มาแสดง โดยค่า n ได้มาจากข้อ (3)

:arrow: (3) SMALL(...(4)...,[color=#FF00FF]x[/color])
สูตร Small ตามชื่อเลยครับ คือจะเลือกเอาค่าที่น้อยที่สุดเป็นลำดับที่ x มาจาก (4) โดยค่า x นี่ได้มาจากสูตร ROWS(C$7:C7) สูตรนี้เป็นการนับจำนวนแถวระหว่างเซลล์ C7:C7 ก็คือ 1 (หมายความว่าให้เอาค่าน้อยที่สุดเป็นอันดับ 1 ในข้อ (4) มาแสดง หากคัดลอกลงไปเรื่อยๆ สูตร Rows ก็จะให้ค่า 2, 3, 4, 5, ... ไปเรื่อยๆ ครับ

:arrow: (4) IF('RAW DATA'!$E$7:$E$26=4,ROW('RAW DATA'!$E$7:$E$26)-ROW('RAW DATA'!$E$7)+1)
สูตร If ใช้เพื่อหาว่าบรรทัดไหนใน 'RAW DATA'!$E$7:$E$26 มีค่าเป็น 4 บ้าง หาก =4 ก็ให้แทนค่าด้วยผลลัพธ์ที่ได้จาก

ROW('RAW DATA'!$E$7:$E$26)-ROW('RAW DATA'!$E$7)+1

สูตรนี้เป็นการสร้างลำดับให้ข้อมูลในช่วง E7:E26 ครับ คือ
={7;8;9;10;11;...;26}-{7}+1
={0;1;2;3;4;...;19}+1
={1;2;3;4;5;...;20}


สมมติว่าข้อมูลในเซลล์ E7, E8 และ E26 เท่านั้น ที่เป็น 4 ผลที่ได้จากสูตร If คือ
{1;2;False;False;False;...;False;20}


:!: สรุปคร่าวๆ คือ สูตร If จะเลือกว่าข้อมูลลำดับไหนในชีท RawData ที่เราต้องการบ้าง เสร็จแล้วสูตร Small จะเลือกตำแหน่งที่ใกล้ที่สุดที่พบออกมา (หากเอาตามที่สมมติข้างบน บรรทัดแรกสูตร Small จะให้ค่า 1, บรรทัดที่สองจะให้ค่า 2, บรรทัดที่สามจะให้ค่า 20) แล้ว Index ก็จะคืนค่าเป็นข้อมูลในตำแหน่งไหนในช่วงอ้างอิงก็ขึ้นกับค่าที่ได้จาก Small ครับ
:!: สูตรข้างต้นนี้เป็นสูตรอาร์เรย์ จึงต้องกดรับสูตรด้วย Ctrl+Shift+Enter ครับ

ส่วนสูตร Aggregate ที่อาจารย์ให้มาเป็นสูตรใหม่ การทำงานหลากหลายมากและอาจไม่ต้องกดรับสูตรแบบอาร์เรย์ ลองอ่านเพิ่มเติมได้ที่ลิงค์ด้านล่างครับ (สูตรอื่นๆ ก็ค้นหาได้จาก Microsoft Office support เช่นกันครับ)
OfficeSupport-Aggregate
OonjunG
Member
Member
Posts: 13
Joined: Tue Oct 13, 2015 9:20 pm

Re: ดึงข้อมูลโดยมีเงื่อนไขจากตารางข้อมูลที่ไม่ได้อยู่ใน worksheet เดียวกัน

#8

Post by OonjunG »

ขอบคุณมากครับสำหรับคำตอบและคำอธิบาย ผมได้ลองหาตาม internet โดยเฉพาะ Microsoft Office Support แล้วครับ แต่อ่านไม่รู้เรื่อง T_T ของคุณทั้ง 2 ท่านมากครับ
Post Reply