- VBAで指定したブックがない時に新規作成するにはどうすればいいの?
- ファイルだけでなく任意のフォルダがあるかどうかも調べたい
- フルパスをファイル名とパス名に分割したい
そこで今回は、VBAで指定したブックがなければ作成する方法について紹介します。
任意のフォルダがあるかどうかの判定方法や、フルパスをファイル名とパス名に分割する方法も解説します。まずはコピペして使ってみてください。
ブックがあるか確認してなければ作成するサンプルコード
'対象ブックのフルパスを定義
Dim trgtFile As String
trgtFile = "C:\Sample\Sample.xlsx"
'「Sample.xlsx」(trgtFile)が存在するかどうか調べる
If Dir(trgtFile) = "" Then
'新規ブックを作成して、変数に定義
Dim newBook As Workbook
Set newBook = Workbooks.Add()
'新規作成したブックを対象ブックとして保存する
newBook.SaveAs trgtFile
End If
上記サンプルコードでは「Sample.xlsx」がなければ「Sample.xlsx」を作成、「Sample.xlsx」があれば何もしない処理を実行します。ブックがあるか確認してなければ作成するコード解説
'対象ブックのフルパスを定義
Dim trgtFile As String
trgtFile = "C:\Sample\Sample.xlsx"
まずはじめに、任意のブックのフルパスを変数「trgtFile」に定義します。'「Sample.xlsx」(trgtFile)が存在するかどうか調べる
If Dir(trgtFile) = "" Then
次に「If文」を使って、指定したブックのフルパス「trgtFile」が存在しているかどうかを判定します。この時使用しているのが「Dir」関数です。「Dir」関数は、フルパスで引数に指定したファイルが存在していればファイル名を返し、ファイルが存在しなければ「””」(空文字列)を返します。
この性質を利用して、「If Dir(trgtFile) = “” Then」とすることで、ファイルが存在しなかった場合のみ処理を実行させることができます。
Dir関数については、下記で詳しく解説しているので、読んでみてください。
'新規ブックを作成して、変数に定義
Dim newBook As Workbook
Set newBook = Workbooks.Add()
つづいて、ファイルがなかった場合にブックを作成する処理を実行しています。ここでは「Workbooks.Add()」を使って新規ブックを生成し、この後の処理で作成したブックを特定できるように、変数「newBook」に定義します。
'新規作成したブックを対象ブックとして保存する
newBook.SaveAs trgtFile
End If
最後に、生成したブック「newBook」を指定のフルパス「trgtFile」として保存します。以上で、ブックがあるか確認して、なければ作成する処理が実行できました。
Dir関数に指定できる引数について
「Dir」関数で使用できる引数を一覧で紹介します。引数 | 値 | 詳細 |
---|---|---|
vbNormal | 0 | 通常のファイル |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システムファイル(Macでは使用不可) |
vbVolume | 8 | ボリュームラベル(Macでは使用不可) |
vbDirectory | 16 | 通常のフォルダ |
vbAlias | 64 | エイリアスファイル(Macでは使用不可) |
Dir関数のその他の使い方
指定フォルダがなければ作成する
ファイルが存在するために使用した「Dir」関数ですが、引数を指定することによってフォルダがあるかどうかも確認することができます。フォルダを確認するには、「Dir」関数の第一引数にフルパスを指定し、第二引数に「vbDirectory」を指定します。これで指定フォルダがあればフォルダ名を返し、フォルダがなければ「””」(空文字列)を返すことができます。
これをファイル確認と同じように「If」文と組み合わせて「If Dir(trgtDir, vbDirectory) = “” Then」とすることで、指定フォルダがない場合のみ処理を実行することができます。
あとは「If」文の中でフォルダを作成する「MkDir」ステートメントを実行すれば、指定フォルダがなければ作成する処理が実行できます。
'対象フォルダのパスを定義
Dim trgtDir As String
trgtDir = "C:\Sample\sampleFolder"
'「Sample」(trgtDir)が存在するかどうか調べる
If Dir(trgtDir, vbDirectory) = "" Then
MkDir trgtDir
End If
フルパスをパス名とファイル名に分割する
「Dir」関数のファイル名を返す特性を利用して、フルパスをパス名とファイル名に分割することもできます。手順は次の通りです。
- 「Dir」関数でファイル名を取得
- 「Replace」関数で元のフルパスからファイル名を削除
Dim trgtFile As String
trgtFile = "C:\Sample\Sample.xlsx"
'ファイル名を取得
Dim trgtFileName As String
trgtFileName = Dir(trgtFile)
'パスを取得
Dim trgtFilePath As String
trgtFilePath = Replace(trgtFile, trgtFileName, "")
MsgBox "ファイル名:" & trgtFileName & vbCrLf & vbCrLf & "パス名 :" & trgtFilePath
Replace関数については、下記で詳しく解説しているので、読んでみてください。
ブックが存在しているか確認するまとめ
今回はVBAで「Dir」関数を使って指定したブックがなければ作成する方法と下記の応用について紹介しました。「Dir」関数の応用
「Dir」関数を使ってブックがない場合に作成する処理は実務ではよく使うので、まずはコピペで使ってみましょう。- 指定フォルダがなければ作成する
- フルパスをパス名とファイル名に分割する
また、紹介したように「Dir」関数の応用もあわせて使ってみてください。