- ベストアンサー
Accessで、横長のテーブルを縦長に作り変えたい
下のような項目の、「銀行休日マスタテーブル」が存在します。 1レコードの中に、 銀行、年、月をキーとして、1日~31日の休日・営業日の情報を格納しています。 (「1日」~「31日」の0と1は営業日と休日を表すフラグです。) 銀行コード| 年 |月|日数|1日|2日|・・・・30日|31日| 0001 |2006|01| 31| 1| 0|・・・・ 1| 0| このテーブルを、以下のように、 銀行コード・年・月・日をキーとしたテーブルに作り変えたいのですが いいアイデアはあるでしょうか。 銀行コード| 年 |月|日|営業日フラグ| 0001 |2006|01| 1| 1| 0001 |2006|01| 2| 0| ・ ・ ・ 0001 |2006|01|30| 1| 0001 |2006|01|31| 0|
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
逆だとクロス集計クエリで簡単なんですけどね... 日(数値型)だけのフィールドのテーブルを作成して1~31を登録 追加又はテーブル作成クエリにて、現在のテーブルと日だけのテーブルを選択 銀行コード;年;月;日;営業日フラグ:Dblookup(Strconv([日]&"日",4),"テーブル名","銀行コード='" & [銀行コード] & "' And [年]=" & [年] &" And [月]=" & [月]) として日の抽出条件に <=[日数] として存在しない日付は排除します。 ※フィールド名の日付が半角の場合はStrconv関数での全角化の設定をはずしてください。
その他の回答 (3)
- nicotinism
- ベストアンサー率70% (1019/1452)
銀行休日マスタテーブル(銀行コード以外は数値型) 銀行コード| 年 |月|日数|1日|2日|・・・・30日|31日| 0001 |2006|01| 31| 1| 0|・・・・ 1| 0| 0001 |2006|01| 28| 1| 0|・・・・ | | ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ で 新銀行休日マスタテーブル(銀行コード以外は数値型) 銀行コード| 年 |月|日|営業日フラグ| 0001 |2006|01| 1| 1| 0001 |2006|01| 2| 0| としたらこんな風? Sub test() '要参照設定 Microsoft 3.x Object Library Dim i As Integer Dim rsOrg As DAO.Recordset Dim rsNew As DAO.Recordset Set rsOrg = CurrentDb.OpenRecordset("銀行休日マスタテーブル", dbOpenSnapshot) Set rsNew = CurrentDb.OpenRecordset("新銀行休日マスタテーブル", dbOpenDynaset) Do Until rsOrg.EOF For i = 1 To 31 'か To rsOrg!日数 だと下記の日付チェックは不要 rsNew.AddNew Debug.Print rsOrg(0).Name rsNew(0) = rsOrg(0) rsNew(1) = rsOrg(1) rsNew(2) = rsOrg(2) rsNew(3) = i rsNew(4) = rsOrg(i + 3) 'rsNew.Update 'To rsOrg!日数の場合 If IsDate(Format(CStr(rsOrg(0)) & Format(rsOrg(1), "00") & _ Format(rsOrg(2), "00"), "@@@@/@@/@@")) Then rsNew.Update Else rsNew.CancelUpdate End If Next rsOrg.MoveNext Loop rsOrg.Close: Set rsOrg = Nothing rsNew.Close: Set rsNew = Nothing MsgBox "finished" End Sub
CSVに吐き出してインストールするコードは2、30分もあったら書けると思いますが・・・。
- Nii
- ベストアンサー率48% (79/162)
モジュールを書けばという気もしますが、今回のみって事でしたら、とりあえず、力仕事で、追加クエリを作成し、順番に実行はどうでしょうか? 銀行コード| 年 |月|1|1日| ↓ 銀行コード| 年 |月|日|営業日フラグ| 同様に 銀行コード| 年 |月|2|2日| ↓ 銀行コード| 年 |月|日|営業日フラグ| と31回クエリ実行では?
お礼
クエリでここまでできるとは・・・ 感動しました。 あなたは天才です。師匠と呼ばせてください。 深く感謝いたします。 ありがとうございました。