GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  エクセルからファイルを操作してみよう!
 
■ エクセルからファイルを操作しよう1

業務用アプリケーションを開発する上で、システムからファイル操作を行うことは避けて通れません。
エクセル本体にも多くのデータを確保できますが、他アプリケーションとの連携やデータの運用を考えた場合、別ファイルとして保存したほうが保守性がよいパターンは数多く存在します。

エクセルからファイル操作をする上で、最も扱いやすいのがFileSystemObject(FSO)ファイルシステムオブジェクトでしょう。
FileSystemObjectオブジェクトは、ドライブ、フォルダ、ファイル等の操作(追加、移動、削除)をしたり、情報の取得や変更ができる大変便利なオブジェクトです。Scrrun.dll内のスクリプティングタイプライブラリとして提供されており、ExcelVBAから実行ができます。

ExcelVBAからFileSystemObjectを利用するには、プロジェクト>参照設定で、Microsoft Scripting Runtimeの参照にチェックを入れるか、CreateObject関数を実行してFileSystemObjectのインスタンスを作成します。

参照設定でMicrosoft Scripting Runtimeにチェックを入れた場合
  Dim FSO As New FileSystemObject
  で、インスタンスが作成されます。 ※1

CreateObject関数を使用する場合
  Dim FSO As Object
  Set FSO = CreateObject("Scripting.FileSystemObject")
  で、インスタンスが作成されます。

※ なお、Microsoft Scripting Runtimeに参照設定を行わない場合は、コードの記述の際に自動メンバ表示や自動データヒントといったコード補完機能が働かないので注意してください。

では早速、FileSystemObjectについて解説していきましょう。
なお、この後に出るサンプルコードはいずれも上記の方法で、あらかじめFSOのインスタンスを作成しているものとします。実際に使用する場合は、下記コードの中にサンプルコードを挿入して使用します。

省略されているコード(参照設定でMicrosoft Scripting Runtimeにチェックを入れる場合)
  Sub test()
  Dim FSO As New FileSystemObject
    'この部分にサンプルコードが入る
    Set FSO = Nothing
  End Sub

省略されているコード(CreateObject関数を使用する場合)
  Sub test()
  Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    'この部分にサンプルコードが入る
    Set FSO = Nothing
  End Sub

FileSystemObject のオブジェクト
FileSystemObjectには、次のオブジェクトとコレクションが存在します。

FileSystemObject
最上位のオブジェクトで、ドライブ、フォルダ、およびファイルに関して、作成、削除、情報の取得などの一般的な操作を行うためのメソッドとプロパティが用意されています。

「FileSystemObject オブジェクトのプロパティの一覧 」
Drives システムで利用できるすべてのDrivesコレクションを返します。 
(例)
  Dim Drv As Variant
  For Each Drv In FSO.Drives
    Debug.Print Drv.DriveLetter
  Next Drv
この場合、システムに接続されている全てのドライブの一覧を返します。



「FileSystemObject オブジェクトのメソッドの一覧 」
BuildPath パスの末尾にフォルダ名を追加したパス名を返します。
(例)
  Dim MyStr As String
  MyStr = "hoge"
  Debug.Print FSO.BuildPath("C:\test", MyStr)
この場合「C:\test\hoge」という文字列が作成されますが、実際にフォルダが作成されるわけではないので注意してください。

CopyFile ファイルをコピーします。 
CopyFolder フォルダをコピーします。 
(例)
  FSO.CopyFile "C:\test\001.bmp", "C:\test\hoge\"
  FSO.CopyFile "C:\test\001.bmp", "C:\test\hoge\002.bmp"
上の例は、C:\testにある001.bmpをC:\test\hogeに同名でコピーしています。
下の例では、C:\test\hogeに002.bmpとリネームしてコピーしています。
(例)
  FSO.CopyFile "C:\test\*.bmp", "C:\test\hoge\"
また、ワイルドカード"*"を使用することもできます。この場合、C:\testにある全てのbmpファイルをC:\test\hogeにコピーします。ワイルドカードはパスの途中には使用できません。C:\tes*\001.bmpなどはエラーになります。
(例)
  FSO.CopyFile "C:\test\001.bmp", "C:\test\hoge\", True
  FSO.CopyFile "C:\test\001.bmp", "C:\test\hoge\", False
第3引数にFalseを指定すると上書きを行いません。同名のファイルが既に存在する場合はエラーになります。第3引数を省略するとTrueとみなされます。
(例)
  FSO.CopyFolder "C:\test", "C:\test2"
  FSO.CopyFolder "C:\test\hoge", "C:\test2\"
フォルダも同様にコピーできます。
  上の例は、C:\testフォルダと同じものをC:\test2にリネームしてコピーします。
  下の例では、C:\test\hogeフォルダをC:\test2フォルダ内にコピーします。

CreateFolder フォルダを作成します。
(例)
  FSO.CreateFolder "C:\test\hoge"
この場合は、C:\testフォルダ内にhogeというフォルダを作成しています。同名のフォルダが既に存在する場合はエラーになります。

CreateTextFile テキストファイルを作成します。
(例)
  Dim MyTxt As TextStream
  Set MyTxt = FSO.CreateTextFile("C:\test\test.txt")
    MyTxt.WriteLine ("*** CreateTextFileTest Succeeded ***")
    MyTxt.Close
  Set MyTxt = Nothing
この場合、C:\testフォルダ内にtest.txtを作成し
「*** CreateTextFileTest Succeeded ***」の文字列を書き込みます。
(例)
  Set MyTxt = FSO.CreateTextFile("C:\test\test.txt", False, True)
CreateTextFileの第2引数は上書きの許可を、第3引数は文字コードを指定します。
第2引数がFalseの場合は、上書きを許可しません。省略した場合はTrueとみなされます。
第3引数がTrueの場合はUnicodeファイルで、Falseの場合はAsciiファイルで作成します。省略した場合はFalseとみなされます。この例の場合は、上書きをせずにUnicodeファイルでtest.txtを作成します。

DeleteFile ファイルを削除します。
DeleteFolder フォルダおよびフォルダ内を削除します。
(例)
  FSO.DeleteFile "C:\test\test.txt"
  FSO.DeleteFile "C:\test\test.txt", True
第2引数は読み取り専用のファイルの削除を許可するかしないかの指定です。
上の例はtest.txtが読み取り専用だった場合エラーになりますが、下の例ではエラーになりません。省略した場合はFalseとみなされます。またワイルドカードも使用できます。
(例)
  FSO.DeleteFolder "C:\test\hoge"
この場合、C:\test\hogeとそのフォルダ内を全て削除します。第2引数にTrueを指定すると読み取り専用ファイルも削除されます。省略した場合はFalseとみなされます。DeleteFile、DeleteFolder共、存在しないファイル・フォルダを削除しようとするとエラーになります。

DriveExists 指定されたドライブが存在する場合は真を、存在しない場合は偽を返します。 
FileExists 指定されたファイルが存在する場合は真を、存在しない場合は偽を返します。 
FolderExists 指定されたフォルダが存在する場合は真を、存在しない場合は偽を返します。
(例)
  Debug.Print FSO.DriveExists("D")
この場合は、Dドライブが存在すればTrueを存在しない場合はFalseを出力します。
(例)
  Debug.Print FSO.FileExists("C:\test\test.txt")
  Debug.Print FSO.FolderExists("C:\test")
上の例ではファイルの存在を、下の例ではフォルダの存在を調べています。

GetAbsolutePathName 指定されたパスの完全なパス名を返します。 
(例)
  Debug.Print FSO.GetAbsolutePathName("test.txt")
  Debug.Print FSO.GetAbsolutePathName("\")
カレントフォルダが"C:\test"だった場合、上の例では"C:\test\test.txt"を、下の例では"C:\"を返します。

GetBaseName ファイルのベース名 (ファイル拡張子を除いたもの) を返します。 
GetExtensionName 指定されたファイルの拡張子を返します。 
(例)
  Debug.Print FSO.GetBaseName("C:\test\001.bmp")
  Debug.Print FSO.GetExtensionName("C:\test\001.bmp")
上の例では"001"が返り、下の例では"bmp"が返ります。

GetDrive 指定されたドライブのDriveオブジェクトを返します。 
GetFile 指定されたファイルのFileオブジェクトを返します。
GetFolder 指定されたフォルダのFolderオブジェクトを返します。
(例)
  Debug.Print Debug.Print FSO.GetDrive("A").IsReady
この例では、Aドライブのオブジェクトを取得して、ドライブの準備ができているかどうかを判定させています。
(例)
  Debug.Print FSO.GetFile("C:\test\001.bmp").Type
この例では、001.bmpのファイルオブジェクトを取得して、ファイルタイプを出力させています。出力される文字列は"ビットマップ イメージ"になります。
(例)
  Debug.Print FSO.GetFolder("C:\test").Size
この例では、C:\testフォルダのフォルダオブジェクトを取得して、フォルダサイズを出力させています。出力されるのはC:\testフォルダの全容量バイト数です。

GetDriveName 指定されたドライブ名を返します。 
GetFileName 指定されたファイル名またはフォルダ名を返します。
GetParentFolderName 指定されたファイルまたはフォルダの親フォルダ名を返します。
(例)
  Debug.Print FSO.GetDriveName("C")
この例では、文字列"C:"を返します。
(例)
  Debug.Print FSO.GetFileName("C:\test\001.bmp")
この例では、文字列"001.bmp"を返します。
(例)
  Debug.Print FSO.GetParentFolderName("C:\test\001.bmp")
この例では、文字列"C:\test"を返します。

GetSpecialFolde 特殊フォルダのパスを返します。
  特殊フォルダの種類に指定できる値
  0 Windowsによりセットアップされたファイルの置かれているフォルダが返されます。 
  1 ライブラリ、フォント、デバイスドライバなどの置かれているフォルダが返されます。 
  2 一時ファイルの格納に使用されるフォルダが返されます。
(例)
  Debug.Print FSO.GetSpecialFolder(0).Path
  Debug.Print FSO.GetSpecialFolder(1).Path
  Debug.Print FSO.GetSpecialFolder(2).Path
0の値を指定した場合"C:\WINDOWS"のパスが、
1の値を指定した場合"C:\WINDOWS\system32"のパスが、
2の値を指定した場合環境変数TMPのパスが、それぞれ返ります。

GetTempName 一時ファイル、フォルダの名前をランダムに生成します。
(例)
  Debug.Print FSO.GetTempName
この場合、"rad00A00.tmp"等のファイル名がランダムに作成されます。

MoveFile 一つまたは複数のファイルを移動します。
MoveFolder 一つまたは複数のフォルダを移動します。 
(例)
  FSO.MoveFile "C:\test\test.txt", "C:\test\hoge\"
  FSO.MoveFolder "C:\test\hoge", "C:\test2\"
CopyFile,CopyFolderメソッドと基本的に同じです。コピーではなく移動させます。

OpenTextFile 指定されたファイルを開き、読み取り、または書き込みに使用できるTextStreamオブジェクトを返します。
(例)
  Debug.Print FSO.OpenTextFile("C:\test\test.txt").ReadAll
この場合、test.txtに書かれている全てのテキストを読み取り、出力します。
(例)
  FSO.OpenTextFile("C:\test\test2.txt", 2, True, -1).Write _
                               "*** OpenTextFileTest Succeeded ***"
第2引数は入出力モードを指定します。1は読み込み、2は書き込み、8は追記です。省略すると1が指定されたとみなされます。
第3引数は新規作成をするかしないかを指定します。Trueなら新規作成をし、Falseなら新規作成をしません。省略するとFalseが指定されたとみなされます。
第4引数は文字コードを設定します。 0のときはASCIIファイルで、-1のときはUnicodeファイルで、-2のときはシステムの規定値でファイルが開かれます。省略すると0が指定されたとみなされます。
上記の例では、C:\testフォルダに"*** OpenTextFileTest Succeeded ***"と書かれたtest2.txtをUnicodeファイルで新規作成しています。

次回はDriveオブジェクト、Fileオブジェクト、Folderオブジェクトについて解説します。

※1 実際にインスタンスが生成されるタイミングはFSOが使用される時になります。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,