Workbooks.OpenText

OpenText
Workbooks
Excel
VBA
Generator 本文を折り畳む 本文を開く

はじめに

Workbooks Collection の OpenText Method は、テキストファイルを読み込みます。

VBA Code Generator

このツールは、指定した条件にマッチする VBA コードを作成します。
Workbooks.OpenText
Filename:= ファイル名は必須。
StartRow:= データ取りこみ開始行を 1 から始まる数字で指定。
DataType:= テキストファイルの書式。
これらは xlDelimited (文字区切り) のときのみ有効。
TextQualifier:= 文字列を囲む引用符の種類を指定。
ConsecutiveDelimiter:= 連続した区切り文字を1つとみなす。
Tab:= Semicolon:= Comma:= Space:= Other:= OtherChar:=
番目の文字目からの列を、 として扱う。

実例

最も一般的な CSV ファイルの読み込み

  1. 次のコマンドは、カンマ(,)区切りのテキストファイルを、最も素直な方法で読み込みます。
    Workbooks.OpenText Filename:= "C:\usr\VBA\temp.csv", 
        DataType:= xlDelimited, Comma:= True
    

スペースやタブで区切られたファイルの読み込み

  1. スペースやタブで区切られたテキストファイルを読み込む場合には、連続した区切り文字を 1 つの区切りとして読み込む方が適しています。
    Workbooks.OpenText Filename:= "C:\usr\VBA\temp.csv", 
        DataType:= xlDelimited, TextQualifier:= xlTextQualifierNone, 
        ConsecutiveDelimiter:= True, Tab:= True, Space:= True
    

固定長テキストファイルの読み込み

  1. 次のコードは、固定長テキストを、先頭から 10 文字、次の20 文字、 31 文字目以降、の 3 列に切り分けて、ワークシートに読み込みます。
    Workbooks.OpenText Filename:= "C:\usr\VBA\temp.txt", 
        DataType:= xlFixedWidth, 
        FieldInfo:= Array(Array(0,1),Array(10,1),Array(30,1))
    
    各列に切り分けた文字列が Excel のセルに格納される時に、前後の半角スペースが自動的に切り取られます。そのため、上の例でも、A列やB列に格納される文字列の長さは、10文字とは限りません。

解説

OpenText Method

Workbooks.OpenText(Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo)

Filename:= "C:\some.csv"

必須。読み込むファイル名を指定する。

Origin:= xlWindows

英語版のみ。

StartRow:= 1

テキストファイルの取りこみ開始行を指定する。先頭は 1 。

DataType:= xlDelimited

ファイル形式の指定。Const xlDelimited = 1 (カンマ等による文字区切り) または、Const xlFixedWidth = 2 (固定長) のいずれかを指定する。省略時は xlDelimited 。

TextQualifier:= xlTextQualifierDoubleQuote

文字列の引用符を指定。Const xlTextQualifierDoubleQuote = 1 (") または、Const xlTextQualifierSingleQuote = 2 (') または、Const xlTextQualifierNone = -4142 (&HFFFFEFD2) (引用符無し) のいずれかを指定する。省略時は xlTextQualifierDoubleQuote 。

ConsecutiveDelimiter:= False

連続した区切り文字を 1 文字として扱うときは True 。省略時は False 。

Tab:= False

引数 DataType に xlDelimited を指定し、区切り文字にタブを使うときは True 。省略時は False 。

Semicolon:= False

引数 DataType に xlDelimited を指定し、区切り文字にセミコロン (;) を使うときは True 。省略時は False 。

Comma:= False

引数 DataType に xlDelimited を指定し、区切り文字にカンマ (,) を使うときは True 。省略時は False 。

Space:= False

引数 DataType に xlDelimited を指定し、区切り文字にスペースを使うときは True 。省略時は False 。

Other:= False

引数 DataType に xlDelimited を指定し、区切り文字に OtherChar で指定した文字を使うときは True 。省略時は False 。

OtherChar:= "$"

引数 Other が True のとき、この引数に区切り文字を指定する。複数の文字を指定したときは、先頭の文字だけが区切り文字となる。

FieldInfo:= Array(Array(1, 3))

各列のデータ形式を示す配列を指定する。
  1. 引数 DataType が xlDelimited (文字区切り) のとき
    2 つの要素を持つ配列の配列を指定します。2 つの要素を持つ配列の各々が、各列の処理方法を決定します。1 番目の要素には 1 から始まる列の番号を指定し、2 番目の要素には、次のような、各列の変換方法を指定します。
    列の番号変換方法
    1標準
    2文字列
    3MDY 形式の日付
    4DMY 形式の日付
    5YMD 形式の日付
    6MYD 形式の日付
    7DYM 形式の日付
    8YDM 形式の日付
    9その列は削除
    Microsoft の解説によると、
    1. 列の指定順序は問いません。
    2. 指定の無い列は、標準形式とみなします。
    ということになっているが、1. は正しく、2. は間違い(もしくは、バージョンにより不具合がある)。たとえば、次の例では、3 番目の列は削除され、最初の列は文字列として解釈され、残りの列は標準形式として解釈されるはずだが、
    Array(Array(3, 9), Array(1, 2))
    
    これを実行すると、2列目が削除されることがある。確実に実行するには、次のように、途中を飛ばさないで指定すること。4列目以降は省略しても標準として解釈される。
    Array(Array(3, 9), Array(1, 2), Array(2, 1))
    
  2. 引数 DataType が xlFixedWidth (固定長) のとき
    配列の 1 番目の要素には、行のどの位置から処理が行われるかを 0 から始まる整数で指定します。2 番目の要素には変換方法を 1 〜 9 の数値で指定します (上の対応表参照)。
    次の例は、固定長のテキスト ファイルから 2 つの列を読み込みます。最初の列は行頭から 10 文字目までが入ります。11 文字目から 15 文字目まではスキップします。2 番目の列は 16 文字目から行の終わりまでとなります。
    Array(Array(0, 1), Array(10, 9), Array(15, 1))
    

History

2002/3/24
URL移転
2001/2/25
引数 FieldInfo に関する記述の誤りを訂正。
2001/2/23
初版
本文を折り畳む back to home index of VBA