ブック・ファイル
ブックを読み取り専用で開くにはWorkbooks.Openの引数ReadOnlyをTrueに指定します。ただし既に開いているファイルに対して実行しても、エラーにはならず、かつ読取専用にはなってくれませんのでご注意ください。
開いているブックを読み取り専用にするにはWorkbookのChangeFileAccessメソッドを使用します。読取専用ブックに実行するとエラーになってしまうためReadOnlyプロパティを調べてから実行してください。
Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、「VBA100本ノック」に対する私の回答と解説のページです。
フォルダ内の複数ファイルへ同じ処理を行う場合、①まずは対象ファイルのリストを取得、②そのリスト内の全ファイルへ処理のように処理を段階化するのが便利です。この①を簡単に行うための汎用関数を紹介します。
Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、「VBA100本ノック」に対する私の回答と解説のページです。
Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、「VBA100本ノック」に対する私の回答と解説のページです。
Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、「VBA100本ノック」に対する私の回答と解説のページです。
Zipファイルをマクロで解凍する方法を解説します。WScript.ShellオブジェクトのRunメソッドを使用して、ZIPファイルを解凍するPowerShellをVBAから呼ぶのが一番簡単です。
Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、「VBA100本ノック」に対する私の回答と解説のページです。
フォルダを空にするには、ワイルドカード「*」を使った一括削除をファイル・フォルダ両方へ実行します。Killは可能ですがRmDirではできないため、FileSystemObjectのDeleteFile/DeleteFolderメソッドを利用します。
フォルダ内のすべてのファイルを削除するには、Killステートメントのワイルドカード*を用いた一括削除を用いるのが簡単です。FileSystemObjectのDeleteFileメソッドでも全く同じ処理を実行可能です。
アクティブブックと同フォルダ内のブックを1シートに結合するマクロを紹介します。内部で汎用関数を動かしており、ブック名・シート名・拡張子の条件を指定できますのでこちらも併せてご活用ください。
ブックが保存済みかどうかを判定するには、WorkbookオブジェクトのSavedプロパティを調べます。このプロパティは代入も行うことができ、Trueにすることでブックを閉じる際の保存確認ダイアログを出なくすることができます。
Wordの新規保存ダイアルログは先頭行のタイトルが保存ファイル名初期値になって開きます。この機能をExcelでも使えるよう、選択セルの値をブック名初期値として新規保存ダイアログを開くマクロを紹介します。
現在作業中のブックを保存する際、上書き保存ではなく別名で保存しておきたい場面があります。ブック名_yyyymmddhhmm_作業メモという名称でファイルのバックアップを取るマクロを紹介します。
デスクトップのフォルダパスを取得する方法を解説します。いくつか方法がありますが、環境変数を取得するEnviron関数を使用するのが簡単です。他にWScript.Shellオブジェクトを使用する方法もあります。
知らずに落ちると抜け出せなくなるVBAの落とし穴です。 Killステートメントを実行したら関係のないファイルも削除された ファイル名を半角に変換した際、Killステートメントが暴発する 環境依存文字を用いたファイルの削除が安定しない あたりにお悩みの方は…
ブックを開いたまま移動したり、名前を変更する方法を解説します。これをストレートに実行する方法はありませんので、対象のブックを名前を付けて保存したあと元のブックを削除という手順で実行します。
新規ブックや読取専用ブックでCtrl+Sを実行したときに出る名前を付けて保存ダイアログがフォルダパスをペーストできる場所がないものに改悪されたため、これを旧来のダイアログに戻すマクロを紹介します。
ファイル名から拡張子を取り出す方法を解説します。FileSystemObjectのGetExtensionNameメソッドを利用する方法と、InstrRev関数+Right/Mid関数を使用する方法の2種類があります。
現在開いているブックをコピーするには、FileSystemObjectのCopyFileを使用し、「FSO.CopyFile コピー元ファイルパス, コピー先ファイルパス」を実行します。この処理はFileCopyステートメントでは実行できません。
最近使ったアイテムをVBAから編集したいときは、Application.RecentFilesプロパティを使用します。Addメソッドで追加を、Deleteメソッドで削除を実行できます。
破損したブックを修復して開くには、Workbooks.OpenメソッドでCorruptload:=xlRepairFileを指定すればいいのですが、これは破損していないブックも修復済みにしてしまうため、まずは普通に開く→失敗したら修復という手順を踏む必要があります。
ブックの読取専用推奨メッセージを無視して書き込み権限で開きたい場合は、Workbook.OpenメソッドのIgnoreReadOnlyRecommendedをTrueにすればOKです。DisplayAlerts=False、ReadOnly:=Falseではいずれも読取専用になるためご注意ください。
ファイルを新規保存したりコピー・移動する際に、既存ファイルを上書きしないよう連番を付与するコードは関数化しておくと便利です。ファイルが存在しなくなるまでiを増やし、ファイルベース名 & (i) & 拡張子を結果値として返すことで実装できます。
同じ名前のフォルダがある場所にフォルダを移動すると、手作業であればフォルダを統合することができます。しかしVBAにはその機能がないため、フォルダ内の全ファイルを判定しながら移動していき、最後に元フォルダを削除する必要があります。
ファイルを移動するNameステートメントとFileSystemObject.MoveFolderメソッドの違いを解説します。どちらも2つのパスを受け取ってファイルを移動します。MoveFolderのみワイルドカード*による一括移動ができる点が一番大きな違いです。
中身ごとフォルダをコピーするFileSystemObject.CopyFolderメソッドの使い方を解説します。FSO.CopyFolder コピー元パス, コピー先パスという記述で実行できます。コピー元にはワイルドカード*が使用でき、複数のフォルダを一括でコピーできます。
中身ごとフォルダを移動するFileSystemObject.MoveFolderメソッドの使い方を解説します。FSO.MoveFolder 移動元パス, 移動先パスという記述で実行できます。移動元にはワイルドカード*が使用でき、複数のフォルダを一括で移動できます。
フォルダを移動するName/FSO.MoveFolder」の両機能とも別ドライブ間の移動はできません。これを一発で行う機能は用意されていませんので、 まずはフォルダごとコピーし、そのあと元のフォルダを削除する手順で実行する必要があります。