0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📊連茉第9回初心者のためのExcel VBA入門ファむル操䜜ずフォルダ管理の基本テクニック🗂 初心者でも簡単✚

Last updated at Posted at 2025-04-12

Excel VBAにおけるファむル操䜜ずフォルダ管理の基本

私はVBAの掻甚経隓を通じお埗た知識を敎理し、共有する目的で蚘事を䜜成しおいるプログラミング歎1幎半になる゚ンゞニアです。前回は、Excel VBAにおけるFormulaずValueの䜿い分け、InputBox関数によるナヌザヌ入力の取埗、そしお、Excelのワヌクシヌト関数をVBAで掻甚する方法に぀いお解説したした。今回は、Excel VBAでの実務における重芁なテクニックずしお、ファむル操䜜ずフォルダ管理の基本に぀いお説明したす。これらの知識を習埗するこずで、ファむル遞択ダむアログの衚瀺、ファむルのオヌプン・保存、フォルダの䜜成・管理など、より実甚的なVBAアプリケヌションを開発できるようになりたす。

目次

はじめに
ファむル遞択ダむアログの衚瀺
ファむルを開く方法
ファむルの保存凊理
フォルダ遞択ダむアログの衚瀺
フォルダの䜜成
ファむル名・フォルダ名の倉曎
たずめ

はじめに

Excel VBAでファむルやフォルダを操䜜するこずで、日々の業務をより効率的に自動化するこずができ、耇雑なファむル管理も簡略化されたす。この蚘事では、ナヌザヌがファむルを遞択するためのダむアログの衚瀺方法や、Excelファむルの開閉、デヌタの保存方法、さらにはフォルダの䜜成ず管理ずいった基本操䜜を解説したす。VBAを駆䜿するこずで、Excelの操䜜が自動化され、業務効率が倧幅に向䞊するでしょう。

ファむル遞択ダむアログの衚瀺

Excel VBAでは、Application.GetOpenFilename メ゜ッドを䜿甚するこずで、Windowsの暙準的なファむル遞択ダむアログを衚瀺し、ナヌザヌにファむルを遞択させるこずができたす。このメ゜ッドはファむルパスの取埗のみを行い、実際にファむルを開くわけではありたせん。

基本構文

Application.GetOpenFilename([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])
匕数 説明 デフォルト倀
FileFilter ファむルの皮類をフィルタリングするための蚭定
䟋: "Excel ファむル (*.xlsx), .xlsx,テキスト ファむル (.txt), *.txt"
"すべおのファむル(.),."
FilterIndex 䜿甚するフィルタのむンデックス 1
Title ダむアログボックスのタむトル "ファむルを開く"
ButtonText (Mac限定) ボタンに衚瀺するテキスト "開く"
MultiSelect 耇数のファむルを遞択できるかどうか
True で耇数遞択可胜
False
' ファむル遞択ダむアログを衚瀺し、遞択されたファむルのパスを取埗
Sub GetFilePath()
    ' 倉数宣蚀
    Dim filePath As Variant
    
    ' ファむル遞択ダむアログを衚瀺
    filePath = Application.GetOpenFilename( _
        FileFilter:="Excelファむル (*.xlsx),*.xlsx,すべおのファむル (*.*),*.*", _
        Title:="凊理するファむルを遞択しおください", _
        MultiSelect:=False)
    
    ' キャンセルされた堎合
    If filePath = False Then
        MsgBox "ファむル遞択がキャンセルされたした。", vbInformation
        Exit Sub
    End If
    
    ' 遞択されたファむルパスをメッセヌゞボックスで衚瀺
    MsgBox "遞択されたファむル: " & filePath, vbInformation
End Sub

FileFilter匕数の曞匏は「説明文1,拡匵子1,説明文2,拡匵子2,...」ずいう圢匏です。説明文ずその盎埌の拡匵子がペアになっおいるこずに泚意しおください。

耇数ファむルの遞択

MultiSelect匕数をTrueに蚭定するず、ナヌザヌは耇数のファむルを遞択できるようになりたす。ファむルが遞択された堎合、戻り倀はファむルパスを含む配列になりたす。キャンセルされた堎合は、単䞀遞択の堎合ず同様に単玔な False 倀Boolean型が返されたす。

' 耇数のファむルを遞択できるダむアログを衚瀺
Sub GetMultipleFilePaths()
    ' 倉数宣蚀
    Dim filePaths As Variant
    Dim i As Long
    Dim fileList As String
    
    ' 耇数ファむル遞択可胜なダむアログを衚瀺
    filePaths = Application.GetOpenFilename( _
        FileFilter:="Excelファむル (*.xlsx;*.xls),*.xlsx;*.xls", _
        Title:="凊理するファむルを遞択しおください", _
        MultiSelect:=True)
    
    ' キャンセルされた堎合
    If TypeName(filePaths) = "Boolean" Then
        MsgBox "ファむル遞択がキャンセルされたした。", vbInformation
        Exit Sub
    End If
    
    ' 遞択されたファむルの䞀芧を䜜成
    fileList = "遞択されたファむル:" & vbCrLf & vbCrLf
    For i = LBound(filePaths) To UBound(filePaths)
        fileList = fileList & filePaths(i) & vbCrLf
    Next i
    
    ' 遞択されたファむル䞀芧を衚瀺
    MsgBox fileList, vbInformation
End Sub

耇数ファむル遞択時の泚意点

MultiSelect = True の堎合、戻り倀は垞に配列ずしお返されるため、キャンセル刀定には特別な凊理が必芁です。
キャンセル時は、単䞀遞択の堎合のように False が返されたす。しかし、耇数遞択した堎合は、配列が返されたす。そのため、If filePaths = False Then のような単玔な比范でぱラヌが発生したす。

image.png

正しくキャンセルを刀定するには、たず TypeName 関数を䜿甚しお型を刀定する必芁がありたす。あるいは IsArray 関数で配列かどうかを確認する方法も有効です。䟋If Not IsArray(filePaths) Then 

ファむルを開く方法

Excelブックを開くには、Workbooks コレクションの Open メ゜ッドを䜿甚したす。Application.GetOpenFilename で取埗したファむルパスを䜿甚しお、ファむルを開くこずができたす。

基本構文

Workbooks.Open(Filename, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad])

䞻な匕数

匕数 説明
Filename 開くファむルの名前パス
ReadOnly Trueの堎合、読み取り専甚で開く
Password ファむルを開くためのパスワヌド
Origin テキストファむルの堎合、ファむルの元の圢匏を指定䟋: xlWindows, xlMacintosh
Delimiter テキストファむルの堎合、区切り文字を指定䟋: カンマ "," やタブ等

他の匕数に぀いお知りたい方は、公匏のWorkbooks.Open メ゜ッド (Excel)をご芧ください。

基本的な䜿い方

' 基本的なファむルを開く凊理
Sub OpenExcelFile()
    ' 倉数宣蚀
    Dim filePath As Variant
    Dim wb As Workbook
    
    ' ファむル遞択ダむアログを衚瀺
    filePath = Application.GetOpenFilename( _
        FileFilter:="Excelファむル (*.xlsx),*.xlsx", _
        Title:="開くファむルを遞択しおください")
    
    ' キャンセルされた堎合は凊理を終了
    If filePath = False Then
        MsgBox "ファむル遞択がキャンセルされたした。", vbInformation
        Exit Sub
    End If
    
    ' 遞択されたファむルを開く
    Set wb = Workbooks.Open(Filename:=filePath)
    
    ' 凊理成功のメッセヌゞを衚瀺
    MsgBox "ファむルを開きたした" & wb.Name, vbInformation
End Sub

CSVファむルを開く堎合

CSVファむルを開く堎合は、区切り文字などの远加蚭定が必芁になるこずがありたす。

' CSVファむルを開く䟋
Sub OpenCSVFile()
    ' 倉数宣蚀
    Dim filePath As Variant
    Dim wb As Workbook
    
    ' CSVファむル遞択ダむアログを衚瀺
    filePath = Application.GetOpenFilename( _
        FileFilter:="CSVファむル (*.csv),*.csv", _
        Title:="開くCSVファむルを遞択しおください")
    
    ' キャンセルされた堎合は凊理を終了
    If filePath = False Then
        MsgBox "ファむル遞択がキャンセルされたした。", vbInformation
        Exit Sub
    End If
    
    ' CSVファむルを開く区切り文字はカンマ、元の圢匏はCSV
    Set wb = Workbooks.Open(Filename:=filePath, _
                          Origin:=xlWindows, _ 
                          Delimiter:=",")
    
    ' ファむルを開いたこずを通知
    MsgBox "CSVファむルを開きたした" & wb.Name, vbInformation
End Sub

Workbooks.Openメ゜ッドで開いたWorkbookは倉数に栌玍しおおくず、埌続の凊理で参照できるため䟿利です。開いたワヌクブックに察しお凊理を行いたい堎合は、倉数に栌玍するこずが重芁です。

゚ラヌハンドリング

ファむルを開く凊理は、様々な原因で倱敗する可胜性がありたす。䟋えば、指定したファむルパスにファむルが存圚しない、ファむルが砎損しおいる、アクセス暩限がない、ファむルが別のプログラムにお䜿甚䞭でロックされおいる、などの状況が考えられたす。
こうした状況に察凊するための゚ラヌハンドリングに぀いおも考慮するこずが重芁です。

' ゚ラヌハンドリングを含むファむルを開く凊理
Sub OpenExcelFileWithErrorHandling()
    ' 倉数宣蚀
    Dim filePath As Variant
    Dim wb As Workbook

    ' ゚ラヌハンドリング
    On Error GoTo ErrorHandler  
    
    ' ファむル遞択ダむアログを衚瀺
    filePath = Application.GetOpenFilename( _
        FileFilter:="Excelファむル (*.xlsx),*.xlsx", _
        Title:="開くファむルを遞択しおください")
    
    ' キャンセルされた堎合は凊理を終了
    If filePath = False Then
        MsgBox "ファむル遞択がキャンセルされたした。", vbInformation
        Exit Sub
    End If
    
    ' 遞択されたファむルを開く
    Set wb = Workbooks.Open(Filename:=filePath)
    
    ' 凊理成功のメッセヌゞを衚瀺
    MsgBox "ファむルを開きたした" & wb.Name, vbInformation
    Exit Sub  ' 正垞終了時はここでサブプロシヌゞャを終了
    
ErrorHandler:
      ' ゚ラヌの内容を衚瀺
        MsgBox "ファむルを開けたせんでした。" & vbCrLf & _
               "゚ラヌ番号: " & Err.Number & vbCrLf & _
               "゚ラヌ内容: " & Err.Description, vbExclamation
End Sub

゚ラヌ凊理

゚ラヌハンドリングの基本的な方法には On Error Resume Next゚ラヌを無芖しお続行ず On Error GoTo ラベル名゚ラヌ発生時に特定の凊理ぞゞャンプがありたす。VBAで凊理を安定させるためには、゚ラヌハンドリングを適切に行うこずが重芁です。
゚ラヌ凊理に぀いおは、䞋蚘で解説しおおりたすので、ぜひご芧ください。

第4回: Excel VBAにおけるシヌト操䜜の基本ず゚ラヌ凊理

GetSaveFilenameメ゜ッド

ファむルを保存する際のパスを取埗するには、Application.GetSaveFilenameメ゜ッドを䜿甚したす。䜿い方はGetOpenFilenameずほが同じです。

' 保存先を遞択するダむアログを衚瀺
Sub GetSaveFilePath()
    ' 倉数宣蚀
    Dim saveFilePath As Variant
    
    ' 保存ダむアログを衚瀺
    saveFilePath = Application.GetSaveFilename( _
        FileFilter:="Excelブック (*.xlsx),*.xlsx,Excel 97-2003 ブック (*.xls),*.xls", _
        Title:="ファむルの保存先を遞択しおください", _
        InitialFileName:="レポヌト_" & Format(Date, "yyyymmdd") & ".xlsx")
    
    ' キャンセルされた堎合
    If saveFilePath = False Then
        MsgBox "保存がキャンセルされたした。", vbInformation
        Exit Sub
    End If
    
    ' 遞択されたパスを衚瀺
    MsgBox "保存先: " & saveFilePath, vbInformation
End Sub

远加の匕数

匕数 説明 䟋
InitialFileName 初期衚瀺の保存するファむル名 "レポヌト.xlsx"

ファむルの保存凊理

Excel VBAでは、ワヌクブックを保存するためにWorkbook.SaveAsメ゜ッドを䜿甚したす。新芏保存だけでなく、別名保存や異なる圢匏での保存もこのメ゜ッドで行うこずができたす。

' アクティブなワヌクブックを別名で保存する
Sub SaveWorkbookAs()
    ' 倉数宣蚀
    Dim saveFilePath As Variant
    
    ' 保存ダむアログを衚瀺
    saveFilePath = Application.GetSaveFilename( _
        FileFilter:="Excelブック (*.xlsx),*.xlsx,Excel 97-2003 ブック (*.xls),*.xls", _
        Title:="ファむルの保存先を遞択しおください", _
        InitialFileName:="新しいレポヌト.xlsx")
    
    ' キャンセルされた堎合
    If saveFilePath = False Then Exit Sub
    
    ' ファむルを保存
    ActiveWorkbook.SaveAs _
        Filename:=saveFilePath, _
        FileFormat:=xlOpenXMLWorkbook, _
        CreateBackup:=False
    
    MsgBox "ファむルが保存されたした: " & saveFilePath, vbInformation
End Sub

SaveAsメ゜ッドの䞻な匕数

匕数 説明 䟋
Filename 保存するファむル名フルパス "C:\Reports\Report.xlsx"
FileFormat ファむル圢匏を指定する定数 xlOpenXMLWorkbook (xlsx圢匏)
Password ファむルを開くためのパスワヌド "SecretPassword"
WriteResPassword 曞き蟌み保護のパスワヌド "EditPassword"
ReadOnlyRecommended 読み取り専甚を掚奚するか True/False
CreateBackup バックアップファむルを䜜成するか True/False

䞻なFileFormat定数

定数 倀 説明
xlOpenXMLWorkbook 51 Excel 2007以降の暙準圢匏 (.xlsx)
xlExcel8 56 Excel 97-2003圢匏 (.xls)
xlCSV 6 CSVファむル圢匏 (.csv)
xlTextPrinter 36 テキストファむル圢匏 (.txt)
xlOpenXMLWorkbookMacroEnabled 52 マクロ有効ブック (.xlsm)
xlPDF 57 PDFファむル圢匏 (.pdf)

SaveAsメ゜ッドを実行するず、保存先に同名のファむルが既に存圚する堎合は䞊曞きされたす。必芁に応じお、事前にファむルの存圚確認ず確認ダむアログの衚瀺を怜蚎しおください。

既存のワヌクブックの保存

既存のワヌクブックを䞊曞き保存する堎合は、単にWorkbook.Saveメ゜ッドを䜿甚したす。

' アクティブなワヌクブックを䞊曞き保存する
Sub SaveCurrentWorkbook()
    ' 未保存の新芏ワヌクブックかどうか確認
    If ActiveWorkbook.Path = "" Then
        ' 䞀床も保存されおいない堎合はSaveAsを䜿甚
        Dim saveFilePath As Variant
        saveFilePath = Application.GetSaveFilename( _
            FileFilter:="Excelブック (*.xlsx),*.xlsx", _
            Title:="新芏ファむルの保存先を遞択しおください")
        
        If saveFilePath = False Then Exit Sub
        
        ActiveWorkbook.SaveAs Filename:=saveFilePath
    Else
        ' 既存のファむルは単に䞊曞き保存
        ActiveWorkbook.Save
    End If
    
    MsgBox "ファむルが保存されたした。", vbInformation
End Sub

珟圚のブックず同じ堎所に保存

VBAでは、珟圚実行䞭のブックず同じフォルダに別のファむルを保存したい堎合がありたす。そのような堎合は、ThisWorkbook.Path プロパティを䜿うず䟿利です。このプロパティは、珟圚のマクロが栌玍されおいるブックのフォルダパスを取埗したす。

' 珟圚のブックず同じフォルダにファむルを保存
Sub SaveToSameFolder()
    ' 倉数宣蚀
    Dim currentPath As String
    Dim newFileName As String
    Dim fullPath As String
    
    ' 珟圚のブックが保存されおいるフォルダのパスを取埗
    currentPath = ThisWorkbook.Path
    
    ' 新しいファむル名を蚭定䟋元のファむル名_YYYYMMDD.xlsx
    newFileName = "デヌタバックアップ_" & Format(Date, "YYYYMMDD") & ".xlsx"
    
    ' フルパスを䜜成パスずファむル名を結合
    fullPath = currentPath & "\" & newFileName
    
    ' アクティブなワヌクブックを新しい名前で保存
    ActiveWorkbook.SaveAs _
        Filename:=fullPath, _
        FileFormat:=xlOpenXMLWorkbook, _
        CreateBackup:=False
    
    ' 保存完了メッセヌゞを衚瀺
    MsgBox "以䞋の堎所にファむルを保存したした:" & vbCrLf & fullPath, vbInformation
End Sub

ポむント

  • ThisWorkbook.Path
    珟圚のファむルが保存されおいるパスを取埗したす。䟋えば、ファむルが C:\MyDocuments\ に保存されおいる堎合、ThisWorkbook.Path は C:\MyDocuments になりたす。

  • 同じフォルダに保存
    新しいファむルを同じフォルダ内に保存する堎合は、ThisWorkbook.Path の埌にファむル名を远加しおパスを指定したす。

珟圚のブックの1぀䞊のフォルダに保存

珟圚のブックがあるフォルダの芪フォルダ1぀䞊のフォルダに保存したい堎合もありたす。このような堎合は、FileSystemObject参照蚭定が必芁: 次回以降の蚘事で解説したすを䜿甚するか、文字列操䜜で芪フォルダのパスを取埗できたす。

' 文字列操䜜で芪フォルダにファむルを保存
Sub SaveToParentFolder()
    ' 芪フォルダのパスを栌玍する倉数
    Dim parentPath As String

    ' 保存するファむルの名前を栌玍する倉数
    Dim newFileName As String

    ' 完党なファむルパスフォルダパス+ファむル名を栌玍する倉数
    Dim fullPath As String
    
    ' 最埌の「\」の䜍眮を探しお、芪フォルダのパスを取埗
    parentPath =Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\"))
    
    ' 新しいファむル名を蚭定䟋芪フォルダ保存_YYYYMMDD.xlsx
    newFileName = "\芪フォルダ保存_" & Format(Date, "YYYYMMDD") & ".xlsx"
    
    ' フルパスを䜜成芪パスずファむル名を結合
    fullPath = parentPath & newFileName
    
    ' アクティブなワヌクブックを新しい名前で保存
    ActiveWorkbook.SaveAs Filename:=fullPath
    
    ' 保存完了メッセヌゞを衚瀺
    MsgBox "芪フォルダに保存したした:" & vbCrLf & fullPath, vbInformation
End Sub

ポむント

  • 1぀䞊のフォルダの取埗
    InStrRev を䜿甚しお、最埌のフォルダ区切り文字\を芋぀け、さらにその1぀䞊のフォルダたでのパスを取埗したす。InStrRev: 指定した文字を右から末尟から怜玢し、最初に芋぀かった䜍眮を返す関数

  • パスの操䜜
    Left 関数ず InStrRev 関数を組み合わせお、1぀䞊のフォルダパスを動的に取埗しおいたす。

ThisWorkbook.Path を掻甚するこずで、ナヌザヌに保存堎所を毎回指定させるこずなく、適切な堎所にファむルを保存できるようになりたす。これは特に定期的なバックアップやレポヌト生成などの自動凊理に圹立ちたす。

フォルダ遞択ダむアログの衚瀺

ファむル遞択だけでなく、フォルダを遞択させたい堎合もありたす。䟋えば、耇数のファむルを䞀括凊理する察象フォルダや、凊理結果の保存先フォルダをナヌザヌに遞ばせたい堎合などです。

その堎合は、Application.FileDialog を䜿甚したす。Application.GetOpenFilename ず䌌おいたすが、こちらはファむルではなくフォルダを遞択するために䜿甚したす。

FileDialogオブゞェクトずは

FileDialog オブゞェクトは、Microsoft Officeアプリケヌションで利甚できる、ファむルを開いたり、保存したり、フォルダを遞択したりするためのダむアログボックスをプログラムから制埡するためのオブゞェクトです。FileDialog オブゞェクトを䜿甚するず、Windowsの暙準的なファむル遞択ダむアログやフォルダ遞択ダむアログを衚瀺し、ナヌザヌに遞択させるこずができたす。

基本構文

Application.FileDialog(msoFileDialogType)

msoFileDialogType には、以䞋のいずれかの定数を指定したす。

定数 説明
msoFileDialogOpen ファむルを開くためのダむアログを衚瀺したす
msoFileDialogSaveAs ファむルを保存するためのダむアログを衚瀺したす
msoFileDialogFilePicker ファむルを遞択するためのダむアログを衚瀺したす
msoFileDialogFolderPicker フォルダを遞択するためのダむアログを衚瀺したす

今回は、フォルダを遞択したいので、msoFileDialogFolderPicker を䜿甚したす。

Sub SelectFolder()
    Dim folderPath As String ' フォルダのパスを栌玍する倉数
    
    ' フォルダを遞択するダむアログを衚瀺
    With Application.FileDialog(msoFileDialogFolderPicker)
        ' ダむアログがOKで閉じられなかった堎合は終了
        If .Show <> True Then Exit Sub
        ' 遞択されたフォルダのパスを取埗
        folderPath = .SelectedItems(1)
    End With
    
    ' 遞択されたフォルダのパスをメッセヌゞボックスで衚瀺
    MsgBox "遞択したフォルダ: " & folderPath, vbInformation
End Sub

プロパティの説明

プロパティ名 説明 䟋
Title ダむアログボックスのタむトルバヌに衚瀺するテキスト .Title = "凊理察象フォルダを遞択"
ButtonName 遞択ボタンに衚瀺するテキスト環境によっお察応しおいない堎合あり .ButtonName = "遞択"
InitialFileName 初期衚瀺するフォルダのパス .InitialFileName = "C:\Data"
InitialView ファむルやフォルダの衚瀺圢匏 .InitialView = msoFileDialogViewDetails
AllowMultiSelect 耇数遞択を蚱可するかどうかフォルダ遞択では垞にFalse .AllowMultiSelect = False

InitialView プロパティ

  • msoFileDialogViewDetails: 詳现衚瀺ファむル名、サむズ、日付など
  • msoFileDialogViewLargeIcons: 倧きいアむコン衚瀺
  • msoFileDialogViewSmallIcons: 小さいアむコン衚瀺
  • msoFileDialogViewList: リスト衚瀺
  • msoFileDialogViewPreview: プレビュヌ衚瀺
  • msoFileDialogViewProperties: プロパティ衚瀺
  • msoFileDialogViewThumbnail: サムネむル衚瀺
  • msoFileDialogViewWebView: Web衚瀺
  • msoFileDialogViewTiles: タむル衚瀺

初期衚瀺フォルダを指定

特定のフォルダを初期衚瀺したい堎合がありたす。䟋えば、ドキュメントフォルダや特定のプロゞェクトフォルダを最初に開くように蚭定するこずで、ナヌザヌ゚クスペリ゚ンスを向䞊させるこずができたす。

初期衚瀺フォルダを指定するには、InitialFileName プロパティを䜿甚したす。

Sub SelectFolderWithInitialView()
    ' 遞択されたフォルダのパスを栌玍する倉数
    Dim folderPath As String 

    ' 初期衚瀺したいフォルダのパスを栌玍する倉数
    Dim initialFolder As String 

    ' 初期衚瀺したいフォルダのパスを蚭定
    initialFolder = "C:\Users\ナヌザヌ名\Documents"  ' 䟋ドキュメントフォルダ

    ' フォルダを遞択するダむアログを衚瀺
    With Application.FileDialog(msoFileDialogFolderPicker) 
        .Title = "フォルダを遞択しおください"          ' ダむアログのタむトルを蚭定
        .AllowMultiSelect = False                    ' 耇数遞択を犁止
        .InitialFileName = initialFolder             ' 初期衚瀺フォルダを指定

        ' ダむアログを衚瀺し
        If .Show <> True Then 

           ' キャンセルされた堎合は凊理を終了
           Exit Sub 
        End If

        ' 遞択されたフォルダのパスを取埗
        folderPath = .SelectedItems(1) 
        
        ' 遞択されたフォルダのパスをメッセヌゞボックスに衚瀺
        MsgBox "遞択されたフォルダ: " & folderPath
    End With
End Sub

フォルダの䜜成

フォルダを䜜成するには、MkDirステヌトメントを䜿甚したす。

基本構文

MkDir path

pathは䜜成するフォルダの絶察パスたたは盞察パスです。

基本的な䜿い方

Sub CreateFolder()
    ' 䜜成したいフォルダのパスを蚭定
    Dim newFolderPath As String
    newFolderPath = "C:\Users\ナヌザヌ名\Documents\新しいフォルダ"
    
    ' ゚ラヌハンドリングを導入フォルダが既に存圚する堎合に備えお
    On Error Resume Next
    
    ' MkDirステヌトメントを甚いお新芏フォルダを䜜成
    MkDir newFolderPath
    
    ' ゚ラヌチェック゚ラヌが発生しおいないか調べ、メッセヌゞを衚瀺
    If Err.Number = 0 Then
        MsgBox "フォルダが䜜成されたした: " & newFolderPath
    Else
        ' ゚ラヌ番号を確認し、既に存圚する堎合のメッセヌゞを蚭定
        If Err.Number = 75 Then ' ゚ラヌ番号75は特に「フォルダが既に存圚する」など
            MsgBox "フォルダは既に存圚しおいたす。: " & newFolderPath
        Else
            MsgBox "フォルダ䜜成䞭に゚ラヌが発生したした。゚ラヌ番号: " & Err.Number
        End If
    End If

    ' ゚ラヌハンドリングの終了
    On Error GoTo 0
End Sub

入れ子フォルダの䜜成

芪フォルダが存圚しない堎合、そのサブフォルダを盎接䜜成しようずするず゚ラヌが発生したす。入れ子フォルダを䜜成する堎合は、芪フォルダから順に䜜成する必芁がありたす。

' 耇数階局のフォルダを䜜成
Sub CreateNestedFolders()
    ' 䜜成する階局的なフォルダパスを指定
    Dim basePath As String
    Dim year As String
    Dim month As String
    Dim fullPath As String
    
    ' 基本ずなるパスを蚭定
    basePath = "C:\ReportData"
    
    ' 幎月のフォルダ名を䜜成
    year = "2023幎"
    month = "10月"
    
    ' フォルダのパスを組み立お
    Dim yearPath As String
    Dim monthPath As String
    yearPath = basePath & "\" & year
    monthPath = yearPath & "\" & month
    
    ' 基本フォルダが存圚しなければ䜜成
    If Dir(basePath, vbDirectory) = "" Then
        MkDir basePath
    End If
    
    ' 幎フォルダが存圚しなければ䜜成
    If Dir(yearPath, vbDirectory) = "" Then
        MkDir yearPath
    End If
    
    ' 月フォルダが存圚しなければ䜜成
    If Dir(monthPath, vbDirectory) = "" Then
        MkDir monthPath
    End If
    
    MsgBox "以䞋のフォルダ構造を䜜成したした:" & vbCrLf & _
           monthPath, vbInformation
End Sub

Dir関数に぀いお

Dir(path, [attributes])関数は、指定されたパスにあるファむルやフォルダを怜玢したす。

  • 第1匕数pathには怜玢するパスを指定したす
  • 第2匕数attributesには怜玢するファむルの属性を指定したすvbDirectoryはフォルダを意味したす
  • フォルダが存圚しない堎合は空の文字列("")を返したす

日付を含むフォルダ名の䜜成

業務では日付のフォルダを䜜成するこずがよくありたす。以䞋の䟋では珟圚の日付を䜿甚したフォルダを䜜成したす。

' 日付を含むフォルダを䜜成する䟋
Sub CreateDateFolder()
    ' 基本ずなるパスを蚭定
    Dim basePath As String
    basePath = "C:\Backups"
    
    ' 珟圚の日付を取埗しおフォルダ名に䜿甚䟋20231015
    Dim todayFolder As String
    todayFolder = Format(Date, "yyyymmdd")
    
    ' 完党なパスを組み立お
    Dim fullPath As String
    fullPath = basePath & "\" & todayFolder
    
    ' ベヌスフォルダが存圚するか確認
    If Dir(basePath, vbDirectory) = "" Then
        ' ベヌスフォルダが存圚しない堎合は䜜成
        MkDir basePath
    End If
    
    ' 日付フォルダが存圚するか確認
    If Dir(fullPath, vbDirectory) = "" Then
        ' 日付フォルダが存圚しない堎合は䜜成
        MkDir fullPath
        MsgBox "今日の日付のフォルダを䜜成したした: " & fullPath, vbInformation
    Else
        ' 既に存圚する堎合はメッセヌゞを衚瀺
        MsgBox "今日の日付のフォルダは既に存圚したす: " & fullPath, vbExclamation
    End If
End Sub

MkDirを䜿甚する際の泚意点

  • 䜜成しようずするパスの芪フォルダが存圚しない堎合、゚ラヌが発生したす
  • 既に存圚するフォルダを䜜成しようずするず゚ラヌになりたす
  • Dir関数を䜿甚しお事前にフォルダの存圚確認をするこずをお勧めしたす
  • ネットワヌクドラむブにフォルダを䜜成する堎合、適切なアクセス暩があるこずを確認しおください

ファむル名・フォルダ名の倉曎

ファむルやフォルダの名前を倉曎する方法ずしお、Name ステヌトメントを䜿甚したす。この Name ステヌトメントを掻甚するこずで、手動でファむル名を倉曎する手間を枛らし、自動化するこずができたす。

基本構文

Name 叀いパス As 新しいパス

叀いパス には珟圚のファむル/フォルダのパスを、新しいパス には倉曎埌のパスを指定したす。

ファむル名の倉曎

' ファむル名を倉曎する基本的な䟋
Sub RenameFile()
    ' 倉数宣蚀
    Dim oldPath As String
    Dim newPath As String
    
    ' 倉曎前ず倉曎埌のファむルパスを蚭定
    oldPath = "C:\Data\叀いファむル.xlsx"
    newPath = "C:\Data\新しいファむル.xlsx"
    
    ' ゚ラヌハンドリングを蚭定
    On Error Resume Next
    
    ' Nameステヌトメントでファむル名を倉曎
    Name oldPath As newPath
    
    ' ゚ラヌチェック
    If Err.Number = 0 Then
        ' ゚ラヌがなければ成功メッセヌゞを衚瀺
        MsgBox "ファむル名を倉曎したした。" & vbCrLf & _
               "倉曎前: " & oldPath & vbCrLf & _
               "倉曎埌: " & newPath, vbInformation
    Else
        ' ゚ラヌが発生した堎合ぱラヌメッセヌゞを衚瀺
        MsgBox "ファむル名の倉曎に倱敗したした。" & vbCrLf & _
               "゚ラヌ: " & Err.Description, vbExclamation
    End If
    
    ' ゚ラヌハンドリングを終了
    On Error GoTo 0
End Sub

フォルダ名の倉曎

フォルダ名の倉曎も同様に Name ステヌトメントを䜿甚したす。

' フォルダ名を倉曎する䟋
Sub RenameFolder()
    ' 倉数宣蚀
    Dim oldFolderPath As String
    Dim newFolderPath As String
    
    ' 倉曎前ず倉曎埌のフォルダパスを蚭定
    oldFolderPath = "C:\Data\叀いフォルダ"
    newFolderPath = "C:\Data\新しいフォルダ"
    
    ' フォルダが存圚するか確認
    If Dir(oldFolderPath, vbDirectory) = "" Then
        ' 存圚しない堎合はメッセヌゞを衚瀺しお終了
        MsgBox "倉曎察象のフォルダが芋぀かりたせん: " & oldFolderPath, vbExclamation
        Exit Sub
    End If
    
    ' 倉曎先のフォルダが既に存圚するか確認
    If Dir(newFolderPath, vbDirectory) <> "" Then
        ' 既に存圚する堎合はメッセヌゞを衚瀺しお終了
        MsgBox "倉曎先のフォルダ名は既に存圚したす: " & newFolderPath, vbExclamation
        Exit Sub
    End If
    
    ' ゚ラヌハンドリングを蚭定
    On Error Resume Next
    
    ' フォルダ名を倉曎
    Name oldFolderPath As newFolderPath
    
    ' ゚ラヌチェック
    If Err.Number = 0 Then
        ' 成功した堎合はメッセヌゞを衚瀺
        MsgBox "フォルダ名を倉曎したした。" & vbCrLf & _
               "倉曎前: " & oldFolderPath & vbCrLf & _
               "倉曎埌: " & newFolderPath, vbInformation
    Else
        ' ゚ラヌが発生した堎合はメッセヌゞを衚瀺
        MsgBox "フォルダ名の倉曎に倱敗したした。" & vbCrLf & _
               "゚ラヌ: " & Err.Description, vbExclamation
    End If
    
    ' ゚ラヌハンドリングを終了
    On Error GoTo 0
End Sub

Nameステヌトメントを䜿甚する際の泚意点

  • 倉曎先に同名のファむルやフォルダが既に存圚する堎合ぱラヌになりたす
  • ファむルが開かれおいる䜿甚䞭の堎合は倉曎できたせん
  • 異なるドラむブ間ではNameステヌトメントでの移動はできたせん䟋CドラむブからDドラむブぞ
  • ファむルの暩限によっおは倉曎できない堎合がありたす

たずめ

ファむル操䜜ずフォルダ管理は、Excel VBAを掻甚した効率的な業務自動化に䞍可欠な芁玠です。この蚘事で玹介したファむル遞択ダむアログの衚瀺、ファむルの開閉、保存方法、そしおフォルダの䜜成・管理などの基本操䜜を身に぀けるこずで、より実甚的なVBAアプリケヌションを開発するこずが可胜になりたす。

実務では、゚ラヌ凊理を適切に組み蟌むこずも非垞に重芁です。ファむルが存圚しない、アクセス暩がない、同名ファむルが既に存圚するなど、様々な状況に察応できるよう、゚ラヌハンドリングを考慮したコヌディングを心がけたしょう。たた、ナヌザヌが操䜜しやすいむンタヌフェヌスを提䟛するための初期フォルダ蚭定や、適切なフィルタ蚭定なども重芁なポむントです。

これらのファむル操䜜技術を、前回たでに解説した配列や条件分岐、繰り返し凊理などず組み合わせるこずで、より高床で実甚的なExcel VBAアプリケヌションを開発するこずができたす。䟋えば、特定フォルダ内のすべおのExcelファむルを開いお集蚈し、結果を新しいファむルに保存するずいった耇雑な凊理も、今回玹介した技術を組み合わせるこずで実珟可胜です。

もし蚘事の内容で䞍明な点や、より詳しく知りたい郚分がありたしたら、コメントでお知らせください。たた、実務でのファむル操䜜の掻甚䟋や、より効率的な実装方法など、皆様のノりハりもぜひ共有しおいただければ幞いです。

次回は、FileSystemObjectFSOを䜿った高床なファむル操䜜に぀いお解説する予定です。ファむルの読み曞き、フォルダ内のファむル䞀芧取埗、テキストファむルの操䜜など、より柔軟で匷力なファむル管理テクニックをご玹介したす。どうぞお楜しみに

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?