重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

初めて質問させていただきます。

ACCESS2003で、出力用テーブルからCSVもしくはExcel出力をしたく、色々試してみましたが、希望通りにいかず悩んでおります。具体的には、以下のような悩みです。どなたか良いアイデアをお持ちでしたらご教授ください。

----------------------------------
●以下のプログラムでCSV出力をすると、日付に時間(0:00:0)が付加してしまう。

 DoCmd.TransferText acExportDelim, "", "出力データ用テーブル", 出力ファイル名, True

●以下のプログラムでEXCEL出力をすると、日付は「YYYY/MM/DD」で出力されるが、全てのテキスト型のデータの頭に「'」シングルコーテーションが付いてしまう。

 DoCmd.TransferSpreadsheet acExport, , "出力データ用テーブル", 出力ファイル名, True

●以下のプログラムでEXCEL出力をすると、日付が「dd-mm-yy」となってしまう。「YYYY/MM/DD」としたい。
 
 DoCmd.OutputTo acOutputTable, "出力データ用テーブル", acFormatXLS, 出力ファイル名, True

----------------------------------

シングルコーテーションは付かずに、日付も「YYYY/MM/DD」と表示されることが希望で、ファイルはCSVでもEXCELでもどちらでも構いません。

どなたか良い方法をご存知でしたらご教授ください。

よろしくお願いします。

A 回答 (4件)

No.2のDexMachinaです。



> 【実施したこと】

Excelに出力するまでの流れとしては、
 a)「テーブル1」から、テーブル作成クエリで「出力用テーブル」を作成、
 b)「テーブル1」から、追加クエリで「出力用テーブル」に追加、
のどちらか、ということでよろしいでしょうか。
(特に「a)」の可能性が高いかなと推測していますが)

その上で、データ元の「テーブル1」で書式を設定したのだとすると、残念ながら
「出力用テーブル」にはその書式は反映されませんので、Excelへの出力結果に
ついては、日付表記が変わらない、という結果にならざるを得ないと思います。

どうやら、選択クエリに対しては書式が引き継がれるのですが、
 ・追加クエリの場合は追加先のテーブルの書式設定に依存し、
 ・テーブル作成クエリの場合はデフォルト設定(?)に戻される
ということのようです。
(極端な例ですと、元のテーブルで「Yes/No型」のフィールドは、テーブル作成
 クエリで別テーブルに複製すると、元がチェックボックス表示だったものが
 テキストボックス表示に変えられてしまう、というのがあります)


ですので、上記「b)」のパターンでしたら、「出力用テーブル」の当該フィールドに
対して、直接書式を設定してやれば、Excelに対して書式が引き継がれるように
なると思います。

また、「a)」の場合は、
 イ)作成したテーブルに対して毎回書式を設定するか、
 ロ)テーブル作成クエリで、日付に対してFormat関数を適用するか、
  (→この場合、テーブル上のデータはテキスト型になってしまうため、
   Excel出力時には先頭に「'」がついてしまい、今回の解決策にならず・・・)
 ハ)テーブル作成クエリをやめて「b)」の形に変更するか、
  (全レコードを削除する削除クエリを実行後、追加クエリを実行、とすれば、
   テーブル(+そこに設定した書式)は保持して、レコードだけの入替が可能)
 ニ)テーブル作成クエリの代わりに、選択クエリを直接「OutputTo」の対象に
   する、
といったことで回避できるのではないかと思います。



【一応参考まで】「教えて!goo」と「OK Wave」のID・パスワードの確認方法です。
教えて!goo:
https://goo.e-srvc.com/cgi-bin/goo.cfg/php/endus …
OK Wave:
http://faq.okwave.jp/EokpControl?&tid=102908&eve …
    • good
    • 0

DexMachinaさん、ご回答ありがとうございました。



先週、質問させていただきましたScotch55です。
回答をいただいてから、質問者としてお礼を申し上げたくログインを試みておりましたが、ユーザーIDとパスワードが一致せず、ログインに失敗しており、時間ばかりが経過してしまいました。すみません。「Scotch56」というユーザーで再登録いたしました。以下、DexMachinaさんのアドバイスに沿い、実施した内容と結果です。
その後の経過をご報告いたします。

【実施したこと】------------------------------------------------
出力用テーブルはクエリによってINSERTされるものなので、そのクエリが参照しているテーブルをデザインビューで開き、その日付フィールドを選択して、『書式』プロパティを、「yyyy/mm/dd」と設定してから、「OutputTo」実行しました。

【結果】--------------------------------------------------------
DexMachinaさんの場合とは違う結果となりました。
セルを選択した場合の表示は「yyyy/mm/dd」と変わりましたが、セルの上の表示は「dd-mmm-yy」のままでした。

【現状】--------------------------------------------------------
方法を捜索中です。

何かよい方法が見つかりましたら再度、回答としてアップいたします。
    • good
    • 0

問題になっている日付には、時刻部分は常にない(=全て「0:00:00」)、ということで


よろしいでしょうか。

そうであれば、当該テーブルをデザインビューで開き、そのフィールドを選択して、
画面左下の『標準』タブの1行目『書式』欄に、「yyyy/mm/dd」と設定してから、
「OutputTo」を実行してみて下さい。
こちらの環境(Access2003・XP Pro・IBM ThinkPad X40)では、日付が
 「08-JUN-08」(→セルを選択した場合に表示されるのは「2008/7/8」)から、
 「2008/07/08」(→セルを選択した場合の表示は同じく「2008/7/8」)へと
変化しました。

どうやら、テーブルのフィールドに書式設定がある場合は、OutputToでは、Excelに
対しても同じ書式設定が出力されるようです。
(出力されたファイルのセルで「右クリック→セルの書式設定(F)」の表示形式で、
 「ユーザー定義」として「yyyy/mm/dd」が設定されていることを確認しました)


Hasky2007さんへ:
自身で作成・管理するDBではユーザー関数の定義も有効だと思いますが、
こういった質問サイトにおける回答にそれを多用するのは、適切ではないと
思うのですが、いかがでしょうか。
(同時に提示されない場合、一般の方には検証ができない、という問題もあります)
    • good
    • 0

tab1:



ID_日付_______単価___数量
_1_2008/07/07_\1,000_10.1
_2_2008/07/08_\2,000_10.2

[イミディエイト]
? FileWrite("C:\Temp\Test.csv", DBSelect("SELECT * FROM Tab1", ",", vbCrLF))
True

Test.csv-メモ帳

1,2008/07/07,1000,10.1
2,2008/07/08,2000,10.2

さて、このように幾つかの関数を用意すれば僅か1行でCSVファイルは出力可能です。

※どうしてもAccessの機能で実現できない場合でVBA関数を用いてもという場合は補足します。
    • good
    • 0

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

関連するカテゴリからQ&Aを探す