โดยปกติ ฟังก์ชัน TRANSPOSE ใช้สลับแถวเป็นคอลัมน์ แต่ไม่รองรับเงื่อนไข เช่น ค่าที่ไม่ซ้ำ บทความนี้สอน สลับแถวเป็นคอลัมน์ตามเงื่อนไขใน Excel
2 วิธี สลับแถวเป็นคอลัมน์ตามเงื่อนไขใน Excel
ชุดข้อมูลตัวอย่าง: สินค้าและจำนวน จะสลับแถวเป็นคอลัมน์ตามเงื่อนไขค่าที่ไม่ซ้ำ (มีค่าซ้ำ) ใช้ฟังก์ชัน INDEX, MATCH, COUNTIF, IF, IFERROR แบบ Array และ VBA

1. ใช้สูตร INDEX, MATCH, COUNTIF สลับแถวเป็นคอลัมน์ตามเงื่อนไข
ใช้สูตร INDEX, MATCH, COUNTIF, IF, IFERROR แบบ Array
ขั้นตอน 1: ใส่ฟังก์ชัน INDEX, MATCH, COUNTIF
- เซลล์ E5 ใส่สูตรหาสินค้าที่ไม่ซ้ำ:
=INDEX($B$5:$B$12, MATCH(0, COUNTIF($E$4:$E4, $B$5:$B$12), 0))
ขั้นตอน 2: ใช้ Array Formula
- กด Ctrl + Shift + Enter

- ได้ค่าไม่ซ้ำตัวแรก

ขั้นตอน 3: AutoFill ดึงค่าต่อ
- ลาก AutoFill Handle ลงไปได้ค่าที่ไม่ซ้ำทั้งหมด

ขั้นตอน 4: ใส่ฟังก์ชัน IFERROR สลับจำนวนเป็นคอลัมน์
- สูตรสลับค่าจำนวน:
=IFERROR(INDEX($C$5:$C$12, MATCH(0, COUNTIF($E5:E5, $C$5:$C$12) + IF($B$5:$B$12<>$E5,1,0),0)),0)
ขั้นตอน 5: ใช้ Array Formula
- กด Ctrl + Shift + Enter

- เซลล์ F5 แสดงค่าสลับตัวแรก

- ลาก AutoFill ลง → แล้วลากขวา → ได้แถวสลับเป็นคอลัมน์ครบ


อ่านเพิ่ม: สลับหลายแถวเป็นกลุ่มคอลัมน์ใน Excel
2. ใช้โค้ด VBA สลับแถวเป็นคอลัมน์ตามเงื่อนไข
ขั้นตอน 1: สร้าง Module
- กด Alt + F11 เปิด VBA
- Insert → Module

ขั้นตอน 2: ใส่โค้ด VBA
Sub TransposeRows() 'Define Variables Dim RowsNumber As Long Dim p As Long Dim xColCr As String Dim xColumn As New Collection Dim InputRng As Range Dim OutputRng As Range Dim RngText As String Dim CountRow As Long Dim xRowRg As Range On Error Resume Next 'Set values and Input Box fot Input Range RngText = ActiveWindow.RangeSelection.Address Set InputRng = Application.InputBox("Select Your Input Range for 2 columns:", "ExcelDemy", RngText, , , , , 8) Set InputRng = Application.Intersect(InputRng, InputRng.Worksheet.UsedRange) 'Apply Condition to count only 2 columns and to show msg box for alerting to select only two columns If InputRng Is Nothing Then Exit Sub If (InputRng.Columns.Count <> 2) Or _ (InputRng.Areas.Count > 1) Then MsgBox "The specified range is only area for 2 columns ", , "ExcelDemy" Exit Sub End If 'Set values and Input Box fot Input Range Set OutputRng = Application.InputBox("Select Your Output Range (one cell):", "ExcelDemy", RngText, , , , , 8) If OutputRng Is Nothing Then Exit Sub Set OutputRng = OutputRng.Range(1) 'Count Rows RowsNumber = InputRng.Rows.Count 'Apply For loop For p = 2 To RowsNumber xColumn.Add InputRng.Cells(p, 1).Value, InputRng.Cells(p, 1).Value Next Application.ScreenUpdating = False For p = 1 To xColumn.Count xColCr = xColumn.Item(p) OutputRng.Offset(p, 0) = xColCr InputRng.AutoFilter Field:=1, Criteria1:=xColCr Set xRowRg = InputRng.Range("B2:B" & RowsNumber).SpecialCells(xlCellTypeVisible) If xRowRg.Count > CountRow Then CountRow = xRowRg.Count 'Copy and paste with transpose InputRng.Range("B2:B" & RowsNumber).SpecialCells(xlCellTypeVisible).Copy OutputRng.Offset(p, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True Application.CutCopyMode = False Next OutputRng = InputRng.Cells(1, 1) OutputRng.Offset(0, 1).Resize(1, CountRow) = InputRng.Cells(1, 2) InputRng.Rows(1).Copy OutputRng.Resize(1, CountRow + 1).PasteSpecial Paste:=xlPasteFormats InputRng.AutoFilter Application.ScreenUpdating = True End Sub

ขั้นตอน 3: รันโปรแกรม
- Save → กด F5
- เลือกช่วงข้อมูลพร้อมหัวเรื่อง → OK

- เลือกเซลล์สำหรับ output → OK

- ได้ผลลัพธ์: แถวสลับเป็นคอลัมน์ตามเงื่อนไข

อ่านเพิ่ม: วิธีสลับแถวเป็นคอลัมน์ด้วย Excel VBA (4 ตัวอย่าง)
สรุป
หวังว่าบทความนี้จะช่วยให้เข้าใจวิธี สลับแถวเป็นคอลัมน์ตามเงื่อนไขใน Excel เรียนรู้และนำไปปฏิบัติได้ ลองทำกับ Practice Workbook ทีม Exceldemy พร้อมตอบคำถามตลอดเวลา
หากมีคำถาม – ถามได้เลย หรือคอมเมนต์ด้านล่าง
อยู่กับเรา และเรียนรู้ต่อไป!
บทความเกี่ยวข้อง
- แปลงคอลัมน์เป็นแถวใน Excel ด้วย Power Query
- วิธีแปลงคอลัมน์เป็นแถวใน Excel ตามค่าเซลล์
- VBA สลับหลายคอลัมน์เป็นแถวใน Excel (2 วิธี)
- แปลงคอลัมน์เป็นรายการคั่นคอมมา พร้อมเครื่องหมายคำพูด
- Excel Paste Transpose Shortcut: 4 วิธีใช้ง่ายๆ
- Excel Transpose Formulas Without Changing References (4 วิธี)
- วิธี Transpose ใน Excel VBA (3 วิธี)