Accessクエリで縦データを横持ちに変換する方法|商品名を列に展開するやり方

Microsoft Access

Accessのクエリで、同じ納期や得意先ごとに複数行に分かれた商品データを、商品名を横並びの列として表示したいケースはよくあります。本記事では、いわゆる「縦持ちデータを横持ちに変換する方法」について、実務で使える考え方と具体的な手順を整理します。

今回のデータ構造のポイント

元のデータは「納期・得意先・住所」が同じでも、「商品名」だけが複数行に分かれている構造です。

これはデータベース的には正しい正規化された形ですが、帳票やレポート出力では横並びにしたい場面がよくあります。

そのため、クエリでの集計・変換処理が必要になります。

方法① 集計クエリ+グループ化

基本的な考え方は「納期・得意先・住所」でグループ化し、商品名をまとめることです。

ただし標準のクエリだけでは横方向への展開はできないため、この時点ではまだ縦方向の集約になります。

まずはクエリデザインで「GROUP BY」を設定し、基準となる列を固定します。

方法② IIf関数とMax関数を使った横展開

Accessでは「条件付き集計」を使うことで擬似的に横持ちへ変換できます。

例えば、商品名1・商品名2のように列を分けたい場合、IIfとMax関数を組み合わせて条件分岐させます。

ただしこの方法は最大件数が決まっている場合に有効です。

方法③ クロス集計クエリ(推奨)

最も一般的な方法は「クロス集計クエリ」を使用する方法です。

クエリウィザードから「クロス集計」を選択し、行見出しに納期・得意先・住所、列見出しに商品名を設定します。

値の部分は「件数」や「First」などを指定することで横展開が可能になります。

方法④ VBAを使った柔軟な変換

より複雑な要件の場合はVBAを使用してレコードセットを処理し、配列として横持ちデータを生成する方法もあります。

商品数が可変の場合や、列数が固定できない場合にはこの方法が最も柔軟です。

業務システムではこのアプローチが採用されることも多いです。

まとめ

Accessのクエリで縦データを横持ちに変換するには、クロス集計クエリが最も実用的な方法です。

件数が固定であれば条件付き集計、柔軟性が必要ならVBAという選択肢もあります。

データ構造と目的に応じて適切な手法を選ぶことが重要です。

コメント

タイトルとURLをコピーしました