Accessのクエリで、同じ納期や得意先ごとに複数行に分かれた商品データを、商品名を横並びの列として表示したいケースはよくあります。本記事では、いわゆる「縦持ちデータを横持ちに変換する方法」について、実務で使える考え方と具体的な手順を整理します。
今回のデータ構造のポイント
元のデータは「納期・得意先・住所」が同じでも、「商品名」だけが複数行に分かれている構造です。
これはデータベース的には正しい正規化された形ですが、帳票やレポート出力では横並びにしたい場面がよくあります。
そのため、クエリでの集計・変換処理が必要になります。
方法① 集計クエリ+グループ化
基本的な考え方は「納期・得意先・住所」でグループ化し、商品名をまとめることです。
ただし標準のクエリだけでは横方向への展開はできないため、この時点ではまだ縦方向の集約になります。
まずはクエリデザインで「GROUP BY」を設定し、基準となる列を固定します。
方法② IIf関数とMax関数を使った横展開
Accessでは「条件付き集計」を使うことで擬似的に横持ちへ変換できます。
例えば、商品名1・商品名2のように列を分けたい場合、IIfとMax関数を組み合わせて条件分岐させます。
ただしこの方法は最大件数が決まっている場合に有効です。
方法③ クロス集計クエリ(推奨)
最も一般的な方法は「クロス集計クエリ」を使用する方法です。
クエリウィザードから「クロス集計」を選択し、行見出しに納期・得意先・住所、列見出しに商品名を設定します。
値の部分は「件数」や「First」などを指定することで横展開が可能になります。
方法④ VBAを使った柔軟な変換
より複雑な要件の場合はVBAを使用してレコードセットを処理し、配列として横持ちデータを生成する方法もあります。
商品数が可変の場合や、列数が固定できない場合にはこの方法が最も柔軟です。
業務システムではこのアプローチが採用されることも多いです。
まとめ
Accessのクエリで縦データを横持ちに変換するには、クロス集計クエリが最も実用的な方法です。
件数が固定であれば条件付き集計、柔軟性が必要ならVBAという選択肢もあります。
データ構造と目的に応じて適切な手法を選ぶことが重要です。


コメント