【VBA】ファイルを開く《Workbookで開く》

Excel・VBA

ファイルを開く操作に関して、以下の内容について紹介します。

【今回の内容】
1.ワークブックを開く
2.テキストファイルをエクセルファイルで開く(OpenText メソッド)
3.ワークブックを閉じる

ワークブックを開く

既存のワークブックを開くには次のように書きます。

《ワークブックを開く》
 Workbooks.Open Filename: = 絶対パス

ワークブックを開く操作をする際によくあると思われるエラーとその対策です。

《エラー原因》パス・ファイル名が間違っている

パスやファイル名が間違っていると、存在しないファイルを指定することになるのでエラーになります。よくあるのはディレクトリとファイル名を繋げる際に”\”を忘れていることが多いです。対策としては、パス・ファイル名を十分に確認することが挙げられます。

なお、パスもしくはファイル名の間違いに気付かずにエラー処理を先に組み込んでしまうと、処理が実行されなくなる可能性があるので注意です。パスやファイル名の指定はよく確認しましょう。

また、拡張子が不明な場合はワイルドカードとDir関数を利用することで対応することが可能です。

《エラー原因》ファイルが存在しない

指定したファイルが存在しない場合にはエラーが発生します。ファイルが存在しない場合の対策としては、開く前にDir関数で存在を確認しファイルの有無で処理を分岐させる方法が挙げられます。

《エラー原因》ファイルを二重に開こうとする

開こうとしたファイルが既に開いている場合にエラーが発生します対策としては、開く前に現在開いているワークブックの名前を確認する方法があります。

このエラーはデバッグ時にファイルを開いていることを忘れてコードを実行して発生することがありますが、それ以外でこのエラーが発生した場合は、コードが間違っている可能性が高いです。

サンプルコード( ワークブックを開く )

これらを踏まえたワークブックを開くサンプルコードは次の通りです。
サンプルコードでは、コードを実行しているファイルと同じディレクトリにdummyファイルが存在すれば開くようになっています。

Sub File_open_sample()
  Dim cdir As String
  Dim fname As String
  Dim dummy As String
  Dim wb As Workbook

  fname = "dummy.*"
  cdir = ThisWorkbook.Path 

  If Dir(cdir & "\" & fname) = "" Then GoTo edsub
  fname = Dir(cdir & "\" & fname) 

  For Each wb In Workbooks
   If wb.Name = fname Then GoTo edsub
  Next 

  dummy = cdir & "\" & fname
  Workbooks.Open Filename:=dummy 
edsub:
  End Sub 

サンプルコードの説明は次の通りです。

サンプルコードの説明

テキストファイルをエクセルファイルで開く(OpenText メソッド)

csvやテキストファイルをエクセルで開く場合、次のように書きます。

《csvやテキストをエクセルで開く》
Workbook.OpenTxt(FileName、Origin、StartRow、DataType、textqualifier、consecutivedelimiter、Tab、セミコロン、コンマ、スペース、その他、 otherchar、 FieldInfo、TextVisualLayout、DecimalSeparator、ThousandsSeparator、 TrailingMinusNumbers、Local

引数は以下とおりです。(表がスクロールします)

名前 内容 省略可否
FileName ファイルの名前を指定。パスを含めての指定を推奨。
省略時はカレントフォルダ内のファイルが対象。
省略不可
Origin テキスト ファイルの元のプラットフォームを指定。
定数: xlMacintosh、xlWindows、xlMSDOS
省略すると、テキストファイルのインポートウィザードの [元のファイル] オプションの現在の設定を使用します。
省略可
StartRow テキストの読み込みを開始する行番号を指定
既定値は 1
省略可
DataType ファイルに含まれるデータの形式を指定。
定数: xlDelimitedxlFixedWidth
区切り文字として、Tab,Semicolon,Comma,Space,Other(任意文字)を使用するときは、xlDelimitedを指定。
固定長フィールド形式では、xlFixedWidthを指定。
省略時は、ファイルを開いたときにデータの形式が自動的に決められます。
省略可
TextQualifier 文字列の引用符を指定。 省略可
Consecutivedelimiter 連続した区切り文字を1文字として扱う際は True を指定。
既定値はFalse。
省略可
Tab DataTypeにxlDelimitedを指定。
区切り文字にタブを使うときは True
既定値は False
省略可
Semicolon DataTypeにxlDelimitedを指定。
区切り文字にセミコロンを使うときはTrue
既定値は False
省略可
Comma DataTypeにxlDelimitedを指定。
区切り文字にコンマを使うときはTrue
既定値はFalse
省略可
Space DataTypeにxlDelimitedを指定。
区切り文字にスペースを使うときはTrue
既定値はFalse
省略可
Other DataTypeにxlDelimitedを指定。
Othercharで指定した文字を区切り文字として使用する場合はTrueを指定。
既定値はFalse
省略可
Otherchar 引数OtherがTrueの場合に使用。
任意の区切り文字を指定。複数指定時は、先頭の文字が区切り文字となる。
省略可
FieldInfo 各列のデータ形式を示す配列を指定。 
テキストファイルの各列ごとにデータ形式を指定するときに使用。
DataTypeの値によって以下のように指定する。
xlDelimited :Array([ 列番号 ],[データ型])
xlFixedWidth:Array([区切り位置],[データ型])

複数の列をそれぞれ指定するときはArray(Array([列番号 or 区切り位置],[データ型]),Array([列番号 or 区切り位置],[データ型]),・・・)となる。
省略可
TextVisualLayout テキストの視覚的な配置を指定。 省略可
DecimalSeparator Excel で数値を認識する場合に使う小数点の記号。既定はシステム設定。 省略可
ThousandsSeparator Excel で数値を認識する場合に使う桁区切り記号。既定はシステム設定。 省略可
TrailingMinusNumbers 末尾に負符号が付く数値を負の数値として扱う場合は、True を指定。
Falseまたは省略時は、末尾に負符号が付く数値は文字列として扱われます。
省略可
Local 区切り記号・数値・データの書式設定にコンピューターの地域設定を使用する場合は、Trueを指定。 省略可

FieldInfoに関して、データ型の定数・値は次のとおりです。

定数 内容
xlGeneralFormat 1 一般形式(標準)
xlTextFormat 2 テキスト形式(文字列)
xlMDYFormat 3 MDY(月日年)形式の日付
xlDMYFormat 4 DMY(日月年)形式の日付
xlYMDFormat 5 YMD(年月日)形式の日付
xlMYDFormat 6 MYD(月年日)形式の日付
xlDYMFormat 7 DYM(日年月)形式の日付
xlYDMFormat 8 YDM(年日月)形式の日付
xlSkipColumn 9 指定した列を読み込まない
xlEMDFormat 10 EMD(台湾年月日)形式の日付

エラー対策はワークブックを開く場合と同様です。

それぞれの設定のイメージをし易いように、エクセルとの対比を作りました。

区切り方、読み込み開始位置、データ種類の設定
区切り文字の設定
FieldInfoの設定(固定長フィールド)
FieldInfoの設定(データ型)

ワークブックを閉じる

ワークブックを閉じるには、次のように書きます。

《ワークブックを閉じる》
 上書き保存して閉じる。: Workbook(ブック名).Close SaveChanges:=True
 保存せずに閉じる。  : Workbook(ブック名).Close SaveChanges:=False
 ※ブック名は、拡張子まで指定する。

また、現在選択している(アクティブ)なワークブックを閉じる場合は、次のように書きます。

《アクティブワークブックを閉じる》
 上書き保存して閉じる。: ActiveWorkbook.Close SaveChanges:=True
 保存せずに閉じる。  : ActiveWorkbook.Close SaveChanges:=False

コメント

タイトルとURLをコピーしました