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

xlsファイルからcsvで書き出したいのですが、書き出し後そのcsvファイルが開いてしまいます。この時保存をしてしまうと、セルが勝手に日付書式に読み込まれたまま保存されてしまいます。
これを回避するために、開いたcsvをそのまま保存せずに閉じたいのです。これはvbaでなんとかなるのでしょうか?
もしかしたら設定でできるのかも知れませんがどうしても見つかりませんでした。よろしくお願いします。

A 回答 (5件)

こんにちは。

No.3補足へのレスです。
>別のブックにコードを保存しておいて、
は○ですが
>書き出しをしたいxlsファイルからその別ファイルのマクロを呼び出して実行する
が少し意味が違うかもしれません。混乱させてしまってごめんなさい。

ActiveWorkbookの名前がhoge.xlsだとします。
これにマクロコードを入れて、hoge.xlsをhoge.csvとして保存するような設定だと
コードの修正などした後に、hoge.xlsを上書き保存せずに実行すると
hoge.csvにはVBAコードは保存できないですから、
コード修正が反映されないままになります。
また、VBAに保護をかけたりするとエラーとなります。
ですので、ただ単に、マクロのブックとデータのブックは分けたほうが良いですよ。
という意味でした。

運用の詳細が不明なのでなんとも言えないところですが、
VBAコードを含んだ、複数シートを持つxlsブックをcsvファイルとして保存する事は
あまりないような気もしましたから。
そういう点を考慮するならば

Sub csvで書き出し2()
ActiveSheet.Copy '■追加
With ActiveWorkbook
.SaveAs Filename:="C:\Documents and Settings\○○○\デスクトップ\hoge.csv" _
, FileFormat:=xlCSV
.Close SaveChanges:=False
End With
End Sub

という感じで、目的のシート『だけ』を一旦コピーしてcsvファイルとして保存するように
変更されたほうが良いかもしれませんね。
    • good
    • 0

No.1です。


No.3の方の回答で解決と思いますが、一応エラーじゃないよっていう弁解を。

>bookCSV.Close False
の「bookCSV」は、今開いているCSVファイルのブックのをあらわす変数のつもりだったので、回答者さんが書いてる
「ActiveBook」と同じものです。
コードが無かったので適当に名づけてみました。
だから、
ActiveBook.Close False
ってしてもらえればオッケーです(^^)
    • good
    • 0

こんにちは。


>xlsファイルからcsvで書き出したいのですが、書き出し後そのcsvファイルが開いてしまいます。
とは、どのように書き出していますか?
>書き出し後そのcsvファイルが開いてしまいます。
が『csvで保存後、開いたままなので閉じたい』という意味なら、
既出のコードを
Sub csvで書き出し()
With ActiveWorkbook
.SaveAs Filename:="C:\Documents and Settings\○○○\デスクトップ\hoge.csv" _
, FileFormat:=xlCSV
.Close SaveChanges:=False
End With
End Sub
とすれば良いと思います。
ただし、このコードは保存するファイルとは別のBookに置いて、実行しなければなりません。

また、EXCELでcsvファイルを開く時に、ある種のデータは、日付形式に自動的に認識されてしまいます。
これを文字列形式のままEXCELで開きたいという事になると、少し工夫が必要になります。
1)拡張子.csvを.txtに変更してテキストファイルとして開く。
2)(既出ですが)別Bookに[外部データの取り込み]でデータを取り込む。
などが考えられます。(マクロ処理可能)

この回答への補足

何度も申し訳ありません。
> このコードは保存するファイルとは別のBookに置いて、実行しなければなりません。

これは、別のブックにコードを保存しておいて、書き出しをしたいxlsファイルからその別ファイルのマクロを呼び出して実行する、ということになるのでしょうか?その際のマクロの指定方法はどうしたらよいのでしょうか?

補足日時:2006/04/03 23:28
    • good
    • 0

CSVファイルは、ファイルを保存するためのファイル形式です。


保存しないで閉じるというニーズが想像できません。
A列  B列 C列
2006/3/12qghs43
として、CSVで保存しました。
メモ帳で表示すると
2006/3/12,qghs,43
となってます。
これをエクセルで、データー外部データの取り込み-データの取り込み
CSVファイル指定-テキストファイルウイザード1/3-カンマや・・次へ
ーカンマー次へー第1フィールドー日付ー第2フィールドクリックー文字列ー第3フィールドー標準ー完了ー読み込み開始場所指定ーOK

2006/3/12qghs43
となり、だい1フィールドは日付書式です。
これのどこが都合が悪いのでしょうか。

この回答への補足

悪くはないのですが強いて言えば「手間を省く」でしょうか。
csv書き出しマクロ一押しで全部を終わらせたいのです。
わがままといえばわがままですが、「楽をするためのパソコン」ということでおゆるしを。

補足日時:2006/04/03 00:10
    • good
    • 0

閉じる時に、


bookCSV.Close False
(↑bookCSVがCSVで保存して今開かれた状態のブックとします。)
とすれば、保存しないで閉じられます。

この回答への補足

他も参考にしながら、マクロに書き加えてみました。
そしたら実行後「オブジェクトが必要です」とのエラーが出ました。エラー箇所はbookcsvの箇所でした。
正直vbaは全く分からないものでとんちんかんなことをしているかも知れませんがよろしくお願いします。
==
Sub csvで書き出し()
ChDir "C:\Documents and Settings\○○○\デスクトップ"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\○○○\デスクトップ\hoge.csv", FileFormat:=xlCSV, _
CreateBackup:=False
bookCSV.Close SaveChanges:=False
End Sub

補足日時:2006/04/03 00:18
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています