次の方法で共有

Access フィールド名が固定ではない場合のクエリ作成について

Anonymous
2015-03-05T01:02:10+00:00

お世話になります。

2つのExcelファイルをインポートし、それらをシリアル番号フィールドで

紐付けて、エクスポートとしたいと考えております。

インポートして出来たテーブルAのフィールドは以下のようになっています。

ID 11月分 12月分 1月分 2月分 型番 製品名 シリアル番号 価格・・・

インポートして出来たテーブルBのフィールドは以下のようになっています。

ID 型番 製品名 シリアル番号 価格 ・・・

クエリではテーブルB全レコードに対してテーブルAを紐付けます。

ID 12月分 1月分 2月分 3月分 型番 製品名 シリアル番号 価格 ・・・

※「3月分」はフィールドを追加しただけで、中身はNull。

但し、テーブルAの「x月分」は来月になると変わってしまいます。

来月は、12月分 1月分 2月分 3月分 となります。

※今回エクスポートしたものが、来月のテーブルAとなる。

要するに毎月テーブルAのフィールド名が変わってしまうので、予めクエリを

作っておくことができません。都度クエリを作成しエクスポートすることになります。

このようにフィールド名が変わってしまう場合でも、何かしらの方法で

予めクエリを作成しておくことは可能でしょうか。

例えば、テーブルAをインポートしたタイミングで「x月分」のフィールドを

左から、

  11月分 ⇒ a

  12月分 ⇒ b

  1月分 ⇒ c

   2月分 ⇒ d

とリネームし、エクスポートするときに、現在の月からリネーム前のフィールド名

を算出し、算出した月&"月分" AS a ・・・みたいなことをやればいいのかなと。。

この方法だと、元のフィールド名をいったんリネームし『元のフィールド名であろう

名前』で再度リネームすることになるので、(実施するタイミングとかによっては

違うx月分にならないか)ちょっと不安が残ります。

ご教示の程、宜しくお願い致します。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

7 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-03-11T00:52:32+00:00

    クエリのSQLをVBAで書き換えて自動化するぐらいしかなさそうです。

    クエリ名を Q1 として、

    Dim qd As DAO.QueryDef

    Dim stSql As String

    Dim i As Integer

    stSQL = "SELECT テーブルB.ID, "

    For i = -3 As -1

        stSQL = stSQL & "テーブルA." & Month(DateAdd("m",i,Date())) & "月分, "

    Next

    stSQL = stSQL & "Null As " & Month(Date()) & "月分, " & _

        "テーブルB.型番, テーブルB.製品名, テーブルB.シリアル番号, テーブルB.価格 " & _

        "FROM テーブルB LEFT JOIN テーブルA " & _

        "ON テーブルB.シリアル番号 = テーブルA.シリアル番号 " & _

        "ORDER BY テーブルB.ID;"

    Set qd = CurrentDb.QueryDefs("Q1")

    qd.SQL = strSQL

    Docmd.TransferSpreadsheet acExport, , "Q1","C:\test\test.xls", True

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2015-03-10T03:05:12+00:00

    ​tositaka さん、コメントをありがとうございます。

    ふぃいいあああ さん、こんにちは。

    マイクロソフト コミュニティをご利用いただき、ありがとうございます。

    月のフィールドを追加するため、クエリに直近 3 か月のフィールドが入るように、毎月フィールドを動的に指定したいってことですよね。

    ただ、こちらでも調べてみたのですが、良い方法が見つけられませんでした。

    お力になれず、すみません。。

    もしこちらの件について何か良い方法をご存知の方がいらっしゃいましたら、投稿をよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2015-03-06T04:18:18+00:00

    toshitakaさま

    ご連絡ありがとうございます。

    クエリはこんな感じです。

    SELECT [テーブルB].ID, [テーブルA].[12月分], [テーブルA].[1月分], [テーブルA].[2月分], Null AS 3月分, [テーブルB].型番, [テーブルB].製品名, [テーブルB].[シリアル番号], [テーブルB].価格

    FROM テーブルB LEFT JOIN テーブルA ON [テーブルB].[シリアル番号] = [テーブルA].[シリアル番号]

    ORDER BY [テーブルB].ID;

    ※インポートした「11月分」のフィールドは不要で、新たに「3月分」のフィールドを追加。

    このクエリの内容をエクスポートし、来月テーブルAとしてインポートすることに

    なります。

    なので、来月のクエリは

    SELECT [テーブルB].ID, [テーブルA].[1月分], [テーブルA].[2月分], [テーブルA].[3月分], Null AS 4月分, [テーブルB].型番, [テーブルB].製品名, [テーブルB].[シリアル番号], [テーブルB].価格

    FROM テーブルB LEFT JOIN テーブルA ON [テーブルB].[シリアル番号] = [テーブルA].[シリアル番号]

    ORDER BY [テーブルB].ID;

    としなくてはいけません。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. 削除済み

    この回答は当社の行動規範に違反したため削除されました。 アクションを実行する前にこの回答を手動で報告したか、自動検出機能により特定しました。 詳細については、当社の行動規範を参照してください。


    コメントはオフになっています。 詳細情報

  5. Anonymous
    2015-03-05T16:48:48+00:00

    クエリーはどんな感じになってます?

    SQLビューの内容を書いてみてはどうでしょう?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません