Excel VBAリファレンス(VBAのファイル入出力編)

2024-01-07

VBA(Visual Basic for Applications)に実装されている入出力関連のステートメントおよび関数について、リファレンスとして利用できるように一覧表を掲載しておきます。

■VBAにおけるファイル入出力の概要

VBAのファイル入出力については、多くの機能が提供されていてわかり難いですが、主なステートメントはOpen/Close、Lock/Unlock、Get/Put、Input/Write、Line Input/Printのように2つの機能が対になっているので、2つずつセットにすると覚え易いです。

また、ファイルのアクセス方式(「シーケンシャル」「バイナリ」「ランダム」の3種類(注))によって使用できる機能が異なりますので、下表のような対応関係を把握しておくと良いです。

(注)Openステートメントのmode引数で指定可能なファイルモードは5種類ありますが、シーケンシャルファイルのモードが「Input(入力モード)」「Output(出力モード)」「Append(追加モード)」に細分化されているだけです。

入出力機能 ファイルアクセス方式
シーケンシャル バイナリ ランダム
Open/Close
Lock/Unlock ×
Get/Put ×
Input/Write × ×
Line Input/Print × ×

■ファイル入出力関連のステートメント

VBA本体に実装されている入出力関連のステートメントは下表の通りです。

なお、VBAのFileSystemクラスにはファイルやフォルダを取扱う機能が集められており、下表以外にも多くのステートメントや関数が提供されています。
⇒VBAのFileSystemクラスについては、Excel VBAリファレンス(VBA(Visual Basic for Applications)編)を参照して下さい。

Closeステートメント
説明 開いたファイルへの入力/出力(I/O)を終了する
構文 Close [filenumberlist]
引数 filenumberlist 1つまたは複数のファイル番号を指定
(省略時は全てのファイルを閉じる)(※)複数のファイル番号を指定する場合は、「#1, #2」のようにカンマ区切りで記述。
Getステートメント
説明 開いたファイルから変数にデータを読み込む
構文 Get [#]filenumber, [recnumber], varname
引数 filenumber ファイル番号を指定
recnumber 読み取りを開始するレコード番号(Randomモード)またはバイト番号(Binaryモード)を指定
(省略時は次の読み込み位置から読み込む)
varname 読み込み先変数名を指定
Inputステートメント
説明 開いたシーケンシャルファイルから変数にデータを読み込む
構文 Input #filenumber, varlist
引数 filenumber ファイル番号を指定
varlist 1つまたは複数の読み込み先変数名を指定

(※)複数の変数名を指定する場合は、「変数1, 変数2」のようにカンマ区切りで記述。

Line Inputステートメント
説明 開いたシーケンシャルファイルから変数に1行分のデータを読み込む
構文 Line Input #filenumber, varname
引数 filenumber ファイル番号を指定
varname 読み込み先変数名を指定
Lockステートメント
説明 開いたファイルの全てまたは一部をロックする
構文 Lock [#]filenumber, [recordrange]
引数 filenumber ファイル番号を指定
recordrange ロックするレコードの範囲を指定
(省略時はファイル全体をロックする)(※)指定可能な形式は以下の2パターン。
recnumber:レコード番号(Randomモード)またはバイト
番号(Binaryモード)を指定
[startTo end:ロックする範囲の最初と最後のレコード番号またはバイト番号を指定
(start省略時はファイルの先頭が開始位置)
Nameステートメント
説明 ファイル、ディレクトリまたはフォルダの名前を変更する
構文 Name oldpathname As newpathname
引数 oldpathname 既存ファイルのパスを指定
newpathname 新しいファイルのパスを指定
Openステートメント
説明 ファイルを開き、ファイルへの入出力(I/O)を有効にする
構文 Open pathname For mode [Access access] [lock] As [#]filenumber [Len = reclength]
引数 pathname ファイルのパスを指定

(※)Inputモード以外でファイルが存在しない場合、指定したファイルを作成。

mode ファイルモードを指定

(※)指定可能なキーワードは以下の5つ。
Append:シーケンシャル追加モード
Binary:バイナリモード
Input:シーケンシャル入力モード
Output:シーケンシャル出力モード
Random:ランダムモード(既定値)

access 開いたファイルに許可する操作を指定

(※)指定可能なキーワードは以下の3つ。
Read:読み込み
Write:書き込み
Read Write:読み込み/書き込み

lock 開いたファイルに対する他のプロセスからの操作の制限を指定

(※)指定可能なキーワードは以下の4つ。
Shared:読み書きを許可(既定値)
Lock Read:読み込みをロック
Lock Write:書き込みをロック
Lock Read Write:読み込み/書き込みをロック

filenumber ファイル番号を指定
reclength レコード長(Randomモード)またはバッファ長(Inputモード、Outputモード、Appendモード)を指定

(※)Binaryモードの場合はLen句を無視。

Printステートメント
説明 表示形式のデータをシーケンシャルファイルに書き込む
構文 Print #filenumber, [outputlist]
引数 filenumber ファイル番号を指定
outputlist 出力する式または式のリストを指定

(※)指定可能な形式は以下の通り(Spc関数とTab関数については次項参照)。
[{Spc(n)|Tab[(n)]}] [expression] [charpos]
expression:出力する数式または文字列式を指定
charpos:次の文字の挿入ポイントを指定
最後の文字の直後に挿入ポイントを配置する場合
はセミコロン、絶対列番号に挿入ポイントを配置
する場合はTab関数を使用。
(省略時は次の文字を次の行に表示)

Putステートメント
説明 変数のデータをファイルに書き込む
構文 Put [#]filenumber, [recnumber], varname
引数 filenumber ファイル番号を指定
recnumber 書き込みを開始するレコード番号(Randomモード)またはバイト番号(Binaryモード)を指定
(省略時は次の書き込み位置から読み込む)
varname 書き込み元変数名を指定
Unlockステートメント
説明 開いたファイルの全てまたは一部をロック解除する
構文 Unlock [#]filenumber, [recordrange]
引数 filenumber ファイル番号を指定
recordrange ロック解除するレコードの範囲を指定
(省略時はファイル全体をロック解除する)(※)指定可能な形式は以下の2パターン。
recnumber:レコード番号(Randomモード)またはバイト
番号(Binaryモード)を指定
[startTo end:ロック解除する範囲の最初と最後のレコード番号またはバイト番号を指定
(start省略時はファイルの先頭が開始位置)
Widthステートメント
説明 開いたファイルに出力行の幅を割り当てる
構文 Width #filenumber, width
引数 filenumber ファイル番号を指定
width 新しい行を開始するまでに表示する文字数を指定
Writeステートメント
説明 シーケンシャルファイルにデータを書き込む
構文 Write #filenumber, [outputlist]
引数 filenumber ファイル番号を指定
outputlist コンマで区切られた1つ以上の数値式または文字列式を指定
(省略時は空白行を出力)

■ファイル入出力関連の関数

VBA本体に実装されている入出力関連の関数は下表の通りです。

なお、VBAのStringクラスには文字列を取扱う機能が集められており、下表以外にも多くの関数が提供されています。
⇒VBAのStringクラスについては、Excel VBAリファレンス(VBA(Visual Basic for Applications)編)を参照して下さい。

Format関数
説明 書式指定式に従って書式設定した結果を返す
構文 Format(Expression, [Format], [FirstDayOfWeek], [FirstWeekOfYear])
引数 Expression 書式設定の対象となる式を指定
Format 書式指定式を指定(省略時は既定の書式を設定)
FirstDayOfWeek 週の最初の曜日をVbDayOfWeek列挙体で指定

(※)VbDayOfWeek列挙体の値は以下の通り。
vbUseSystemDayOfWeek(0):週初の曜日はシステムで指定されている曜日
vbSunday(1):週初の曜日は日曜日
vbMonday(2):週初の曜日は月曜日
vbTuesday(3):週初の曜日は火曜日
vbWednesday(4):週初の曜日は水曜日
vbThursday(5):週初の曜日は木曜日
vbFriday(6):週初の曜日は金曜日
vbSaturday(7):週初の曜日は土曜日

FirstWeekOfYear 年の最初の週をVbFirstWeekOfYear列挙体で指定

(※)VbFirstWeekOfYear列挙体の値は、以下の通り。
vbUseSystem(0):年初の週はシステムで指定されている週
vbFirstJan1(1):年初の週は1月1日を含む週
vbFirstFourDays(2):年初の週は4日以上の日数を含む週
vbFirstFullWeek(3):年初の週は1週間全体を含む週

Spc関数
説明 PrintステートメントまたはPrintメソッドと共に使用し、指定した数のスペースを挿入する
構文 Spc(n)
引数 n 次の式を表示または印刷する前に挿入するスペースの数を指定
Tab関数
説明 PrintステートメントまたはPrintメソッドと共に使用し、次の文字の出力位置を移動する
構文 Tab[(n)]
引数 n 次の式を表示または印刷する前に移動する列番号を指定
(省略時は次の印刷領域の最初に挿入ポイントを移動)

国本温子(著),緑川吉行(著),できるシリーズ編集部(著)
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ

大村あつし(著),古川順平(著)
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ

高橋宣成(著)
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ

リファレンス

Posted by hides