สารบัญ
วิธีที่เร็วที่สุดในการแปลงคอลัมน์หรือแถวของค่าเป็นอาร์เรย์สองมิติคือการใช้ฟังก์ชัน WRAPCOLS หรือ WRAPROWS
ตั้งแต่วันแรกของ Excel เป็นต้นมา เก่งเรื่องการคำนวณและวิเคราะห์ตัวเลข แต่การจัดการกับอาร์เรย์เป็นสิ่งที่ท้าทาย การแนะนำอาร์เรย์แบบไดนามิกทำให้การใช้สูตรอาร์เรย์ง่ายขึ้นมาก และตอนนี้ Microsoft กำลังเปิดตัวชุดฟังก์ชันไดนามิกอาร์เรย์ใหม่เพื่อจัดการและปรับรูปร่างอาร์เรย์ใหม่ บทช่วยสอนนี้จะสอนวิธีใช้สองฟังก์ชันดังกล่าว ได้แก่ WRAPCOLS และ WRAPROWS เพื่อแปลงคอลัมน์หรือแถวเป็นอาร์เรย์ 2 มิติในเวลาไม่นาน
ฟังก์ชัน WRAPCOLS ของ Excel
ฟังก์ชัน WRAPCOLS ใน Excel จะแปลงแถวหรือคอลัมน์ของค่าเป็นอาร์เรย์สองมิติตามจำนวนค่าที่ระบุต่อแถว
ไวยากรณ์มีอาร์กิวเมนต์ต่อไปนี้:
WRAPCOLS(เวกเตอร์, wrap_count, [pad_with])โดยที่:
- เวกเตอร์ (จำเป็น) - อาร์เรย์หรือช่วงหนึ่งมิติต้นทาง
- wrap_count (จำเป็น) - จำนวนค่าสูงสุดต่อคอลัมน์
- pad_with (ไม่บังคับ) - ค่าที่จะเติมด้วยคอลัมน์สุดท้ายหากมีรายการไม่เพียงพอให้เติม หากละเว้น ค่าที่ขาดหายไปจะถูกเติมด้วย #N/A (ค่าเริ่มต้น)
ตัวอย่างเช่น หากต้องการเปลี่ยนช่วง B5:B24 เป็นอาร์เรย์ 2 มิติที่มีค่า 5 ค่าต่อคอลัมน์ สูตรคือ:
=WRAPROWS(B5:B24, 5)
คุณป้อนอาร์กิวเมนต์ เวกเตอร์ ไม่ใช่อาร์เรย์หนึ่งมิติ
#NUM! ข้อผิดพลาด
ข้อผิดพลาด #NUM จะเกิดขึ้นหากค่า wrap_count เป็น 0 หรือจำนวนลบ
#SPILL! ข้อผิดพลาด
บ่อยครั้งที่ข้อผิดพลาด #SPILL ระบุว่ามีเซลล์ว่างไม่เพียงพอที่จะกระจายผลลัพธ์ ล้างเซลล์ข้างเคียงให้หมดไป หากข้อผิดพลาดยังคงอยู่ ให้ตรวจดูว่า #SPILL หมายถึงอะไรใน Excel และวิธีแก้ไข
นั่นคือวิธีใช้ฟังก์ชัน WRAPCOLS และ WRAPROWS เพื่อแปลงช่วงหนึ่งมิติเป็นอาร์เรย์สองมิติใน Excel ฉันขอขอบคุณสำหรับการอ่านและหวังว่าจะได้พบคุณในบล็อกของเราในสัปดาห์หน้า!
คู่มือฝึกปฏิบัติสำหรับการดาวน์โหลด
ฟังก์ชัน WRAPCOLS และ WRAPROWS - ตัวอย่าง (ไฟล์ .xlsx)
สูตรในเซลล์เดียวและจะกระจายไปยังเซลล์จำนวนมากโดยอัตโนมัติตามต้องการ ในเอาต์พุต WRAPCOLS ค่าจะถูกจัดเรียงในแนวตั้ง จากบนลงล่าง โดยยึดตามค่า wrap_countหลังจากนับครบแล้ว คอลัมน์ใหม่จะเริ่มต้นขึ้น
ฟังก์ชัน Excel WRAPROWS
ฟังก์ชัน WRAPROWS ใน Excel จะแปลงแถวหรือคอลัมน์ของค่าเป็นอาร์เรย์สองมิติตามจำนวนค่าต่อแถวที่คุณระบุ
ไวยากรณ์เป็นดังนี้:
WRAPROWS(เวกเตอร์, wrap_count, [pad_with])โดยที่:
- เวกเตอร์ (จำเป็น) - แหล่งที่มาหนึ่งมิติ อาร์เรย์หรือช่วง
- wrap_count (จำเป็น) - จำนวนสูงสุดของค่าต่อแถว
- pad_with (ไม่บังคับ) - ค่าที่จะแพด กับแถวสุดท้ายหากมีรายการไม่เพียงพอให้เติม ค่าเริ่มต้นคือ #N/A
ตัวอย่างเช่น หากต้องการแปลงช่วง B5:B24 เป็นอาร์เรย์ 2 มิติที่มีค่า 5 ค่าในแต่ละแถว สูตรคือ:
=WRAPROWS(B5:B24, 5)
คุณป้อนสูตรในเซลล์ด้านซ้ายบนของช่วงการรั่วไหล และสูตรจะเติมเซลล์อื่นๆ ทั้งหมดโดยอัตโนมัติ ฟังก์ชัน WRAPROWS จัดเรียงค่าตามแนวนอน จากซ้ายไปขวา ตามค่า wrap_count เมื่อนับครบก็จะเริ่มแถวใหม่
ความพร้อมใช้งานของ WRAPCOLS และ WRAPROWS
ทั้งสองฟังก์ชันพร้อมใช้งานใน Excel สำหรับ Microsoft 365 (Windows และ Mac) และ Excel สำหรับเว็บเท่านั้น
ก่อนหน้านี้รุ่นต่างๆ คุณสามารถใช้สูตรแบบดั้งเดิมที่ซับซ้อนมากขึ้นเพื่อทำการแปลงแบบคอลัมน์เป็นอาร์เรย์และแบบแถวต่ออาร์เรย์ นอกจากนี้ในบทช่วยสอนนี้ เราจะหารือเกี่ยวกับโซลูชันทางเลือกโดยละเอียด
เคล็ดลับ หากต้องการดำเนินการย้อนกลับ เช่น เปลี่ยนอาร์เรย์ 2 มิติเป็นคอลัมน์หรือแถวเดียว ให้ใช้ฟังก์ชัน TOCOL หรือ TOROW ตามลำดับ
วิธีแปลงคอลัมน์ / แถวเป็นช่วงใน Excel - ตัวอย่าง
ตอนนี้คุณเข้าใจการใช้งานพื้นฐานแล้ว มาดูกรณีเฉพาะเจาะจงมากขึ้น
กำหนดจำนวนสูงสุดของค่าต่อคอลัมน์หรือแถว
ขึ้นอยู่กับ โครงสร้างของข้อมูลเดิมของคุณ คุณอาจพบว่าเหมาะสมที่จะจัดเรียงใหม่เป็นคอลัมน์ (WRAPCOLS) หรือแถว (WRAPROWS) ไม่ว่าคุณจะใช้ฟังก์ชันใด จะเป็นอาร์กิวเมนต์ wrap_count ที่กำหนดจำนวนค่าสูงสุดในแต่ละคอลัมน์/แถว
ตัวอย่างเช่น หากต้องการแปลงช่วง B4:B23 เป็นอาร์เรย์ 2 มิติ เพื่อให้แต่ละคอลัมน์มีค่าสูงสุด 10 ค่า ให้ใช้สูตรนี้:
=WRAPCOLS(B4:B23, 10)
หากต้องการจัดเรียงช่วงเดียวกันใหม่ทีละแถว เพื่อให้แต่ละแถวมีค่าสูงสุด 4 ค่า สูตรคือ :
=WRAPROWS(B4:B23, 4)
รูปภาพด้านล่างแสดงลักษณะที่ปรากฏ:
เติมค่าที่ขาดหายไปในอาร์เรย์ผลลัพธ์
ในกรณีที่มีค่าไม่เพียงพอให้เติม คอลัมน์/แถวทั้งหมดของช่วงผลลัพธ์ WRAPROWS และ WRAPCOLS จะส่งกลับข้อผิดพลาด #N/A เพื่อให้โครงสร้างของอาร์เรย์ 2 มิติ
หากต้องการเปลี่ยนค่าเริ่มต้นลักษณะการทำงาน คุณสามารถระบุค่าที่กำหนดเองสำหรับอาร์กิวเมนต์ pad_with ที่เป็นทางเลือก
ตัวอย่างเช่น ในการแปลงช่วง B4:B21 เป็นอาร์เรย์ 2 มิติที่มีค่ากว้างสูงสุด 5 ค่า และเติมค่าสุดท้าย แถวที่มีเครื่องหมายขีดกลางหากมีข้อมูลไม่เพียงพอที่จะเติม ให้ใช้สูตรนี้:
=WRAPROWS(B4:B21, 5, "-")
เมื่อต้องการแทนที่ค่าที่ขาดหายไปด้วยสตริงที่มีความยาวเป็นศูนย์ (ช่องว่าง) สูตรคือ:<3
=WRAPROWS(B4:B21, 5, "")
โปรดเปรียบเทียบผลลัพธ์กับพฤติกรรมเริ่มต้น (สูตรใน D5) โดยที่ pad_with ถูกละไว้:
รวมหลายแถวเป็นช่วง 2 มิติ
ในการรวมแถวที่แยกจากกันสองสามแถวเป็นอาร์เรย์ 2D เดียว คุณต้องเรียงแถวในแนวนอนก่อนโดยใช้ฟังก์ชัน HSTACK แล้วจึงรวมค่าโดยใช้ WRAPROWS หรือ WRAPCOLS
ตัวอย่างเช่น ในการรวมค่าจาก 3 แถว (B5:J5, B7:G7 และ B9:F9) และรวมเป็นคอลัมน์ แต่ละคอลัมน์มีค่า 10 ค่า สูตรคือ:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
ในการรวมค่าจากหลายแถวลงใน ช่วง 2 มิติที่แต่ละแถวมีค่า 5 ค่า สูตรจะอยู่ในรูปแบบนี้:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
C รวมหลายคอลัมน์ลงในอาร์เรย์ 2 มิติ
ในการรวมหลายคอลัมน์เป็นช่วง 2 มิติ อันดับแรก ให้คุณเรียงคอลัมน์ในแนวตั้งโดยใช้ฟังก์ชัน VSTACK แล้วจึงรวมค่าลงในแถว (WRAPROWS) หรือคอลัมน์ (WRAPCOLS)
ตัวอย่างเช่น ในการรวมค่าจาก 3 คอลัมน์ (B5:J5, B7:G7 และ B9:F9) ลงในช่วง 2 มิติ โดยที่แต่ละคอลัมน์มีค่า 10 ค่า สูตรคือ:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
ในการรวมคอลัมน์เดียวกันในช่วง 2 มิติ โดยแต่ละแถวมีค่า 5 ค่า ให้ใช้สูตรนี้:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
รวมและจัดเรียงอาร์เรย์
ในสถานการณ์ที่ช่วงต้นทางมีค่าใน ลำดับแบบสุ่มในขณะที่คุณต้องการให้เอาต์พุตถูกจัดเรียง ให้ดำเนินการด้วยวิธีนี้:
- เรียงลำดับอาร์เรย์เริ่มต้นตามที่คุณต้องการโดยใช้ฟังก์ชัน SORT
- จัดหาอาร์เรย์ที่เรียงลำดับไปยัง WRAPCOLS หรือ WRAPROWS
ตัวอย่างเช่น หากต้องการรวมช่วง B4:B23 เป็นแถว แต่ละค่ามีค่า 4 ค่า และเรียงลำดับช่วงผลลัพธ์จาก A ถึง Z ให้สร้างสูตรดังนี้:
=WRAPROWS(SORT(B4:B23), 4)
เมื่อต้องการรวมช่วงเดียวกันลงในคอลัมน์ 10 ค่าในแต่ละคอลัมน์ และจัดเรียงผลลัพธ์ตามตัวอักษร สูตรคือ:
=WRAPCOLS(SORT(B4:B23), 10)
ผลลัพธ์มีลักษณะดังนี้ :
เคล็ดลับ ในการจัดเรียงค่าในอาร์เรย์ผลลัพธ์ใน ลำดับจากมากไปน้อย ให้ตั้งค่าอาร์กิวเมนต์ที่สาม ( sort_order ) ของฟังก์ชัน SORT เป็น -1
ทางเลือก WRAPCOLS สำหรับ Excel 365 - 2010
ใน Excel เวอร์ชันเก่าที่ไม่รองรับฟังก์ชัน WRAPCOLS คุณสามารถสร้างสูตรของคุณเองเพื่อรวมค่าจากอาร์เรย์หนึ่งมิติลงในคอลัมน์ ซึ่งสามารถทำได้โดยใช้ 5 ฟังก์ชันที่แตกต่างกัน
WRAPCOLS ทางเลือกในการแปลงแถวเป็นช่วง 2 มิติ:
IFERROR(IF(ROW(A1)> n , "" , INDEX( row_range , , ROW(A1) + (COLUMN(A1)-1)* n )), "")ทางเลือก WRAPCOLS เพื่อแปลงคอลัมน์เป็นแบบ 2 มิติ ช่วง:
IFERROR(IF(ROW(A1)> n ,"", INDEX( column_range , ROW(A1) + (COLUMN(A1)-1)* n )), "")โดยที่ n คือจำนวนค่าสูงสุดต่อคอลัมน์
ในภาพด้านล่าง เราใช้สูตรต่อไปนี้เพื่อเปลี่ยนช่วงหนึ่งแถว (D4:J4) เป็นอาร์เรย์สามแถว
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
และสูตรนี้เปลี่ยนช่วงหนึ่งคอลัมน์ (B4:B20) เป็นอาร์เรย์ห้าแถว:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
วิธีแก้ปัญหาข้างต้นจำลองสูตร WRAPCOLS ที่คล้ายคลึงกัน และสร้างผลลัพธ์เดียวกัน:
=WRAPCOLS(D4:J4, 3, "")
และ
=WRAPCOLS(B4:B20, 5, "")
โปรดทราบว่าไม่เหมือนกับฟังก์ชัน WRAPCOLS อาร์เรย์ไดนามิก เนื่องจากสูตรแบบดั้งเดิมเป็นไปตาม วิธีการหนึ่งสูตรหนึ่งเซลล์ ดังนั้น สูตรแรกของเราจึงถูกป้อนใน D8 และคัดลอก 3 แถวลงมาและ 3 คอลัมน์ทางขวา สูตรที่สองถูกป้อนใน D14 และคัดลอก 5 แถวลงและ 4 คอลัมน์ไปทางขวา
สูตรเหล่านี้ทำงานอย่างไร
หัวใจสำคัญของทั้งสองสูตร เราใช้ฟังก์ชัน INDEX ที่ส่งคืนค่าจากอาร์เรย์ที่ให้มาตามหมายเลขแถวและคอลัมน์:
INDEX(array, row_num, [column_num])ในขณะที่เรากำลังจัดการกับอาร์เรย์แถวเดียว เราสามารถข้ามอาร์กิวเมนต์ row_num ดังนั้นค่าดีฟอลต์คือ 1 เคล็ดลับคือการมี col_num คำนวณโดยอัตโนมัติสำหรับแต่ละเซลล์ที่มีการคัดลอกสูตร และนี่คือวิธีที่เราทำ:
ROW(A1)+(COLUMN(A1)-1)*3)
ฟังก์ชัน ROW ส่งคืนหมายเลขแถวของการอ้างอิง A1 ซึ่งก็คือ 1
ฟังก์ชัน COLUMN ส่งคืนหมายเลขคอลัมน์ของการอ้างอิง A1 ซึ่งก็คือ 1 เช่นกัน การลบ 1 จะกลายเป็นศูนย์ และการคูณ 0 ด้วย 3 ก็จะได้ 0
จากนั้น คุณบวก 1 ที่แสดงโดย ROW และ 0 ส่งคืนโดย COLUMN และรับ 1 เป็นผลลัพธ์
ด้วยวิธีนี้ สูตร INDEX ด้านบน -เซลล์ด้านซ้ายของช่วงปลายทาง (D8) ผ่านการแปลงนี้:
INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3))
เปลี่ยนเป็น
INDEX($D$4:$J$4, ,1)
และส่งกลับค่าจากคอลัมน์ที่ 1 ของอาร์เรย์ที่ระบุ ซึ่งก็คือ "Apples" ใน D4
เมื่อคัดลอกสูตรไปยังเซลล์ D9 การอ้างอิงเซลล์สัมพัทธ์จะเปลี่ยนตามตำแหน่งสัมพัทธ์ของแถวและคอลัมน์ ในขณะที่การอ้างอิงช่วงสัมบูรณ์จะไม่เปลี่ยนแปลง:
INDEX($D$4:$J$4,, ROW(A2)+(COLUMN(A2)-1)*3))
เปลี่ยนเป็น:
INDEX($D$4:$J$4,, 2+(1-1)*3))
กลายเป็น:
INDEX($D$4:$J$4,, 2))
และส่งกลับค่าจาก คอลัมน์ที่ 2 ของอาร์เรย์ที่ระบุ ซึ่งก็คือ "Apricots" ใน E4
ฟังก์ชัน IF จะตรวจสอบหมายเลขแถวและหากมีจำนวนแถวมากกว่าที่คุณระบุ (3 ในกรณีของเรา) จะส่งคืนสตริงว่าง ( "") มิฉะนั้น ผลลัพธ์ของฟังก์ชัน INDEX:
IF(ROW(A1)>3, "", INDEX(…))
สุดท้าย ฟังก์ชัน IFERROR แก้ไข #REF! ข้อผิดพลาดที่เกิดขึ้นเมื่อสูตรถูกคัดลอกไปยังเซลล์มากกว่าที่จำเป็นจริงๆ
สูตรที่สองที่แปลงคอลัมน์เป็นช่วง 2 มิติจะทำงานโดยใช้ตรรกะเดียวกัน ข้อแตกต่างคือคุณใช้ชุดค่าผสม ROW + COLUMN เพื่อหาอาร์กิวเมนต์ row_num สำหรับ INDEX พารามิเตอร์ col_num ไม่จำเป็นในกรณีนี้ เนื่องจากมีเพียงหนึ่งคอลัมน์ในอาร์เรย์ต้นทาง
ทางเลือก WRAPROWS สำหรับ Excel 365 - 2010
เมื่อต้องการรวมค่าจากอาร์เรย์หนึ่งมิติลงในแถวใน Excel 2019 และรุ่นก่อนหน้า คุณสามารถใช้ ทางเลือกต่อไปนี้สำหรับฟังก์ชัน WRAPROWS
แปลงแถวเป็นช่วง 2 มิติ:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( row_range , , COLUMN(A1)+(ROW(A1)-1)* n )), "")เปลี่ยนคอลัมน์เป็นช่วง 2 มิติ:
IFERROR(IF( COLUMN(A1)> n , "", INDEX( column_range , COLUMN(A1)+(ROW(A1)-1)* n )) , "")โดยที่ n คือจำนวนสูงสุดของค่าต่อแถว
ในชุดข้อมูลตัวอย่างของเรา เราใช้สูตรต่อไปนี้เพื่อแปลงช่วงหนึ่งแถว (D4 :J4) เป็นช่วงสามคอลัมน์ สูตรจะลงจอดในเซลล์ D8 จากนั้นจึงคัดลอกข้าม 3 คอลัมน์และ 3 แถว
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1)+(ROW(A1)-1)*3)), "")
หากต้องการเปลี่ยนรูปร่างช่วง 1 คอลัมน์ (B4:B20) ให้เป็นช่วง 5 คอลัมน์ ป้อนสูตรด้านล่างใน D14 แล้วลากผ่าน 5 คอลัมน์และ 4 แถว
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
ใน Excel 365 ผลลัพธ์เดียวกันสามารถทำได้ด้วยสูตร WRAPCOLS ที่เทียบเท่า:
=WRAPROWS(D4:J4, 3, "")
และ
=WRAPROWS(B4:B20, 5, "")
วิธีการทำงานของสูตรเหล่านี้
โดยพื้นฐานแล้ว สูตรเหล่านี้ทำงานเหมือนในตัวอย่างก่อนหน้า ความแตกต่างอยู่ที่วิธีที่คุณกำหนดพิกัด row_num และ col_num สำหรับฟังก์ชัน INDEX:
INDEX($D$4:$J$4,, COLUMN(A1)+(ROW(A1)-1)*3))
หากต้องการรับหมายเลขคอลัมน์สำหรับส่วนบน เซลล์ซ้ายในช่วงปลายทาง (D8) คุณใช้สิ่งนี้expression:
COLUMN(A1)+(ROW(A1)-1)*3)
ที่เปลี่ยนเป็น:
1+(1-1)*3
และให้ 1
ด้วยเหตุนี้ สูตรด้านล่างจึงส่งคืนค่าจากคอลัมน์แรกของอาร์เรย์ที่ระบุ ซึ่งก็คือ "Apples":
INDEX($D$4:$J$4,, 1)
จนถึงตอนนี้ ผลลัพธ์จะเหมือนกับในก่อนหน้า ตัวอย่าง. แต่มาดูกันว่าเกิดอะไรขึ้นในเซลล์อื่น…
ในเซลล์ D9 การอ้างอิงเซลล์สัมพัทธ์จะเปลี่ยนเป็นดังนี้:
INDEX($D$4:$J$4,, COLUMN(A2)+(ROW(A2)-1)*3))
ดังนั้น สูตรจึงแปลงเป็น:
INDEX($D$4:$J$4,, 1+(2-1)*3))
กลายเป็น:
INDEX($D$4:$J$4,, 4))
และส่งกลับค่าจากคอลัมน์ที่ 4 ของอาร์เรย์ที่ระบุ ซึ่งก็คือ "Cherry" ใน G4
ฟังก์ชัน IF ตรวจสอบหมายเลขคอลัมน์ และถ้ามากกว่าจำนวนคอลัมน์ที่คุณระบุ จะส่งกลับสตริงว่าง ("") มิฉะนั้น ผลลัพธ์ของฟังก์ชัน INDEX:
IF(COLUMN(A1)>3, "", INDEX(…))
ในขั้นสุดท้าย IFERROR ป้องกัน #REF! ข้อผิดพลาดไม่ให้ปรากฏในเซลล์ "พิเศษ" หากคุณคัดลอกสูตรไปยังเซลล์มากกว่าที่จำเป็นจริงๆ
ฟังก์ชัน WRAPCOLS หรือ WRAPROWS ไม่ทำงาน
หากฟังก์ชัน "ตัด" ไม่พร้อมใช้งาน ใน Excel ของคุณหรือทำให้เกิดข้อผิดพลาด เป็นไปได้มากว่าเกิดจากสาเหตุใดสาเหตุหนึ่งต่อไปนี้
#NAME? ข้อผิดพลาด
ใน Excel 365 เป็น #NAME? ข้อผิดพลาดอาจเกิดขึ้นเนื่องจากคุณสะกดชื่อฟังก์ชันผิด ในเวอร์ชันอื่นๆ แสดงว่าไม่รองรับฟังก์ชันนี้ คุณสามารถใช้ทางเลือกของ WRAPCOLS หรือทางเลือกของ WRAPROWS เพื่อแก้ปัญหาชั่วคราว
#VALUE! ข้อผิดพลาด
เกิดข้อผิดพลาด #VALUE หาก