Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12199 / 13646 ツリー ←次へ | 前へ→

【11820】VBAからのファイル出力 おじゃる 04/3/17(水) 9:42 質問
【11821】Re:VBAからのファイル出力 IROC 04/3/17(水) 9:49 回答
【11822】Re:VBAからのファイル出力 おじゃる 04/3/17(水) 10:00 質問
【11825】Re:VBAからのファイル出力 こうちゃん 04/3/17(水) 10:32 回答
【11829】Re:VBAからのファイル出力 おじゃる 04/3/17(水) 10:52 質問
【11834】Re:VBAからのファイル出力 おじゃる 04/3/17(水) 11:27 お礼

【11820】VBAからのファイル出力
質問  おじゃる  - 04/3/17(水) 9:42 -

引用なし
パスワード
   こんにちは。どなたか教えてください。

VBAから直接テキストファイルにデータを落とすことはできるのでしょうか。

よろしくお願いします。

【11821】Re:VBAからのファイル出力
回答  IROC  - 04/3/17(水) 9:49 -

引用なし
パスワード
   Open ステートメント
Print # ステートメント
Write # ステートメント

などで出来ます。

<ヘルプより>

ファイルへのデータの書き込み
 

大量のデータを処理する場合、ファイルにデータを書き込んだり、ファイルからデータを読み込むと便利です。Open ステートメントを使用すると、ファイルを直接作成したり、操作できます。Open ステートメントは、3 種類のファイル操作を提供します。

シーケンシャル アクセス (Input モード、Output モード、および Append モード) は、エラー ログやレポートなどをテキスト ファイルに書き込むときに使用します。


ランダム アクセス (Random モード) は、ファイルを開いたままデータを読み書きするときに使用します。ランダム アクセス ファイルでは、データをレコードの形で扱います。したがって、情報へのアクセスが迅速に、しかも簡単に行えます。


バイナリ アクセス (Binary モード) は、ビットマップ イメージの保存や表示など、ファイル内の任意のバイト位置に読み書き行うときに使用します。
メモ Open ステートメントは、アプリケーション独自のファイル形式を開く場合には使用できません。たとえば、Word 文書、Microsoft Excel スプレッドシート,、または Microsoft Access データベースを開くときに、Open ステートメントを使用してはいけません。Open ステートメントを使用すると、ファイルの整合性が失われたり、破損の原因となります。

次の表は、ファイルにデータを読み書きするときに使用される主なステートメントを示します。

アクセスの種類 データの書き込み/データの読み取り
シーケンシャル Print #, Write # /Input #
ランダム Put /Get
バイナリ Put /Get

【11822】Re:VBAからのファイル出力
質問  おじゃる  - 04/3/17(水) 10:00 -

引用なし
パスワード
   IROCさん、ありがとうございます。

とてもたくさんのデータを扱っているので、直接ファイルに書き込んで
そのファイルを読み込もうと思っています。
ランダム アクセスが一番早そうですが、先にテキストファイルを開いておくと
いう事でしょうか。
具体的に次のような場合はどうしたらよろしいでしょうか。

-------------------------
テキストファイル名 OUT_DATA.txt

For i=1 to 1000
For j=1 to 10
  Workbooks("book1").Sheets("sheet1").Cells(i,j) ←テキスト出力
Next
Next
-------------------------

よろしくお願いします。

【11825】Re:VBAからのファイル出力
回答  こうちゃん E-MAIL  - 04/3/17(水) 10:32 -

引用なし
パスワード
   おじゃるさん、IROCさん、こんにちは

>-------------------------
>テキストファイル名 OUT_DATA.txt
>
>For i=1 to 1000
> For j=1 to 10
>  Workbooks("book1").Sheets("sheet1").Cells(i,j) ←テキスト出力
> Next
>Next
>-------------------------

書き出すだけならフォーマットにもよりますが、SaveAsメソッドで出力もできます。
この例ではカンマ区切りで出力します。

  Range("A1:J1000").Select
  ActiveWorkbook.SaveAs Filename:= _
    "C:\OUT_DATA.txt", _
    FileFormat:=xlCSV, CreateBackup:=False

#加工しながらとかの条件があれば、IROCさんのご提示の方法が吉かも

【11829】Re:VBAからのファイル出力
質問  おじゃる  - 04/3/17(水) 10:52 -

引用なし
パスワード
   こうちゃんさん、ありがとうございます。

加工しながらですのでIROCさんの方法で試してみましたが、
1行に複数のデータをタブ付きで出力できません。

For i=1 to 1000
 For j=1 to 4
  Print #1,data(i,j), Tab(2);
 Next
Next

この方法だと、Tabの後ろで改行されてしまいます。
どうしたらよいでしょうか。
よろしくお願いします。

【11834】Re:VBAからのファイル出力
お礼  おじゃる  - 04/3/17(水) 11:27 -

引用なし
パスワード
   解決しました。
vbTab を使用したら出来ました。

処理が速くて大感激です。

IROCさん、こうちゃんさん、ありがとうございました!

12199 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free