• ベストアンサー

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|

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

逆だとクロス集計クエリで簡単なんですけどね... 日(数値型)だけのフィールドのテーブルを作成して1~31を登録 追加又はテーブル作成クエリにて、現在のテーブルと日だけのテーブルを選択 銀行コード;年;月;日;営業日フラグ:Dblookup(Strconv([日]&"日",4),"テーブル名","銀行コード='" & [銀行コード] & "' And [年]=" & [年] &" And [月]=" & [月]) として日の抽出条件に <=[日数] として存在しない日付は排除します。 ※フィールド名の日付が半角の場合はStrconv関数での全角化の設定をはずしてください。

stolichnaya
質問者

お礼

クエリでここまでできるとは・・・ 感動しました。 あなたは天才です。師匠と呼ばせてください。 深く感謝いたします。 ありがとうございました。

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

銀行休日マスタテーブル(銀行コード以外は数値型) 銀行コード| 年 |月|日数|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

noname#22222
noname#22222
回答No.3

CSVに吐き出してインストールするコードは2、30分もあったら書けると思いますが・・・。

  • Nii
  • ベストアンサー率48% (79/162)
回答No.1

モジュールを書けばという気もしますが、今回のみって事でしたら、とりあえず、力仕事で、追加クエリを作成し、順番に実行はどうでしょうか? 銀行コード| 年 |月|1|1日|       ↓ 銀行コード| 年 |月|日|営業日フラグ| 同様に 銀行コード| 年 |月|2|2日|       ↓ 銀行コード| 年 |月|日|営業日フラグ| と31回クエリ実行では?

関連するQ&A

専門家に質問してみよう