和風スパゲティのレシピ

日本語でコーディングするExcelVBA

2023-02-01から1ヶ月間の記事一覧

フォルダをコピーする - FSO.CopyFolder

中身ごとフォルダをコピーするFileSystemObject.CopyFolderメソッドの使い方を解説します。FSO.CopyFolder コピー元パス, コピー先パスという記述で実行できます。コピー元にはワイルドカード*が使用でき、複数のフォルダを一括でコピーできます。

フォルダを移動する - FSO.MoveFolder

中身ごとフォルダを移動するFileSystemObject.MoveFolderメソッドの使い方を解説します。FSO.MoveFolder 移動元パス, 移動先パスという記述で実行できます。移動元にはワイルドカード*が使用でき、複数のフォルダを一括で移動できます。

フォルダを別のドライブに移動する

フォルダを移動するName/FSO.MoveFolder」の両機能とも別ドライブ間の移動はできません。これを一発で行う機能は用意されていませんので、 まずはフォルダごとコピーし、そのあと元のフォルダを削除する手順で実行する必要があります。

フォルダを移動・名称変更する-Nameステートメント

フォルダを移動・名称変更する際に使用するNameステートメントの使い方を解説します。Name 対象フォルダパス, 行先フォルダパスという記述で実行でき、最後のフォルダ名を変えれば名称変更、途中のフォルダパスを変えれば移動ができます。

既存ファイルを上書きしてファイルを移動する

移動先にファイルがあった場合は上書きしてファイルを移動する方法を解説します。Name/FSO.MoveFileはどちらも上書きする機能を持っていませんので、Kill/FSO.DeleteFilleで削除してからName/FSO.MoveFileで移動する手順を踏む必要があります。

WithとNameステートメントは併用できない

WithステートメントでWorksheetを参照中に、Name .Cells(1, 1) As .Cells(2, 1)のような記述を実行しようとすると、構文エラーが発生します。原因は不明ですが、Nameの直後に「.」を打つことはできないようです。Name (.Cells(1, 1))とやれば解決します。

NameとFSO.MoveFileの違い

ファイルを移動するNameステートメントとFileSystemObject.MoveFileメソッドの違いを解説します。どちらも2つのパスを受け取ってファイルを移動します。MoveFileのみワイルドカード*による一括移動ができる点が一番大きな違いです。

FileSystemObject.MoveFileメソッド

FileSystemObjectにてファイルを移動するMoveFileメソッドについて解説します。FSO.MoveFile 移動元ファイルパス, 移動先ファイル/フォルダパスという記述で実行します。ファイルパスにワイルドカードを使用して一括移動することも可能です。

ファイルを移動・名称変更する-Nameステートメント

ファイルを移動したりファイル名を変更する際に使用する、Nameステートメントの使い方を解説します。Name 移動するファイルのパス, 移動先のファイルパスという記述で実行でき、フォルダ部分を変えれば移動、変えなければ名称変更ができます。

FileCopyとFSO.CopyFileの違い

ファイルをコピーする際に使用する、FileCopyステートメントとFileSystemObject.CopyFileメソッドの違いを解説します。FSO.CopyFileが完全上位互換と言ってよく、特に「ファイル名省略可」「ワイルドカードで一括コピー可」が大きな長所となります。

Worksheets("○○"). の入力選択肢を出す方法

Worksheets("○○")でシートを取得したとき困るのが、「.」を入れても入力選択肢が出ないことです。この対処法として「変数にSet」「シートオブジェクト名」がありますが、第3の方法「Worksheet型にキャストする関数を作る」方法を解説します。

Sub/Functionプロシージャを呼ぶのにかかる時間

マクロをSub分割したり自作関数を作り始めると、Sub/Functionを呼ぶ時間分処理が遅くならないか心配になります。しかし、検証してみると1,000万回Callして1~2秒程度しか要さないため、プロシージャを呼ぶのにかかる時間は0だと思ってOKです。

IfステートメントとIIf関数の速度比較

5行かかるIf~Else~EndIfの分岐を1行で済ますIIf関数はとても便利なのですが、若干遅いためそれを検証してみます。結論としては、IIfが条件がTrueでもFalse部分も計算してしまうという遅さがあるが、それを除けば実務上実感できる差は出ません。

"1"+"1"="11"

「+」を文字列に対して使うと連結演算子(&と同じ)になります。足し算の結果がかなり大きな誤った値になったり、セルの表示書式を「文字列」にすると正しく計算されないような不具合が発生した場合は、この仕様を疑ってください。

サイトマップとカテゴリを整理しました

記事数がだいぶ増えたので、カテゴリを見直し、サイトマップをリニューアルしました。今回新たに「入門・まとめ」というカテゴリを追加しておりますので、勉強用の読み物が欲しい方はこちらからお探しください。

FileSystemObject.CopyFileメソッド

FileSystemObjectにてファイルをコピーするCopyFileメソッドについて解説します。コピー元と行先の二つのパスを渡して実行します。行先はファイル/フォルダどちらでも動きます。コピー元パスにワイルドカードを使用すれば一括コピーが可能です。

ファイルをコピーする - FileCopyステートメント

ファイルをコピーする際に使用する、FileCopyステートメントの使い方を解説します。FileCopy コピー元のファイルパス, コピー先のファイルパス という単純な記述で実行できます。既存のファイルは無警告で上書きされてしまう点に注意してください。

Folderオブジェクト(FileSystemObject)

FileSystemObjectの参照下で使用できるようになる、Folderオブジェクトの取得方法とプロパティ・メンバー一覧を記載します。

Fileオブジェクト(FileSystemObject)

FileSystemObjectの参照下で使用できるようになる、Fileオブジェクトの取得方法とプロパティ・メンバー一覧を記載します。

FileSystemObjectとは - Dir関数群との違い

ExcelVBAにおいてファイル・フォルダを便利に操作するためにFileSystemObjectという名前の拡張機能が用意されています。このFileSystemObjectを初めて使う方に向けて、どんな機能なのか、どんな時に使うのかをまずは簡単に説明していきます。

FileSystemObject入門-フォルダ取得と再帰処理

FileSystemObjectでフォルダ内のサブフォルダ一覧を取得する方法と、それを最下層まですべての階層のフォルダ取得するコードを解説します。フォルダを取得する関数内で自身をSubFoldersに対して呼出する、いわゆる再帰呼出によって実装します。

FileSystemObject入門-ファイル一覧の取得

FileSystemObjectでフォルダ内のファイル一覧を取得する方法について解説します。FSOはファイル・フォルダをオブジェクトとして扱えるのが特長で、フォルダ内のFileオブジェクトは「Folderオブジェクト.Files」で取得でき、これにForEach文が使えます。

Dir関数でサブフォルダの一覧を取得する方法

Dir関数を使ってサブフォルダの一覧を取得する方法を解説します。これは非推奨な方法で、FileSystemObjectを使った方が簡単なことに注意してください。Dirの場合は相対パスとファイルも検索されてしまい、これをはじくコードが必要になります。

空のフォルダを一括削除するマクロ

空のフォルダを一括で削除する方法を解説します。親フォルダのSubFoldersをForEachでループし、FilesとSubFoldersのCOuntが共に0である子フォルダをDeleteすることで実行できます。下層フォルダまで検索する場合は、再帰呼出を追加します。

2/11(土)20:00~ VBA勉強会「日本語変数のすすめ+母国語で作る自作関数入門」

2/11(土)20:00~ Zoom勉強会に登壇します。「日本語変数のすすめ+母国語で作る自作関数入門」と題し、このブログのテーマである日本語変数のメリットデメリットの解説と、それを利用して簡単な自作関数の作り方講座を開催いたします。

フォルダが空か判定する

フォルダが空かどうか判定する方法を解説します。フォルダの中にファイルがなく、かつフォルダの中にフォルダない場合に空のフォルダと判定します。Folderオブジェクトに対して、.Files.Count = 0と.SubFolders.Count = 0を判定すればOKです。

RmDirとFSO.DeleteFolderの違い

フォルダを削除する際に使用する、RmDirとFileSystemObject.DeleteFolderの違いを解説します。実はこの二つはほとんど違うもの、RmDirは空のフォルダを削除するステートメントですが、DeleteFolderは中身ごとフォルダを削除するメソッドです。

フォルダを削除する - FSO.DeleteFolder

中のファイル・フォルダごとフォルダを削除する場合はFileSystemObject.DeleteFolderメソッドを使い、FSO.DeleteFolder 削除フォルダパス というコードを実行します。これは空フォルダしか削除できないRmDirで行えないため、FSO必須の処理になります。