次の方法で共有

Access 分割してテキストファイルへ出力する方法

Anonymous
2014-02-18T06:31:38+00:00

いつもお世話になっております。

ボタンを押すと「テーブル1」のデータをフィールド[店舗ID]別に

名前をつけてテキストファイルで保存したいのですが

クエリを店舗毎に作成すると大量な数のクエリとなってしまいます。

何か変更が生じると全てのクエリを修正するのも

とても大変です。

クエリを店舗毎に作成しなくても出力する方法はございますでしょうか。

<テーブル1>

[店舗ID] 項目1 項目2 項目3・・・・・


01  ○○○ ○○○ ○○○

01  ○○○ ○○○ ○○○

01  ○○○ ○○○ ○○○

02  ○○○ ○○○ ○○○

02  ○○○ ○○○ ○○○

02  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

上記のようなデータを 実際にはヘッダー無し

下記のように出力したいのです。

ファイル名:01_●●店.txt

[店舗ID] 項目1 項目2 項目3・・・・・


01  ○○○ ○○○ ○○○

01  ○○○ ○○○ ○○○

01  ○○○ ○○○ ○○○

ファイル名:02_■■店.txt

[店舗ID] 項目1 項目2 項目3・・・・・


02  ○○○ ○○○ ○○○

02  ○○○ ○○○ ○○○

02  ○○○ ○○○ ○○○

ファイル名:03_▲▲店.txt

[店舗ID] 項目1 項目2 項目3・・・・・


03  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

03  ○○○ ○○○ ○○○

お手数ですが、ご教示頂けたらと思います。

よろしくお願い致します。

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

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

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

質問作成者が受け入れた回答

Anonymous
2014-02-19T13:18:35+00:00

MukkuMukuです。

こんな感じにすればよいのではないかと

dim rs as dao.Recordset

set rs = currentdb.openrecordset("select distinct 店舗id from table1")

do until rs.eof

currentdb.execute "select * into [" & rs(0) & "_output.txt] in 'output_dir'[Text;FMT=Delimited;HDR=NO;IMEX=0;] from table1 where 店舗id='" & rs(0) & "'"

rs.movenext

loop

ファイル出力部分についてはお好みで。

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

5 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

7 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-02-20T09:54:15+00:00

    どうもありがとうございます。

    いつもお世話になっております。

    DAO、SQLにつても未知の世界なので四苦八苦しておりますが

    調べてわかってきた事をまとめてみました。

    下記にて動作ができました。


    Private Sub cmd_exp_Click()

    ’「参照設定」をDAOライブラリを設定

    ’①変数rs をDAO Recordsetオブジェクトで宣言

        Dim rs As DAO.Recordset

    ’②カレントデータベースに接続

    ’ 変数rs=「カレントデータベースを開く」テーブル1の[店舗ID]のグループ化

        Set rs = CurrentDb.openrecordset("select distinct 店舗id from テーブル1")

    ’③do until rs.eof~Loop 最初のレコードから最後のレコードまでループ

        Do Until rs.EOF

    ’④SQLの実行 テーブル作成クエリ?SELECT...INTO ステートメント

        CurrentDb.Execute "select * into [" & rs(0) & "_output.txt] in 'C:\Test'[Text;FMT=Delimited;HDR=NO;IMEX=0;] from テーブル1 where 店舗id='" & rs(0) & "'"

    '次のレコードへ移動

        rs.MoveNext

        Loop

    End Sub


    コメントを入れながら理解しようとしているのですが、

    ※理解したつもりで、誤っている部分もあると思うのですが。。。

    ④の考え方が調べてみてもわかりませんでした。。。

     すみませんがもう少し教えて頂けますでしょうか。

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

    0 件のコメント コメントはありません
  2. Anonymous
    2014-02-19T05:17:45+00:00

    >①店舗IDはテキスト型で、順番にはなっておりません。

    >  for i = 1 to 店舗数 の部分はどのようにしたらよろしいのでしょうか?

     

    店舗IDがインデックスではないのですね。

    ループ実行前にselect count (distinct 店舗ID) で取得されてはいかがでしょうか。

     

    >②ファイル出力文はなんとなくわかるのですが

    >SQLの実行文 はどのような記述になるのでしょうか?

    >基となるクエリを作成しておいて実行するということなのでしょうか。

     

    失礼な言い方になるかもしれませんが、ご自身で調べる行為をされていますでしょうか?

    DAO、ADO、DocmdなどVBAにおけるSQLの実行方法はgoogleなどの検索エンジンで検索すれば

    たくさんHitする内容のはずです。

    事例を元に半日くらい悪戦苦闘してみるとなんとかなったりするものですよ。

     

    >初心者で理解に乏しくてすみません。

     

    質問履歴を確認しましたが、2011年からAccessに携わられているのでしたら少なくとも初心者ではないとお見受けします。

    回答を丸々もらってコピー貼り付けするだけでは、何よりご自身のためにならないと思いますので。。。

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

    0 件のコメント コメントはありません
  3. Anonymous
    2014-02-18T08:08:49+00:00

    tnktex 様

    ご回答どうもありがとうございます。

    ①店舗IDはテキスト型で、順番にはなっておりません。

      for i = 1 to 店舗数 の部分はどのようにしたらよろしいのでしょうか?

    ②ファイル出力文はなんとなくわかるのですが

     SQLの実行文 はどのような記述になるのでしょうか?

     基となるクエリを作成しておいて実行するということなのでしょうか。

    初心者で理解に乏しくてすみません。

    よろしくお願い致します。

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

    0 件のコメント コメントはありません
  4. Anonymous
    2014-02-18T07:12:17+00:00

    店舗IDが1から順に振られているのであれば、VBAでLoopさせるのが手っ取り早いのでは。

    dim sqlstr as string

    sqlstr = "select * from テーブル1 where 店舗ID = "

    for i = 1 to 店舗数

    sqlstr = sqlstr & i

    ’ここにSQLの実行文とファイル出力文

    Next i

    ファイル名を店舗ごとに付けるには店舗名も配列化してループ内で呼ぶことで対応は一応できますね。

    SQLの実行とファイル出力の箇所はネットで調べればすぐだと思いますので割愛します。

    では。

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

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