สารบัญ
วิธีง่ายๆ ในการแปลงอาร์เรย์หรือช่วงเป็นคอลัมน์ด้วยฟังก์ชัน TOCOL
ความสามารถในการย้ายข้อมูลจากคอลัมน์เป็นแถวและย้อนกลับมีอยู่ใน Excel มานานแล้ว สักครู่ แต่การแปลงช่วงของเซลล์เป็นคอลัมน์เดียวเป็นงานที่ยุ่งยากในการถอดรหัส ในที่สุดมันก็เปลี่ยนไปแล้ว Microsoft ได้เปิดตัวฟังก์ชันใหม่ที่เรียกว่า TOCOL ซึ่งสามารถแปลงอาร์เรย์เป็นคอลัมน์ได้ในพริบตา ด้านล่างนี้คือรายการงานที่ฟังก์ชันใหม่นี้สามารถแก้ไขได้อย่างง่ายดาย
ฟังก์ชัน TOCOL ของ Excel
ฟังก์ชัน TOCOL ใน Excel จะแปลงอาร์เรย์หรือช่วงของเซลล์เป็นเซลล์เดียว คอลัมน์
ฟังก์ชันรับอาร์กิวเมนต์สามรายการ แต่จำเป็นต้องมีอาร์กิวเมนต์แรกเท่านั้น
TOCOL(อาร์เรย์, [ละเว้น], [scan_by_column])ที่ไหน:
อาร์เรย์ (จำเป็น) - อาร์เรย์หรือช่วงที่จะแปลงเป็นคอลัมน์
ละเว้น (ไม่บังคับ) - กำหนดว่าจะละเว้นช่องว่างหรือ/และข้อผิดพลาด สามารถเป็นหนึ่งในค่าเหล่านี้:
- 0 หรือละเว้น (ค่าเริ่มต้น) - เก็บค่าทั้งหมด
- 1 - ละเว้นช่องว่าง
- 2 - ละเว้นข้อผิดพลาด
- 3 - ละเว้นช่องว่างและข้อผิดพลาด
Scan_by_column (ไม่บังคับ) - กำหนดว่าจะสแกนอาร์เรย์ในแนวนอนหรือแนวตั้ง:
- FALSE หรือละเว้น (ค่าเริ่มต้น) - สแกนอาร์เรย์ทีละแถวจากซ้ายไปขวา
- TRUE - สแกนอาร์เรย์ตามคอลัมน์จากบนลงล่าง
เคล็ดลับ:
- หากต้องการแปลงอาร์เรย์เป็นแถวเดียว ให้ใช้ TOROWฟังก์ชัน
- หากต้องการแปลงแบบคอลัมน์เป็นอาร์เรย์แบบตรงข้าม ให้ใช้ฟังก์ชัน WRAPCOLS เพื่อตัดตามคอลัมน์ หรือใช้ฟังก์ชัน WRAPROWS เพื่อตัดตามแถว
- หากต้องการย้ายอาร์เรย์จากแนวนอนเป็น แนวตั้งหรือกลับกัน เช่น เปลี่ยนแถวเป็นคอลัมน์ ใช้ฟังก์ชัน TRANSPOSE
ความพร้อมใช้งานของ TOCOL
TOCOL เป็นฟังก์ชันใหม่ซึ่งรองรับใน Excel สำหรับ Microsoft 365 (สำหรับ Windows และ Mac) และ Excel สำหรับเว็บ
สูตร TOCOL พื้นฐานเพื่อแปลงช่วงเป็นคอลัมน์
สูตร TOCOL ในรูปแบบที่ง่ายที่สุดต้องการเพียงหนึ่งอาร์กิวเมนต์ - อาร์เรย์ . ตัวอย่างเช่น หากต้องการวางอาร์เรย์สองมิติที่ประกอบด้วย 3 คอลัมน์และ 4 แถวลงในคอลัมน์เดียว สูตรคือ:
=TOCOL(A2:C5)
สูตรจะถูกป้อนในเซลล์เดียวเท่านั้น (E2 ใน ตัวอย่างนี้) และทะลักเข้าสู่เซลล์ด้านล่างโดยอัตโนมัติ ในแง่ของ Excel ผลลัพธ์เรียกว่าช่วงการรั่วไหล
วิธีการทำงานของสูตรนี้:
ในทางเทคนิค ช่วง A2:C5 จะถูกแปลงเป็นอาร์เรย์สองมิติก่อน โปรดสังเกตแถวที่คั่นด้วยเครื่องหมายอัฒภาคและคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาค:
{"Apple","Banana","Cherry";1,0,3;4,#N/A,6;7,8,9}
ฟังก์ชัน TOCOL จะสแกนอาร์เรย์จากซ้ายไปขวาและแปลงเป็นอาร์เรย์แนวตั้งหนึ่งมิติ:
{"Apple";"Banana";"Cherry";1;0;3;4;#N/A;6;7;8;9}
ผลลัพธ์จะอยู่ในเซลล์ E2 ซึ่งจะขยายไปยังเซลล์ด้านล่าง
วิธีใช้ฟังก์ชัน TOCOL ใน Excel - ตัวอย่างสูตร
เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับความเป็นไปได้ของฟังก์ชัน TOCOL และงานใดบ้างที่สามารถครอบคลุมได้ มาดูตัวอย่างสูตรกัน
แปลงอาร์เรย์เป็นคอลัมน์โดยไม่สนใจช่องว่างและข้อผิดพลาด
ดังที่คุณอาจสังเกตเห็นในตัวอย่างก่อนหน้านี้ สูตร TOCOL เริ่มต้นจะเก็บค่าทั้งหมดจากอาร์เรย์ต้นทาง รวมถึงเซลล์ว่างและข้อผิดพลาด
ในอาร์เรย์ผลลัพธ์ เซลล์ว่างจะแสดงด้วยเลขศูนย์ ซึ่งอาจทำให้สับสนได้ โดยเฉพาะอย่างยิ่งหากอาร์เรย์เดิมมี 0 ค่า วิธีแก้ไขคือ ข้ามช่องว่าง สำหรับสิ่งนี้ คุณตั้งค่าอาร์กิวเมนต์ที่ 2 เป็น 1:
=TOCOL(A2:C5, 1)
หากต้องการ ละเว้นข้อผิดพลาด ให้ตั้งค่าอาร์กิวเมนต์ที่ 2 เป็น 2:
=TOCOL(A2:C5, 2)
<3
หากต้องการแยกทั้งสอง ช่องว่างและข้อผิดพลาด ให้ใช้ 3 สำหรับอาร์กิวเมนต์ ละเว้น :
=TOCOL(A2:C5, 3)
สแกนอาร์เรย์ในแนวนอนหรือแนวตั้ง
ด้วยอาร์กิวเมนต์ scan_by_column เริ่มต้น (FALSE หรือละเว้น) ฟังก์ชัน TOCOL จะสแกนอาร์เรย์ตามแนวนอนทีละแถว หากต้องการประมวลผลค่าตามคอลัมน์ ให้ตั้งค่าอาร์กิวเมนต์นี้เป็น TRUE หรือ 1 ตัวอย่างเช่น:
=TOCOL(A2:C5, ,TRUE)
โปรดสังเกตว่าในทั้งสองกรณี อาร์เรย์ที่ส่งคืนจะมีขนาดเท่ากัน แต่มีการจัดเรียงค่า ในลำดับอื่น
รวมช่วงหลายช่วงเป็นคอลัมน์เดียว
หากคุณกำลังจัดการกับช่วงที่ไม่ติดกันหลายช่วง ขั้นแรกคุณสามารถรวมช่วงในแนวตั้งเป็นอาร์เรย์เดียวโดยใช้ฟังก์ชัน VSTACK และ จากนั้นใช้ TOCOL เพื่อแปลงอาร์เรย์ที่รวมกันเป็นคอลัมน์
สมมติว่าช่วงแรกคือ A2:C4 และช่วงที่สองคือ A8:C9 สูตรจะใช้รูปแบบนี้:
=TOCOL(VSTACK(A2:C4, A8:C9))
สูตรนี้แสดงลักษณะการทำงานเริ่มต้น - อ่านอาร์เรย์ที่รวมกันในแนวนอนจากด้านซ้าย ไปทางขวาตามที่แสดงในคอลัมน์ E ในภาพด้านล่าง
หากต้องการอ่านค่าในแนวตั้งจากบนลงล่าง ให้ตั้งค่าอาร์กิวเมนต์ที่ 3 ของ TOCOL เป็น TRUE:
=TOCOL(VSTACK(A2:C4, A8:C9), ,TRUE)
โปรดทราบว่า ในกรณีนี้ สูตรจะส่งกลับค่าจากคอลัมน์ A ของทั้งสองอาร์เรย์ก่อน จากนั้นจึงส่งกลับจากคอลัมน์ B เป็นต้น เหตุผลคือ TOCOL สแกนอาร์เรย์แบบสแต็กเดียว ไม่ใช่แต่ละช่วงต้นฉบับ
หากตรรกะทางธุรกิจของคุณต้องการการซ้อนช่วงต้นฉบับในแนวนอนแทนที่จะเป็นแนวตั้ง ให้ใช้ฟังก์ชัน HSTACK แทน VSTACK
หากต้องการผนวกอาร์เรย์ที่ตามมาแต่ละตัวทางด้านขวาของอาร์เรย์ก่อนหน้า และอ่าน อาร์เรย์ที่รวมกันในแนวนอน สูตรคือ:
=TOCOL(HSTACK(A2:C4, A8:C10))
หากต้องการเพิ่มอาร์เรย์ที่ตามมาแต่ละรายการทางด้านขวาของอาร์เรย์ก่อนหน้าและสแกนอาร์เรย์ที่รวมกันในแนวตั้ง สูตรคือ:
=TOCOL(HSTACK(A2:C4, A8:C10), ,TRUE)
แยกค่าที่ไม่ซ้ำจากช่วงหลายคอลัมน์
ฟังก์ชัน UNIQUE ของ Excel สามารถค้นหาค่าที่ไม่ซ้ำได้อย่างง่ายดายในคอลัมน์หรือแถวเดียว ตลอดจนส่งคืนแถวที่ไม่ซ้ำ แต่ไม่สามารถแยกค่าที่ไม่ซ้ำจาก อาร์เรย์หลายคอลัมน์ วิธีแก้ไขคือใช้ร่วมกับฟังก์ชัน TOCOL
เช่น หากต้องการแยกค่า (ที่แตกต่างกัน) ทั้งหมดออกจากช่วงA2:C7 สูตรคือ:
=UNIQUE(TOCOL(A2:C7))
นอกจากนี้ คุณสามารถรวมสูตรข้างต้นในฟังก์ชัน SORT เพื่อจัดเรียงอาร์เรย์ที่ส่งคืนตามลำดับตัวอักษร:
=SORT(UNIQUE(TOCOL(A2:C7)))
วิธีแปลงช่วงเป็นคอลัมน์ใน Excel 365 - 2010
ใน Excel เวอร์ชันที่ไม่รองรับฟังก์ชัน TOCOL มีวิธีอื่นๆ อีกสองสามวิธีในการแปลงช่วงของเซลล์เป็นคอลัมน์ วิธีแก้ปัญหาเหล่านี้ค่อนข้างยุ่งยาก แต่ก็ได้ผล
วิธีอ่านช่วงต่อแถว:
INDEX( range , QUOTIENT(ROW(A1)-1, COLUMNS( ช่วง ))+1, MOD(ROW(A1)-1, COLUMNS( ช่วง ))+1)หากต้องการอ่านช่วงตามคอลัมน์:
INDEX( ช่วง , MOD(ROW(A1)-1, ROWS( ช่วง ))+1, QUOTIENT(ROW(A1)-1, ROWS( ช่วง ))+1 )สำหรับชุดข้อมูลตัวอย่างของเรา สูตรมีดังนี้:
หากต้องการสแกนช่วง แนวนอนจากซ้ายไปขวา :
=INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
สูตรนี้เทียบเท่ากับฟังก์ชัน TOCOL โดยตั้งค่าอาร์กิวเมนต์ที่ 3 เป็น FALSE หรือละเว้น:
=TOCOL(A2:C5)
หากต้องการสแกนช่วง ในแนวตั้งจากบนลงล่าง :
=INDEX($A$2:$C$5, MOD(ROW(A1)-1, ROWS($A$2:$C$5))+1, QUOTIENT(ROW(A1)-1, ROWS($A$2:$C$5))+1)
สูตรนี้เปรียบได้กับฟังก์ชัน TOCOL โดยอาร์กิวเมนต์ตัวที่ 3 ตั้งค่าเป็น TRUE:
=TOCOL(A2:C5, ,TRUE)
ซึ่งแตกต่างจาก TOCOL ตรงที่ควรป้อนสูตรทางเลือกในแต่ละสูตร เซลล์ที่คุณต้องการให้ผลลัพธ์ปรากฏ ในกรณีของเรา สูตรจะไปที่เซลล์ E2 (ตามแถว) และ G2 (ตามคอลัมน์) จากนั้นจึงคัดลอกลงไปที่แถวที่ 13
หากสูตรถูกคัดลอกไปยังแถวมากกว่าที่จำเป็น a#รีฟ! ข้อผิดพลาดจะปรากฏในเซลล์ "พิเศษ" เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้น คุณสามารถซ้อนสูตรในฟังก์ชัน IFERROR ดังนี้:
=IFERROR(INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1), "")
สังเกตว่าเพื่อให้สูตรคัดลอกได้อย่างถูกต้อง เราจะล็อกช่วงโดยใช้การอ้างอิงเซลล์แบบสัมบูรณ์ ($ $2:$C$5). คุณสามารถใช้ช่วงที่มีชื่อแทนได้
สูตรเหล่านี้ทำงานอย่างไร
ด้านล่างนี้คือรายละเอียดโดยละเอียดของสูตรแรกที่จัดเรียงเซลล์ตามแถว:
=INDEX($A$2:$C$5, QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1, MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1)
แนวคิดคือการใช้ฟังก์ชัน INDEX เพื่อส่งกลับค่าของเซลล์บางเซลล์ตามหมายเลขแถวและคอลัมน์ที่เกี่ยวข้องในช่วง
หมายเลขแถว คำนวณโดยชุดค่าผสมนี้ :
QUOTIENT(ROW(A1)-1, COLUMNS($A$2:$C$5))+1
QUOTIENT ส่งคืนส่วนจำนวนเต็มของการหาร
สำหรับ ตัวเศษ ให้คุณใช้ ROW(A1)-1 ซึ่งส่งคืน a หมายเลขซีเรียลจาก 0 ใน E2 (เซลล์แรกที่ป้อนสูตร) ถึง 11 ใน E13 (เซลล์สุดท้ายที่ป้อนสูตร)
ตัวหาร แสดงค่าโดย COLUMNS($A $2:$C$5)) เป็นค่าคงที่และเท่ากับจำนวนคอลัมน์ในช่วงของคุณ (3 ในกรณีของเรา)
ตอนนี้ ถ้าคุณตรวจสอบผลลัพธ์ของ QUOTIENT สำหรับ 3 เซลล์แรก (E2:E4) คุณจะเห็นว่ามันมีค่าเท่ากับ 0 (เพราะส่วนจำนวนเต็มของการหารเป็นศูนย์) การเพิ่ม 1 จะให้หมายเลขแถว 1
สำหรับ 3 เซลล์ถัดไป (E5:E5) QUOTIENT จะส่งกลับ 1 และการดำเนินการ +1 จะส่งกลับหมายเลขแถว 2 ไปเรื่อยๆ
กล่าวอีกนัยหนึ่ง ส่วนนี้ของสูตรจะสร้างการทำซ้ำลำดับของตัวเลข เช่น 1,1,1,2,2,2,3,3,3,4,4,4,... ตัวเลขแต่ละตัวจะทำซ้ำหลายครั้งเท่าที่มีคอลัมน์อยู่ในช่วงของคุณ
ถึง คำนวณ หมายเลขคอลัมน์ คุณสร้างลำดับหมายเลขที่เหมาะสมโดยใช้ฟังก์ชัน MOD:
MOD(ROW(A1)-1, COLUMNS($A$2:$C$5))+1
เนื่องจากมี 3 คอลัมน์ในช่วงของเรา (A2:C5) ลำดับต้องเป็น 1,2,3,1,2,3,...
ฟังก์ชัน MOD ส่งกลับเศษที่เหลือหลังจากการหาร
ใน E2, MOD(ROW(A1)-1, COLUMNS ($A$2:$C$5))+1)
กลายเป็น
MOD(1-1, 3)+1)
และคืนค่า 1
ใน E3, MOD(ROW(A2)-1, COLUMNS($A$2:$C$5))+1)
กลายเป็น
MOD(2-1, 3) +1)
และส่งคืน 2.
เมื่อสร้างหมายเลขแถวและคอลัมน์แล้ว INDEX จะไม่มีปัญหาในการเรียกค่าที่ต้องการ
ใน E2, INDEX($A$2 :$C$5, 1, 1) ส่งคืนค่าจากแถวที่ 1 และคอลัมน์ที่ 1 ของช่วงที่อ้างอิง เช่น จากเซลล์ A2
ใน E3, INDEX($A$2:$C$5, 1 , 2) ส่งกลับค่าจากแถวที่ 1 และคอลัมน์ที่ 2 เช่น จากเซลล์ B2
และอื่น ๆ
สูตรที่สองที่สแกนช่วงด้วย c olumn ทำงานในลักษณะเดียวกัน ข้อแตกต่างคือใช้ MOD เพื่อรับหมายเลขแถวและ QUOTIENT เพื่อรับหมายเลขคอลัมน์
ฟังก์ชัน TOCOL ไม่ทำงาน
หากฟังก์ชัน TOCOL แสดงข้อผิดพลาด เป็นไปได้มากว่า เป็นหนึ่งในเหตุผลเหล่านี้:
TOCOL ไม่ได้รับการสนับสนุนใน Excel ของคุณ
เมื่อคุณได้รับ #NAME? ข้อผิดพลาด การสะกดชื่อฟังก์ชันที่ถูกต้องเป็นสิ่งแรกที่ต้องทำตรวจสอบ. ถ้าชื่อถูกต้องแต่ข้อผิดพลาดยังคงอยู่ แสดงว่าฟังก์ชันนี้ไม่พร้อมใช้งานใน Excel เวอร์ชันของคุณ ในกรณีนี้ ให้ลองใช้ TOCOL ทางเลือก
อาร์เรย์ใหญ่เกินไป
ข้อผิดพลาด #NUM ระบุว่าอาร์เรย์ไม่สามารถใส่ในคอลัมน์ได้ กรณีทั่วไปคือเมื่อคุณอ้างถึงทั้งคอลัมน์หรือทั้งแถว
มีเซลล์ว่างไม่เพียงพอ
เมื่อเกิดข้อผิดพลาด #SPILL ให้ตรวจสอบว่าคอลัมน์ที่ป้อนสูตร มีเซลล์ว่างเพียงพอที่จะเติมผลลัพธ์ หากเซลล์ว่างเปล่า ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างและอักขระอื่นๆ ที่ไม่ได้พิมพ์อยู่ในเซลล์ สำหรับข้อมูลเพิ่มเติม โปรดดูวิธีแก้ไขข้อผิดพลาด #SPILL ใน Excel
นั่นคือวิธีที่คุณสามารถใช้ฟังก์ชัน TOCOL ใน Excel 365 และโซลูชันอื่นในเวอร์ชันก่อนหน้าเพื่อแปลงอาร์เรย์ 2 มิติเป็นคอลัมน์เดียว ฉันขอขอบคุณที่อ่านและหวังว่าจะได้พบคุณในบล็อกของเราในสัปดาห์หน้า!
สมุดงานแบบฝึกหัด
ฟังก์ชัน TOCOL ของ Excel - ตัวอย่างสูตร (ไฟล์ .xlsx)