ちょっと変わったクロス集計もどき。
下の図のようなテーブルがあります。フィールドには番号のほか、区分1、金額1、区分2、金額2....のように入力されています。それぞれの区分にはさらに区分番号が入力て、いますがかならずしも同じ区分番号が同じフィールドに入っている訳ではありません。これをさらに下記のように区分番号をフィールドにしたものに置き換える方法です。
上の図で区分と金額が1組しかないのであれば、クロス集計クエリーで簡単に同じことが可能です。しかし、これがいくつもの列をもっていたらなかなか簡単にはいきませんね
そこで、まず標準モジュールに次のような関数を作成します
'-------------------------------------------------------------
Public Function henkan(n1, k1, n2, k2, n3, k3, x) As Long

If n1 = x Then
henkan = k1
ElseIf n2 = x Then
henkan = k2
ElseIf n3 = x Then
henkan = k3
Else
Exit Function
End If

End Function
'-------------------------------------------------------------

そしで、この関数をもとに下記のクエリーを作成します
1Aに入る式は下記のとおりとなっています。
1A: henkan([区分1],[金額1],[区分2],[金額2],[区分3],[金額3],1)
上記モジュールの引数「X」が元テーブルの区分に入る番号ですので、この場合は最大値は「4」です。
そこでここでは4Aまでを同じようにコピーし、最初と最後の数を変えてあげればOKですね。