Excelで条件に基づいて行を列に転置する方法(数式・VBAの2つのアプローチ)
通常、行を列に変換したい場合にはTRANSPOSE関数がよく利用されます。しかし、TRANSPOSE関数では「一意の値(ユニークな値)だけを抜き出す」といった特定の条件に基づいた結果を返すことができません。そこで本記事では、Excelで条件に基づいて行を列に転置する方法をわかりやすく解説します。
Excelで条件に基づいて行を列に転置する2つの便利な方法
以下の図には、複数の商品名とそれぞれの数量をまとめたサンプルデータセットを用意しました。ここから行を列へ転置していきます。データ内には同一商品の重複行が含まれているため、一意の値を条件として転置処理を行います。
まずはINDEX関数・MATCH関数・COUNTIF関数・IF関数・IFERROR関数を組み合わせた数式による方法を紹介し、続いて同じ処理を自動化できるVBAコードの実行方法も解説します。

方法1:INDEX・MATCH・COUNTIF関数を使った数式で条件に基づく転置を行う
まず最初に、INDEX関数・MATCH関数・COUNTIF関数・IF関数・IFERROR関数を配列数式として活用する方法を見ていきましょう。
ステップ1:INDEX・MATCH・COUNTIF関数を挿入する
- セルE5に次の数式を入力して、一意の商品名を抽出します。
=INDEX($B$5:$B$12, MATCH(0, COUNTIF($E$4:$E4, $B$5:$B$12), 0))
ステップ2:配列数式として確定する
- 数式を配列数式として確定するには、Ctrl+Shift+Enterを同時に押します。

- これで、最初の一意の結果が表示されます。

ステップ3:オートフィルで数式をコピーする
- すべての一意の値を取得するには、オートフィルハンドルを使って列全体に数式をコピーします。

ステップ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:配列数式として確定する
- 再びCtrl+Shift+Enterを押して、配列数式として確定します。

- すると、下図のようにセルF5に最初の転置結果が表示されます。

- オートフィルハンドルを下方向にドラッグして、列全体に数式をコピーします。

- 最後に、オートフィルハンドルで右方向にも数式をコピーします。
- これで、すべての行データが下図のように列へと転置されます。

あわせて読みたい:Excelでグループごとの複数行を列に転置する方法
類似の記事
- Excelで重複行を列に転置する方法(4つの方法)
- Excel VBA:グループごとの複数行を列に転置する
- Excelで複数列を1つの列にまとめる方法(3つの便利な方法)
- Excelで逆転置を行う方法(3つのシンプルな方法)
方法2:VBAコードを実行して条件に基づく転置を行う
ステップ1:モジュールを作成する
- まず、Alt+F11を押してVBAエディター(VBAマクロ)を起動します。
- メニューの「挿入」をクリックします。
- 「標準モジュール」を選択してModuleを作成します。

ステップ2:VBAコードを貼り付ける
- 以下の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:プログラムを実行する
- まずコードを保存し、F5キーを押してプログラムを実行します。
- 見出し行を含むデータ範囲を選択します。
- 「OK」をクリックします。

- 出力結果を表示させたいセルを選択します。
- その後、「OK」をクリックします。

- すると、下図のように行が列へ転置された結果が表示されます。

あわせて読みたい:Excel VBAで行を列に転置する方法(実例4選)
まとめ
本記事では、Excelで条件に基づいて行を列に転置する方法について解説しました。ご紹介した手順をぜひ実際のデータセットで試してみてください。練習用ワークブックを活用すれば、スキルの確認にも役立ちます。皆さまからの貴重なご支援こそが、今後もこのようなチュートリアルを作り続ける原動力となります。
ご不明な点がありましたら、お気軽にお問い合わせください。下のコメント欄からもご質問・ご意見をお寄せいただけます。
私たちExceldemyチームは、いつでも皆さまのご質問にお答えできるよう心がけています。
今後ともどうぞよろしくお願いいたします。学びを続けましょう。
関連記事
- Power Queryを使ってExcelで列を行に変換する方法
- セルの値に基づいてExcelで列を行に変換する方法
- VBAで複数列を行に転置する方法(2つの方法)
- 列データをシングルクォーテーション付きのカンマ区切りリストに変換する方法
- Excelの行列を入れ替えて貼り付けるショートカットの使い方4選
- 参照を変更せずにExcelの数式を転置する方法(4つの簡単な方法)
- Excel VBAで転置を行う方法(3つの方法)
-
Excelで列を制限する3つの簡単な方法|スクロール範囲の設定から列の非表示まで
この記事では、Excelで列を制限する方法をご紹介します。特定の列だけで作業を行いたい場面は意外と多く、そんなときに列の制限機能が役立ちます。本記事では、誰でもすぐに実践できる3つの簡単な方法を解説します。これらの方法をマスターすれば、Excelでの列の制限をスムーズに行えるようになります。それでは早速見ていきましょう。 練習用ファイルのダウンロード 記事内の手順を実際に試すための練習用ファイルは、こちらからダウンロードできます。 Excelで列を制限する3つの方法 解説には、ある会社の従業員に関するID・氏名・部署の情報を含むデータセットを使用します。このデータセットをもとに、列の制限を行う
-
ExcelでXMLを列に変換する4つの方法|初心者でもできる完全ガイド
このチュートリアルでは、ExcelでXMLデータを列に変換する4つの実用的な方法をご紹介します。いずれの方法も大規模なデータセットに対応しており、XMLデータから必要な値を効率よく抽出できます。さらに、本記事で解説するツールやテクニックは、その他のExcel作業全般にも役立つ内容となっています。 練習用ワークブックはこちらからダウンロードできます。 ExcelでXMLを列に変換する4つの方法 手順を分かりやすく説明するため、比較的シンプルなXMLデータセットを使用します。データセットは約7行×2列で構成され、すべてのセルは初期状態で「標準」形式に設定されています。列は「サイトURL」と「日付」