ワークブックを開いたり閉じたりするファイル操作やワークシートの作成、コピー、削除など、ブックとシートの操作はExcelVBAで業務改善を行う上では特に欠かせないものとなります。
また、外部のファイルシステムオブジェクトを利用することによって、更に高度かつ多様なファイル操作が可能となります。
シート操作関連
新しいブックを開いてシートをコピーする
Sheets("シート名").Copy
指定したシート名の後ろにコピーする
Sheets("シート名").Copy After:=Sheets("シート名")
シート名を変更する
Sheets("シート名").Name = 新しいシート名
シートの最後に新しいシートを追加してコピーする
Sheets("シート名").Copy After:=Sheets(Sheets.Count)
最後のシート(追加されたシート)の名前を変更する
Sheets(Sheets.Count).Name = 新しいシート名
最後のシートを削除する
Sheets(Sheets.Count).Delete
ブック操作関連
ブックを保存する
ActiveWorkbook.SaveAs "フォルダのフルパス\ファイル名.xlsx"
シート名でブックを保存する
ActiveWorkbook.SaveAs "フォルダパス\" & ActiveSheet.Name & ".xlsx"
ファイル名に日付を追加する場合は「Format(Date,”yyyymmdd”)」を追加する。
ブックを閉じる
ActiveWorkbook.Close
ブックを開く
Workbooks.Open("ファイルパス")
ファイル選択ウィンドウを表示する
変数名 = Application.GetOpenFilename
選択したファイルパスを文字列として変数に格納する。
※キャンセルした場合は「False」が入るため、変数はVariant型を指定する。
ファイルを複数選択する
変数名 = Application.GetOpenFilename MultiSelect:=True
この場合、配列として変数に格納される。
配列を取り出す
For Each 変数 In 配列変数 ~ 処理 ~ Next
配列かどうかを判定する
If IsArray(変数) Then ~ 処理 ~ EndIf
要素が1つでも配列とみなされる。 ※Falseは除外される
CSVファイルを読み込む
Open ファイルパス For Input As #1
Do Until EOF(1)
Line Input #1,buf
str = Split(buf,",")
Loop
Close #1
処理内容
(1) CSVファイルから1レコードを取り出し文字列データとしてbufに格納する
(2) bufの文字列データをカンマで分割し配列データとしてstrに格納する
(3) 全てのデータがなくなるまで繰り返す
ファイルシステムオブジェクトを利用したファイル操作
外部オブジェクトライブラリからファイルシステムオブジェクトの参照設定を行うことで、より高度かつ多様なファイル操作が可能となります。
また、参照設定を行わずに直接外部オブジェクトのインスタンスを作成して利用することもできます。
参照設定を使う場合
Dim fso As New FileSystemObject
参照設定から「Microsoft Scripting Runtime」にチェックする。
VBEの自動補完機能が利用できるため、コードの記述ミスを大幅に防ぐことができる。
但し、ブックごとに参照設定が必要となるため、複数のブックで実行するアドインには向かない。
参照設定を使わない場合
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
参照設定を行わずに直接ファイルシステムオブジェクトのインスタンスを作成する。
VBEの自動補完機能は利用できない。
アドインとして配布しExcelアプリに組み込む場合は、この方法で外部オブジェクトを利用する。
よく利用するメソッド
ファイルをコピーする
CopyFile コピー元のファイルパス, コピー先のファイルパス, [ 上書きの可否 ]
上書きの可否はTrue or false 省略時はTrue
ファイルシステムオブジェクトを利用すると、コピー元のファイルが開かれていてもエラーにならない。(ファイルが開かれていることの確認やエラー処理が不要になる)
ファイルを削除する
DeleteFile ファイル名, [ 強制オプション ]
強制オプションは読み取り専用の場合でも削除する場合はTrue、削除しない場合はfalse
省略時ばfalseとなる。
ファイルの存在確認をする
FileExists(file)
指定したファイルが存在する場合はTrue、存在しない場合はfalseとなる。
ファイルシステムオブジェクトのインスタンス解放
Set FSO = Nothing
メモリを開放する。
最後に
次回はワークシート関数やクラスモジュール、自作関数、エラー処理についての備忘録となります。
コメント