: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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
banknurak
Member
Member
Posts: 86
Joined: Sat Feb 03, 2018 11:09 am

ดึงข้อมูลข้ามชีส โดยมีเงื่อนไขที่ต้องการก่อน แล้วถึงดึงมา

#1

Post by banknurak »

Sheet "final" อยากให้ดึงข้อมูลA2:A6 โดยมีเงื่อนไขดังนี้

ถ้า Sheet "data" ให้ไปดูคอลัมน์ B2:B6 = "YES" และ คอลัมน์ C2:C6 =1

ให้ดึง ช่อง A2:A6 ที่ตรงตาม2เงื่อนไขตามด้านบน มาให้ทีครับ

รบกวนหน่อยครับ
test.xlsx
You do not have the required permissions to view the files attached to this post.
User avatar
norkaz
Gold
Gold
Posts: 1739
Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365

Re: ดึงข้อมูลข้ามชีส โดยมีเงื่อนไขที่ต้องการก่อน แล้วถึงดึงมา

#2

Post by norkaz »

..

A2
=IFERROR(INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))),"")


Norkaz
You do not have the required permissions to view the files attached to this post.
banknurak
Member
Member
Posts: 86
Joined: Sat Feb 03, 2018 11:09 am

Re: ดึงข้อมูลข้ามชีส โดยมีเงื่อนไขที่ต้องการก่อน แล้วถึงดึงมา

#3

Post by banknurak »

norkaz wrote: Tue Apr 27, 2021 5:02 pm ..

A2
=IFERROR(INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))),"")


Norkaz

ขอบคุณมากครับ

พวกตัวเลข 15,6,row มันมีความหมายว่าอย่างไรหรอครับ รบกวนอธิบายหน่อยได้ไหมครับ / ด้วยครับ อธอิบายความหมายของสูตรหน่อยได้ไหมครับ
User avatar
norkaz
Gold
Gold
Posts: 1739
Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365

Re: ดึงข้อมูลข้ามชีส โดยมีเงื่อนไขที่ต้องการก่อน แล้วถึงดึงมา

#4

Post by norkaz »

..

ฟังก์ชั่นหลักๆ ประกอบด้วย ROW,AGGREGATE,INDEX

ผลลัพธ์ A1 มาจาก =INDEX(data!A:A,2)
ผลลัพธ์ A4 มาจาก=INDEX(data!A:A,5)
ผลลัพธ์ A5 มาจาก=INDEX(data!A:A,6)

ถ้าหา เลข 2,5,6 ได้ ก็ได้คำตอบที่ต้องการ

=============

A2
=IFERROR(INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))),"")

=============

a) =(data!$B$2:$B$99="Yes")

ผลลัพธ์ที่ได้
TRUE;FALSE;TRUE;TRUE;TRUE;…......ที่เหลือเป็น FALSE ทั้งหมด ไม่สนใจ สนใจเฉพาะ 5 รายการแรกตามโจทย์

=============

b) =(data!$C$2:$C$99=1)

ผลลัพธ์ที่ได้
TRUE;FALSE;FALSE;TRUE;TRUE;…........ที่เหลือเป็น FALSE ทั้งหมด ไม่สนใจ สนใจเฉพาะ 5 รายการแรกตามโจทย์

=============

c) (data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1)

ผลลัพธ์ที่ได้
1;#DIV/0!;#DIV/0!;1;1;….........ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ สนใจเฉพาะ 5 รายการแรกตามโจทย์

=============

d) ROW($2:$99) หมายถึง เลข 2,3,4,5,6…...........99

=============

e) ROW($2:$99)/ผลลัพธ์ที่ได้จาก c

กลายมาเป็น.......
ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1)

ซึ่งคือด้านล่างนี้
(2;3;4;5;6…............99) / (1;#DIV/0!;#DIV/0!;1;1;….........)

ผลลัพธ์ที่ได้
2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ

=============

f) =AGGREGATE(15,6,…..ชุดข้อมูล........,ตามลำดับที่)

AGGREGATE(15 หมายถึงให้ไล่ค่าจากน้อยไปมาก
6 หมายถึง ไม่สนใจค่า ERROR ทุกชนิด ในชุดข้อมูล

ROW(1:1) =1
ROW(2:2) =2
ROW(3:3) =3

ไปเรื่อยๆ.......

=AGGREGATE(15,6,.... ผลลัพธ์ที่ได้จาก e,ROW(1:1))

=AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))

กลายมาเป็น.......
=AGGREGATE(15,6,2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ,ROW(1:1))

ผลลัพธ์ที่ได้ คือเลข 2

เมื่อ Copy ลงไป ROW จะวิ่งตามไป จาก 1 เป็น 2 เป็น 3..................

=AGGREGATE(15,6,2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ,ROW(2:2))

ผลลัพธ์ที่ได้ คือเลข 5

เมื่อ Copy ลงไป

=AGGREGATE(15,6,2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ,ROW(3:3))

ผลลัพธ์ที่ได้ คือเลข 6

=============

g) ใช้ INDEX ไปครอบ
=INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1)))

=INDEX(data!A:A,2)
=INDEX(data!A:A,5)
=INDEX(data!A:A,6)

=============

h) ใช้ IFERROR ไปครอบบังคับให้ค่า ERROR เป็นค่าว่าง

=IFERROR(INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))),"")

Norkaz
banknurak
Member
Member
Posts: 86
Joined: Sat Feb 03, 2018 11:09 am

Re: ดึงข้อมูลข้ามชีส โดยมีเงื่อนไขที่ต้องการก่อน แล้วถึงดึงมา

#5

Post by banknurak »

norkaz wrote: Wed Apr 28, 2021 6:48 pm ..

ฟังก์ชั่นหลักๆ ประกอบด้วย ROW,AGGREGATE,INDEX

ผลลัพธ์ A1 มาจาก =INDEX(data!A:A,2)
ผลลัพธ์ A4 มาจาก=INDEX(data!A:A,5)
ผลลัพธ์ A5 มาจาก=INDEX(data!A:A,6)

ถ้าหา เลข 2,5,6 ได้ ก็ได้คำตอบที่ต้องการ

=============

A2
=IFERROR(INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))),"")

=============

a) =(data!$B$2:$B$99="Yes")

ผลลัพธ์ที่ได้
TRUE;FALSE;TRUE;TRUE;TRUE;…......ที่เหลือเป็น FALSE ทั้งหมด ไม่สนใจ สนใจเฉพาะ 5 รายการแรกตามโจทย์

=============

b) =(data!$C$2:$C$99=1)

ผลลัพธ์ที่ได้
TRUE;FALSE;FALSE;TRUE;TRUE;…........ที่เหลือเป็น FALSE ทั้งหมด ไม่สนใจ สนใจเฉพาะ 5 รายการแรกตามโจทย์

=============

c) (data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1)

ผลลัพธ์ที่ได้
1;#DIV/0!;#DIV/0!;1;1;….........ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ สนใจเฉพาะ 5 รายการแรกตามโจทย์

=============

d) ROW($2:$99) หมายถึง เลข 2,3,4,5,6…...........99

=============

e) ROW($2:$99)/ผลลัพธ์ที่ได้จาก c

กลายมาเป็น.......
ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1)

ซึ่งคือด้านล่างนี้
(2;3;4;5;6…............99) / (1;#DIV/0!;#DIV/0!;1;1;….........)

ผลลัพธ์ที่ได้
2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ

=============

f) =AGGREGATE(15,6,…..ชุดข้อมูล........,ตามลำดับที่)

AGGREGATE(15 หมายถึงให้ไล่ค่าจากน้อยไปมาก
6 หมายถึง ไม่สนใจค่า ERROR ทุกชนิด ในชุดข้อมูล

ROW(1:1) =1
ROW(2:2) =2
ROW(3:3) =3

ไปเรื่อยๆ.......

=AGGREGATE(15,6,.... ผลลัพธ์ที่ได้จาก e,ROW(1:1))

=AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))

กลายมาเป็น.......
=AGGREGATE(15,6,2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ,ROW(1:1))

ผลลัพธ์ที่ได้ คือเลข 2

เมื่อ Copy ลงไป ROW จะวิ่งตามไป จาก 1 เป็น 2 เป็น 3..................

=AGGREGATE(15,6,2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ,ROW(2:2))

ผลลัพธ์ที่ได้ คือเลข 5

เมื่อ Copy ลงไป

=AGGREGATE(15,6,2;#DIV/0!;#DIV/0!;5;6;.....ที่เหลือเป็น #DIV/0! ทั้งหมด ไม่สนใจ,ROW(3:3))

ผลลัพธ์ที่ได้ คือเลข 6

=============

g) ใช้ INDEX ไปครอบ
=INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1)))

=INDEX(data!A:A,2)
=INDEX(data!A:A,5)
=INDEX(data!A:A,6)

=============

h) ใช้ IFERROR ไปครอบบังคับให้ค่า ERROR เป็นค่าว่าง

=IFERROR(INDEX(data!A:A,AGGREGATE(15,6,ROW($2:$99)/(data!$B$2:$B$99="Yes")/(data!$C$2:$C$99=1),ROW(1:1))),"")

Norkaz
โอ้วโห สุดยอดมากครับ ขอบคุณที่สละเวลามาอธิบายให้ผมทราบนะครับ ขอบคุณมากๆครับ
Post Reply