: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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

สูตรแยกข้อมูลของแต่ละแถว

#1

Post by Jirawat namrach »

ต้องการนำลำดับเลขที่ในช่อง A ไปวางไว้ในช่อง J5-J7 โดยเทียบข้อมูลจากช่อง AA กับ ช่อง G5-G7 และดึงเฉพาะวันที่ที่ตรงกับ ช่อง N7 ตัวอย่างตามไฟล์แนบ
รบกวนด้วยครับ ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30796
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรแยกข้อมูลของแต่ละแถว

#2

Post by snasui »

:D ตัวอย่างสูตรตามด้านล่างครับ
  1. ที่ AB5 คีย์
    =IFERROR(DAY(INDEX($A:$A,AGGREGATE(15,6,ROW($AB$11:$AB$20)/($AA$11:$AA$20=$G5),COLUMNS($AB5:AB5)))),"")
    Enter > Copy ไปด้านขวาเท่าที่คิดว่าข้อมูลขยายไปถึงแล้ว Copy ลงด้านล่างถึงบรรทัดที่ 7
  2. ที่ J5 คีย์
    =SUBSTITUTE(TRIM(SUBSTITUTE(AB5&","&AC5&","&AD5&","&AE5&","&AF5,","," "))," ",",")
    Enter > Copy ลงด้านล่างถึง J7
สูตรแรกประกอบด้วย IFERROR, DAY, INDEX, AGGREGATE, ROW, COLUMNS ความหมายแต่ละส่วนของสูตรมีดังนี้
  1. INDEX($A$A,AGGREGATE(15,6,ROW($AB$11$AB$20)/($AA$11$AA$20=$G5),COLUMNS($AB5AB5))) ฟังก์ชันนี้จะค้นหาค่าในคอลัมน์ A โดยใช้ตำแหน่งที่ได้จากฟังก์ชัน AGGREGATE
  2. AGGREGATE(15,6,ROW($AB$11$AB$20)/($AA$11$AA$20=$G5),COLUMNS($AB5AB5)) ฟังก์ชันนี้จะคืนค่าตำแหน่งที่ COLUMNS($AB5AB5) ในอาร์เรย์ที่สร้างจาก ROW($AB$11$AB$20)/($AA$11$AA$20=$G5) ฟังก์ชัน AGGREGATE ทำหน้าที่เป็น SMALL ถ้าพารามิเตอร์แรกเป็น 15 และ 6 คือการละเว้นค่าผิดพลาด
  3. DAY(INDEX(...)) ฟังก์ชันนี้จะคืนค่าวันจากวันที่ที่ได้จากฟังก์ชัน INDEX
  4. IFERROR(DAY(...),"") ฟังก์ชันนี้จะคืนค่าวันที่ถ้าไม่มีข้อผิดพลาด แต่ถ้ามีข้อผิดพลาดจะคืนค่าเป็นสตริงว่าง
ดังนั้น สูตรนี้จะคืนค่าวันที่จากคอลัมน์ A ที่ตรงกับเงื่อนไขในคอลัมน์ AA และ AB ถ้าไม่มีข้อผิดพลาด แต่ถ้ามีข้อผิดพลาดจะคืนค่าเป็นสตริงว่าง

สูตรที่สองประกอบด้วย SUBSTITUTE และ TRIM ร่วมกัน ความหมายแต่ละส่วนของสูตรมีดังนี้
  1. AB5&","&AC5&","&AD5&","&AE5&","&AF5 ส่วนนี้จะรวมข้อมูลจากเซลล์ AB5, AC5, AD5, AE5, และ AF5 โดยแยกแต่ละเซลล์ด้วยเครื่องหมายจุลภาค (comma)
  2. SUBSTITUTE(AB5&","&AC5&","&AD5&","&AE5&","&AF5,","," ") ฟังก์ชันนี้จะแทนที่เครื่องหมายจุลภาค (comma) ด้วยช่องว่าง (space)
  3. TRIM(SUBSTITUTE(...)) ฟังก์ชันนี้จะลบช่องว่างที่มากเกินไปจากข้อความที่ได้จากฟังก์ชัน SUBSTITUTE
  4. SUBSTITUTE(TRIM(...)," ",",") ฟังก์ชันนี้จะแทนที่ช่องว่าง (space) ด้วยเครื่องหมายจุลภาค (comma)
ดังนั้น สูตรนี้จะรวมข้อมูลจากเซลล์ AB5, AC5, AD5, AE5, และ AF5 โดยแยกแต่ละเซลล์ด้วยเครื่องหมายจุลภาค (comma) และลบช่องว่างที่มากเกินไป
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: สูตรแยกข้อมูลของแต่ละแถว

#3

Post by Jirawat namrach »

ยังขาดข้อมูลส่วนที่เทียบกับวันที่ช่อง N7 ครับ ให้ดึงข้อมูลเฉพาะที่เป็นวันที่เดียวกันกับช่อง N7 เท่านั้นครับ ข้อมูลในช่อง J6 เลยไม่ถูกต้อง เพราะเลข 4 เป็นของวันที่ 10-06-24 ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30796
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรแยกข้อมูลของแต่ละแถว

#4

Post by snasui »

:D ตัวอย่างการปรับสูตรใน AB5 ครับ

=IFERROR(DAY(INDEX($A:$A,AGGREGATE(15,6,ROW($AB$11:$AB$20)/(($AA$11:$AA$20=$G5)*($AB$11:$AB$20=$N$7)),COLUMNS($AB5:AB5)))),"")
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: สูตรแยกข้อมูลของแต่ละแถว

#5

Post by Jirawat namrach »

ได้ตามต้องการ ขอบคุณอาจารย์มากครับ สำหรับสูตร และคำอธิบายวิธีการใช้งานของแต่ละสูตรครับ
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: สูตรแยกข้อมูลของแต่ละแถว

#6

Post by Jirawat namrach »

สอบถามเพิ่มครับอาจารย์ จากที่ได้ทดลองใช้งานจริงแล้ว มีบางสูตรคืนค่าเป็นวันที่ ทำให้รายการกำหนดได้แค่ 31 (โปรแกรมน่าจะรู้จักวันที่แค่ 31 วัน) ถ้าต้องการมากกว่า 31 จะต้องแก้ไขยังไงได้บ้างครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30796
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สูตรแยกข้อมูลของแต่ละแถว

#7

Post by snasui »

:D ปรับสูตรที่เซลล์ AB2 เป็นด้านล่างครับ

=IFERROR(INDEX($A:$A,AGGREGATE(15,6,ROW($AB$11:$AB$200)/(($AA$11:$AA$200=$G5)*($AB$11:$AB$200=$N$7)),COLUMNS($AB5:AB5))),"")

คัดลอกไปด้านขวาและลงด้านล่าง
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: สูตรแยกข้อมูลของแต่ละแถว

#8

Post by Jirawat namrach »

ขอบคุณมากครับอาจารย์
Post Reply