ファイルを開く操作に関して、以下の内容について紹介します。
【今回の内容】
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 | ファイルに含まれるデータの形式を指定。 定数: xlDelimited・xlFixedWidth。 区切り文字として、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(台湾年月日)形式の日付 |
エラー対策はワークブックを開く場合と同様です。
それぞれの設定のイメージをし易いように、エクセルとの対比を作りました。
ワークブックを閉じる
ワークブックを閉じるには、次のように書きます。
《ワークブックを閉じる》
上書き保存して閉じる。: Workbook(ブック名).Close SaveChanges:=True
保存せずに閉じる。 : Workbook(ブック名).Close SaveChanges:=False
※ブック名は、拡張子まで指定する。
また、現在選択している(アクティブ)なワークブックを閉じる場合は、次のように書きます。
《アクティブワークブックを閉じる》
上書き保存して閉じる。: ActiveWorkbook.Close SaveChanges:=True
保存せずに閉じる。 : ActiveWorkbook.Close SaveChanges:=False
コメント