2018年8月16日ファイルVBAでテキストファイルの操作を行うにはVBAでテキストファイルの読み書きを行う場合、特殊な方法を除くと2つの方法があります。Input、Get、Write、Print、Putステートメントを使う。FileSystemObjectクラスを利用する。用途によってどちらを使うかを決めることになります。Open等ステートメントはコードが単純ですが、FileSystemObjectクラスにあるような便利な機能はありません。バイナリファイルを扱う場合はこちらを使います。FileSystemObjectクラスはメソッドやプロパティの使い方に癖がありますが、ファイルの存在をチェックできるメソッドなどの便利なメソッドが用意されています。ここではOpen等のステートメントを使ったテキストファイルの操作について説明します。OpenからCloseまでの流れテキストファイルを開いてから読み書きを行いファイルを閉じるまでには以下のいずれかの流れになります。reclength]Openステートメントを使うと既存のテキストファイルを開いたり、新規テキストファイルを作成したりすることが出来ます。複数の引数がありますが、ほとんどの場合は必須引数の3つ(PathnameとModeとFilenumber)だけを指定すればOKです。開くテキストファイルのパスをダブルクォーテーションで囲んで指定します。ドライブ名からファイル名までのフルパスを指定するか、ファイル名だけのどちらかを指定します。ファイル名だけの場合はカレントフォルダにあるファイルが開かれます。ファイルをどのように開くのかをキーワードで指定します。テキストファイルの任意の位置から読み書きシーケンシャル入力、出力モードとはテキストファイルを先頭から終端に向かって読み書きすることを言います。OutputモードとAppendモードの場合にパスのテキストファイルが存在しない場合はその名前のテキストファイルを新規作成します。ファイルの読み書きを指定します。引数Modeとの組み合わせが不正な場合は構文エラーになります。書き込みモードのAppendを指定して読み込みのReadアクセスを指定するなどです。開いたファイルを他のアプリケーションなどからアクセスできるようにするかどうかの制限を行います。テキストファイルを一意に認識するための番号を#1から#511の値で指定します。1ファイルしか扱わないのであれば「#1」としても構いません。Randamモードを指定した場合は読み書きを行うデータ長を指定します。それ以外の場合は読み書きを行う変数サイズをInteger型の範囲内(32767以下)で指定します。引数Modeが書き込みを行う「Output」または「Append」の場合、同じテキストファイルを異なるファイル番号で開こうとしても、先に開いた方に書き込み権限があるためエラーとなり開けません。引数Modeが「Input」「Binary」「Random」の場合、同じテキストファイルを異なるファイル番号で開くことが可能です。いずれにしてもよほどのことが無い限り、同じテキストファイルに対して複数のアクセスを同時に行うようなことは避けた方が無難です。FreeFile関数FreeFile関数はテキストファイルを開く際のOpenステートメントで使うことが出来るファイル番号を返します。ファイル番号が重複しないのであればFreeFile関数を使わずに#1などと書いても構いません。#FinenumberCloseステートメントはOpenステートメントで開かれたファイルを閉じます。Closeステートメントで閉じられた際のファイル番号は次のテキストファイルのOpenステートメントで使うことが出来るようになります。Openステートメントで指定したファイル番号を指定します。複数のファイル番号を指定することで一度に複数のファイルを閉じることが可能です。ファイル番号を省略した場合はそれまでにOpenステートメントで開いていたファイルを全て閉じます。開いていないファイル番号をCloseで指定した場合Openステートメントとは異なるファイル番号をCloseで指定した場合、エラーは発生せず何も閉じられることなくCloseステートメントは終了します。手書きで「#1」などとファイル番号を書いている場合にはファイルが閉じられないバグになります。File)に達しているかを判定する関数です。ファイル終端に達している場合はTrueを返し、そうでない場合はFalseを返します。引数にOpenステートメント時に指定したファイル番号を設定します。Untilループ条件として利用します。Openステートメントで指定したファイル番号を指定します。読み込んだテキストファイルの行データを格納する変数を指定します。変数の型はVariant型かString型のいずれかです。InputステートメントはOpenステートメントでInputモードで開いたテキストファイルを改行コード(CRLF、LF、CRのいずれか)までの行単位で読み込みます。次に読み込むときは次の行の先頭からになります。改行コード自体は読み込んだデータには含まれません。File)まで読み込み可能ですが、それ以上読み込みを行うとエラーになります。そのためEOF関数を使ってファイル終端かどうかをチェックする必要があります。Openステートメントで指定したファイル番号を指定します。書き込む文字列を指定します。Inputステートメントはテキストファイルからカンマ(,)や改行(CRLF、LF、CRのいずれか)があるまでのデータを読み込みます。読み込んだあとに再度Inputステートメントを使うと次のカンマや改行までが読み込まれます。引数Varlistを複数指定している場合はカンマが見つかるまでの文字列を各変数に設定します。Inputステートメントの方が適しています。読み込まれた元のデータがダブルクォーテーションで囲まれていても、Inputステートメントで取得したデータはダブルクォーテーションの囲みは無い状態になります。読み込む対象のテキストファイルは以下のようなCSVファイルと形式になります。File)まで読み込み可能ですが、それ以上読み込みを行うとエラーになります。そのためEOF関数を使ってファイル終端かどうかをチェックする必要があります。Openステートメントで指定したファイル番号を指定します。書き込むデータを指定します。引数outputlistは以下の構文で構成されます。]Outputlistを構成するSpcとTabとcharposですが、挙動が分かりにくく使い勝手が悪いため使わない方が無難です。Tabですが、タブ文字を書き込むように思いますが実際は空白スペースを書き込みます。引数nもSpnとTabでは設定する値に際があり、Spnは引数nの数だけスペースを書き込みますが、Tabは引数nから1引いた数のスペースを書き込みます。いうのは個人的には触りたくないので使わないようにしています。書き込みたい文字列を事前に編集して、expressionとしてそれを渡す方が柔軟なコードになります。Openステートメントで指定したファイル番号を指定します。書き込むデータを指定します。複数書き込む場合はカンマで区切って指定します。WriteステートメントはOpenステートメントでOutputモードやAppendモードで開かれたテキストファイルにCSVファイル形式のデータを書き込みます。書き込まれたデータはダブルクォーテーションで囲まれます。データ間はカンマで区切られます。1行単位の書き込みはPrintステートメントの方が適しています。Excel作業をVBAで効率化シェアお問合わせTOPへ。