こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

AccessでExcel出力する際に「シングルコートなし」、日付は「YYYY/MM/DD」で出力したい

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

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でもどちらでも構いません。

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

よろしくお願いします。

投稿日時 - 2008-07-08 16:00:16

QNo.4160749

困ってます

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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/enduser/std_adp.php?p_faqid=4323&p_created=1209548050&p_sid=HDAC4-8j&p_accessibility=0&p_redirect=&p_lva=&p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PWRmbHQmcF9ncmlkc29ydD0mcF9yb3dfY250PTI5JnBfcHJvZHM9MTg2LDIyJnBfY2F0cz0mcF9wdj0yLjIyJnBfY3Y9JnBfcGFnZT0x&p_li=&p_topview=1
OK Wave:
http://faq.okwave.jp/EokpControl?&tid=102908&event=FE0006

投稿日時 - 2008-07-17 22:16:11

ANo.3

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

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

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

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

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

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

投稿日時 - 2008-07-17 14:15:17

ANo.2

問題になっている日付には、時刻部分は常にない(=全て「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ではユーザー関数の定義も有効だと思いますが、
こういった質問サイトにおける回答にそれを多用するのは、適切ではないと
思うのですが、いかがでしょうか。
(同時に提示されない場合、一般の方には検証ができない、という問題もあります)

投稿日時 - 2008-07-08 23:40:15

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関数を用いてもという場合は補足します。

投稿日時 - 2008-07-08 16:27:12

あなたにオススメの質問