プロが教える店舗&オフィスのセキュリティ対策術

下のような項目の、「銀行休日マスタテーブル」が存在します。
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|

A 回答 (4件)

逆だとクロス集計クエリで簡単なんですけどね...



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

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

深く感謝いたします。
ありがとうございました。

お礼日時:2006/09/22 17:39

銀行休日マスタテーブル(銀行コード以外は数値型)


銀行コード| 年 |月|日数|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
    • good
    • 0

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

    • good
    • 0

モジュールを書けばという気もしますが、今回のみって事でしたら、とりあえず、力仕事で、追加クエリを作成し、順番に実行はどうでしょうか?


銀行コード| 年 |月|1|1日|
      ↓
銀行コード| 年 |月|日|営業日フラグ|
同様に
銀行コード| 年 |月|2|2日|
      ↓
銀行コード| 年 |月|日|営業日フラグ|
と31回クエリ実行では?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!