image

FileSystemObjectは、システムに接続されているフォルダーとファイルを操作するために使用されます。これを使用して、ファイル、フォルダー、ドライブ、およびテキストストリームにアクセスできます。ファイル、フォルダ、テキストファイルにアクセスできるだけでなく、作成することもできます。これらの操作は、システムのハードディスクだけでなく、ファイルに接続されているすべてのデバイスに限定されません。これは、ペンドライブ、CD-ROM、または仮想的に接続されたネットワークドライブにアクセスできることを意味します。

これらはVBAでFileSystemObjectを使用して実行できる操作です:

テキストファイルの作成、オープン、読み取り、書き込み、削除用。

フォルダの追加、変更、削除に。

ファイルとフォルダを反復処理します。

ファイルやフォルダを他の場所にコピーおよび移動する場合。

ファイルまたはフォルダがその場所に存在するかどうかを確認するため

VBAでFileSystemObjectにアクセスする方法は?

ファイルシステムオブジェクトは、MicrosoftScriptingランタイムライブラリの一部です。

FileSystemObjectにアクセスするには、Microsoft Scripting RuntimeLibraryまたはScrrun.dll *に接続するか参照を追加する必要があります。

注:Scrrun.dllはTextStreamオブジェクトを使用したファイルの作成と操作をサポートしているため、FileSystemObjectはバイナリファイルの操作をサポートしていません。

VBAでFileSystemObjectを作成するには、次の2つのメソッドがあります。

1:CreateObjectメソッドを使用したFSOオブジェクトの作成:

このメソッドを使用して、最初に可変オブジェクトタイプを宣言します。次に、CreateObjectを使用してFSOオブジェクトの参照をその変数に設定します。

Sub LearnFso()

'Creating the object variable

Dim fso As Object

'Create the FileSystemObject using Create Object Method

Set fso = CreateObject("Scripting.FileSystemObject")

Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

この方法は動的で転送可能です。つまり、コードを他のシステムと共有している場合、このコードは完全に正常に機能します。使用しているMicrosoftランタイムスクリプトのバージョンは関係ありません。

唯一の欠点は、VBAによって提供されるインテリセンスを表示できないことです。 FileSystemObjectのすべてのプロパティとメソッドを使用するには、知識に依存する必要があります。

2:Microsoftランタイムスクリプトへの参照を追加してFSOオブジェクトを作成するnewキーワードを使用して、VBAでFileSystemObjectを直接作成できます。

そのためには、システムに最新のMicrosoft ScriptingRuntimeへの参照を追加する必要があります。

参照を追加するには、ツールメニューの参照オプションに移動します。

ここで、Microsoft Scripting Runtimedllを見つけます。それを確認し、[OK]をクリックします。

image

これで、FSOオブジェクトを作成して使用する準備が整いました。

Sub LearnFso()

Dim fso as new FileSystemObject

Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

または

Sub LearnFso()

Dim fso as FileSystemObject

Set fso = New FileSystemObject

Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")

End Sub

どちらも正常に動作します。

この方法の主な利点は、VBAのインテリジェンスを確認できることです。 VBAは、fsoオブジェクトのすべてのプロパティとメソッドを表示します。また、受け入れる変数の種類と返される値の種類も示します。

image

このコードを他のシステムと共有する場合は、ツールからスクリプトランタイムへの参照を追加するようにシステムに指示する必要があります。そうしないと、ユーザー定義の型が定義されていないというコンパイルエラーが発生します。つまり、他のプログラミング言語をインポートするようなものです。

FSOはキーワードではないことに注意してください。変数名として使用できます。 filesystemobjectにfsoという名前を付けるのは単なる慣例です。それがキーワードであると混同する人がいる理由です。 FSOオブジェクトを作成する両方の方法には、説明中に説明した長所と短所があります。したがって、必要に応じて使用してください。この記事では、FileSystemObjectを作成する2番目のメソッドを使用します。

VBAでFileSystemObjectを作成する方法がわかったので、この知識を使用していくつかの意味のあるタスクを実行しましょう。つまり、例にジャンプしましょう。

例1:指定されたフォルダー内のすべてのサブフォルダーを取得する最初の例は、特定のフォルダーからサブフォルダー名を取得することです。

Sub LearnFso()

' decaring variables that we will need

Dim fso As FileSystemObject ' Variable for the FileSystemObject

Dim fdr As Folder      ' Variable for the base folder

Dim subfdr As Folder     ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder

'Intializing the objects

fdrpath = "D:\Downloads" 'Declaring the folder

Set fso = New FileSystemObject 'Creating the fso object

Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder

'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders

Debug.Print subfdr.Name

Next subfdr

End Sub

上記のコードを実行すると、これが得られます。

image

うん!それが私のダウンロードフォルダです。それに集中しないでください。

これはどのように機能しましたか?

ステップで理解しましょう:

1:必要な変数の決定

_Dim fso As FileSystemObject’FileSystemObjectの変数Dim fdr AsFolder ‘ベースフォルダーの変数Dim subfdr As Folder’サブフォルダーの変数_最初に、この例で必要なすべての変数を宣言しました。

もちろん、最初の変数はファイルシステムオブジェクトとしてのfsoです。 2つの変数fdrとsubfdrはフォルダータイプです。直接作成するのではなく、fsoオブジェクトを使用してファイルタイプオブジェクトを作成します。 fdrpath * is use変数は、すべてのサブフォルダーを取得するベースフォルダーのパスを保持するために使用されます。

2:オブジェクトの初期化

_fdrpath = “D:\ Downloads” _ ‘フォルダの宣言_Setfso = New FileSystemObject’fsoオブジェクトの作成__Setfdr = fso.GetFolder(fdrpath)’指定されたフォルダのフォルダオブジェクトの作成_このステップでは、すべてのオブジェクトを初期化しました。 subfdr以外は宣言しました。 fsoオブジェクトのメソッドgetFolderを使用してfdrファイル変数を初期化したことに注意してください。

FileSystemObjectのGetFolder()メソッドは、フォルダまたはディレクトリのパスを文字列として受け取り、ファイルタイプオブジェクトを返します。

3:ループしてフォルダオブジェクト内のすべてのサブフォルダ名を取得します

For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name _Next subfdr_ここでは、for eachループを使用して、fdrファイルオブジェクトの各サブフォルダーをループしました。ファイルオブジェクトのSubFoldersプロパティを使用してループしました。

nameプロパティを使用して、各サブフォルダーの名前を取得します。そして、それは行われます。

例2:フォルダーとそのサブフォルダー内のすべてのファイルパスを取得するフォルダーとそのサブフォルダー内のすべてのファイルのすべてのパスまたは完全修飾名を取得するには、例1のコードにさらに数行追加する必要があります。

Sub LearnFso()

Dim fso As FileSystemObject

Dim fdr As Folder  ' Variable for the base folder

Dim subfdr As Folder ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder

Dim fl As File    'to store file object

fdrpath = "D:\downloads"

Set fso = New FileSystemObject

Set fdr = fso.GetFolder(fdrpath)

'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders

For Each fl In subfdr.Files 'to loop throgh each file

Debug.Print fl.Path 'getting file name

Next fl

Next subfdr

'to get the files of main folder

For Each fl In fdr.Files

Debug.Print fl.Path

Next fl

End Sub

Folder.Files()メソッドは、サブフォルダー内のファイルを返すメソッドです。 File.Path()メソッドは、ファイルの完全なアドレスを返します。それぞれ、メインフォルダーとそのサブフォルダー内のすべてのファイルを反復処理するための内部ループがあります。メインフォルダのファイルを取得するには、別のループを使用します。

例3:ファイル名をCSVファイルに保存します。

前の例では、特定のフォルダーのファイルパスをイミディエイトウィンドウに印刷する方法を学びました。この例では、これらのパスをCSVファイルに保存する方法を学習します。そのためには、コードに数行追加するだけです。以下の太字のコード行を参照してください。

Sub LearnFso()

Dim fso As FileSystemObject

Dim fdr As Folder  ' Variable for the base folder

Dim subfdr As Folder ' Variable for the sub folders

Dim fdrpath As String 'to store path of base folder

Dim fl As File    'to store file object

Dim fileList As TextStream 'A textstream object

fdrpath = "D:\downloads"

Set fso = New FileSystemObject

Set fdr = fso.GetFolder(fdrpath)

Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False)

'loop to get all the sub folders name in

For Each subfdr In fdr.SubFolders

For Each fl In subfdr.Files 'to loop through each file

fileList.Write fl.Path & ","

Next fl

Next subfdr

'to get the files of main folder

For Each fl In fdr.Files

fileList.Write fl.Path & ","

Next fl

fileList.Close

End Sub

ここでは、

という名前のFileStreamタイプの新しいオブジェクトを宣言しました。 === fileList

以下の行を使用して、filelist変数をfilestreamオブジェクトで初期化しました。

Set fileList = fso.CreateTextFile(fdrpath& “\ File List in This Folder.csv”、True、False)FSOのCreateTextFileメソッドを使用してFileStreamオブジェクトを作成します。

テキストファイルを作成します。このメソッドは、完全なパスを持つファイルの名前を受け入れます。最初の変数はそうしています。 .csv拡張子を使用してcsvファイルを作成します。 2番目の変数は、上書きを許可するために使用されます。

3番目の引数はFalseであり、バイナリファイルではないことを宣言します。ループでは、debug.printをfilelist.Writeメソッドに置き換えて、作成されたファイルに各ファイルパスを書き込みます。そうですね、これがFileSystemObjectの使用方法です。 FSOは、今後の記事で説明する、さらに多くの用途に使用できます。 FSO関連のクエリのこの記事について疑問がある場合は、以下のコメントセクションで質問してください。

関連記事:

link:/ applications-word-outlook-in-vba-getting-started-with-excel-vba-userforms [Excel VBAUserForms入門] | * Excelでフォームを作成する方法と使用方法を説明しますVBAツールボックス、ユーザー入力の処理方法、そして最後にユーザー入力の保存方法。これらのトピックについて、1つの例とステップバイステップガイドを使用して説明します。

link:/ general-topics-in-vba-vba-variables-in-excel [ExcelのVBA変数] | * VBAはVisualBasic forApplicationsの略です。

これは、Microsoftのプログラミング言語です。これは、MSExcel、MS-Word、MS-AccessなどのMicrosoft Officeアプリケーションで使用されますが、VBA変数は特定のキーワードです。

link:/ general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope] | *すべてのプログラミング言語には、定義された変数にアクセスできる場所を定義する変数アクセス指定子があります。 ExcelVBAも例外ではありません。 VBAにもスコープ指定子があります。

link:/ cells-ranges-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-interview-question [ByRef and ByVal Arguments] |引数がByRef引数として別のサブまたは関数に渡されると、実際の変数の参照が送信されます。変数のコピーに加えられた変更は、元の引数に反映されます。

link:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [MicrosoftExcelのVBAを使用して確認プロンプトなしでシートを削除する] | VBAを使用してシートを削除しているので、何をしているのかがわかります。

この警告を表示せず、いまいましいシートを削除しないようにExcelに指示します。

link:/ files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して新しいブックを追加および保存する] |このコードでは、最初にワークブックオブジェクトへの参照を作成しました。次に、新しいブックオブジェクトで初期化しました。このアプローチの利点は、この新しいワークブックの操作を簡単に実行できることです。保存、閉じる、削除などのように `link:/ menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On ExcelVBAステータスバー*] `| Excelのステータスバーはコードモニターとして使用できます。 VBAコードが長く、VBAを使用していくつかのタスクを実行する場合、画面のちらつきが表示されないように、画面の更新を無効にすることがよくあります。

link:/ general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Microsoft Excel2016でVBAを使用して警告メッセージをオフにする] | *このコードはVBAを無効にするだけではありませんアラートだけでなく、コードの時間効率も向上します。方法を見てみましょう。

人気の記事:

link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット] |あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。

link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数] |これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016] |この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。

ダッシュボードを準備するには、Countif関数が不可欠です。

link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法] |これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。