警告音を鳴らす

Beepステートメントはシステム警告音を鳴らします

'警告音を鳴らす
Beep

警告音を鳴らすには、「Beep」ステートメントを使用します
このコードを実行するとシステム設定された警告音を鳴らすことが出来ます
この音の設定はシステム設定になるのでVBAから任意に変更することは出来ません

あまり落とを鳴らすというような処理は好まれない場面が多いとは思いますが、例えば何らかの資料を見ながら入力処理を行う場合に、画面上で注意表示をしてもユーザーに認知されない可能性があります

またメッセージボックスでも音を鳴らすことが出来ますが、処理が停止するため入力処理の作業がそこで停止してしまいます
メッセージを確認しないと次の入力も行えません

入力値が制限外のデータであれば、それで構わないのですが、例えば数字を入力する際に前回入力値との差が10%以上あったら注意を促したい場合には有効です

その差が織り込み済みであれば、無視して操作を続けられるし、音が鳴ればユーザーは一度は画面を確認しますので入力時点で異常の検知や間違いに気づくことができるかもしれません

何らかの注意を促す場合に最低限で使用するようにしましょう

FileDialog.InitialFileNameプロパティ

ダイアログ表示をする際に、初期表示されるフォルダの指定を行うプロパティ

'このExcelブックのフォルダを初期表示する
Application.FileDialog(msoFileDialogFilePicker).InitialFileName = ThisWorkbook.Path

「FileDialog.InitialFileName」プロパティでは、ダイアログの表示時に初期表示されるフォルダを指定することが出来ます
このプロパティに指定フォルダまでの絶対パスを代入することで、設定を行うことが出来ます

このプロパティを設定しない場合は、カレントフォルダという作業中のフォルダが指定されます

ダイアログを使用する場合に、ある程度フォルダ位置が限定できている場合は使用するようにするとユーザーにやさしい設計になります

記事コードでは、このコードを記載したExcelブックのあるフォルダを指定しています

それがコード右辺の「ThisWorkbook.Path」という部分です

「ThisWorkbook」というオブジェクトは、このVBAが作成されているExcelブックのことになります
ActiveWorkbookは可変ですが、こちらは常に固定のExcelブックを取得できるので便利です

「Path」は、そのオブジェクトの絶対パス文字列のプロパティです
ファイルのあるフォルダ名までが取得されますので、こういった同じ場所を指定するには便利なプロパティです

FileDialog.AllowMultiSelectプロパティ

FileDialog.AllowMultiSelectプロパティは、複数選択の許可設定です。単一選択にするコード

'単一選択のみ可能にする
Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False

ファイル選択のダイアログボックスで、1つのファイルのみ選択可能にするには、「FileDialog.AllowMultiSelect」プロパティに「False」を設定します
この設定を行った後に、Showメソッドを使用してダイアログを表示します

初期設定では、複数のファイル選択が可能(Trueの状態)です
フォルダの選択は複数選択ができませんので、このプロパティはファイル選択のダイアログボックスで使用します

通常、複数選択であっても処理する対象が1つで、インデックスが1番目のもののみを行っていればエラーが発生することはありません

ただ、この複数選択を行った場合はインデックスの1番目に来るものが最初に選択したものにはならないので想定外のファイルが指定される可能性があります

そういったことを無くすために、最初から単一のファイル指定しか行えないようにする場合に使用します

FileDialog.Titleプロパティ

FileDialog.Titleプロパティでは、ダイアログボックスのタイトルを設定できます

'ダイアログのタイトル文字列の設定
Application.FileDialog(msoFileDialogFilePicker).Title = "タイトル"

「FileDialog.Title」プロパティでは、表示されるダイアログボックスのタイトル部分の文字列の設定を行えます
このプロパティ変更後に、Showメソッドでダイアログを表示することで確認できます

ダイアログのタイトル設定がされた状態
タイトルが設定された状態

コードを実行して、ダイアログを表示すると枠内のタイトル部分の文字列が変更されます

ダイアログボックスの種別には影響はしないので、どの種別を使用しても問題ありません

簡単な操作の説明をここに表示することで、ユーザーが今なんのために選択をしているかが分かり易くなります

逆に名前を付けて保存のダイアログを変えてしまうと、かえって分かりにくくなる場合もありますので、使用頻度はあまり無いかもしれません

FileDialog.Filters.Addメソッド

FileDialog.Filters.Addメソッドはダイアログでファイルの種別を限定する設定です

'2003までのExcelファイル形式のみ有効にする
Application.FileDialog(msoFileDialogFilePicker).Filters.Add "旧Excelファイル", "*.xls"

ダイアログボックスでファイル選択を行う際に、指定の種類のファイルのみに限定する場合は「FileDialog.Filters.Add」メソッドを使用します
このメソッドは設定を変更するだけです、この後にShowメソッドでダイアログを表示させて確認してください

通常未設定の状態では、全てのファイルを指定することができます

ただ、Excelファイル以外のファイルを指定しても開く場合はExcelによって開かれるのでデータによっては内容が変化したり、欠損したりします

また、処理上必要なファイルに限定しておかないとバグの元にもなります
ファイルを開くダイアログの場合は基本的には使用するメソッドです

ファイル種別を限定している状態
ファイル種別を限定している状態

画像の様にコードで設定後に、ダイアログを表示することで制限がかかっていることが分かります

この状態であれば、限定された拡張子しか表示されないので後続の処理に影響を与えません

画像枠内の「旧Excelファイル(*.xls)」が引数に指定した内容になります

Application.FileDialog(msoFileDialogFilePicker).Filters.Add "旧Excelファイル", "*.xls"

1つ目の引数の文字列が、説明用の文字列です
2つ目の引数の文字列が、許可するファイルの拡張子です

これは、任意の文字列になるのでWordファイルと表示しても.xlsで指定することは可能です、混乱するだけですが

Application.FileDialog(msoFileDialogFilePicker).Filters.Add "Excelファイル", "*.xls;*.xlsx"

複数の種別を指定する場合は、この様に「;」を入れてから別の拡張子を指定することで可能です

ダイアログボックスのキャンセル判定

ダイアログボックスを表示後にユーザーがキャンセルをしたかを判定するコード

'ファイル選択ダイアログでキャンセルした場合に分岐する
If Application.FileDialog(msoFileDialogFilePicker).Show = -1 Then
MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
Else
MsgBox "キャンセル実行"
End If

ダイアログボックスを表示した際に、指定の操作を行わなかった場合(キャンセルを行った場合)にそのまま処理を継続はできません
取得するアイテムが存在しないためエラーになります

その場合はキャンセルされた場合の処理分岐を作成する必要があります
それが、例コードになります

If Application.FileDialog(msoFileDialogFilePicker).Show = -1 Then

まず最初のIF条件文の箇所です
これはダイアログの表示と同時に、戻り値を判定基準にしています

ダイアログは選択されると「-1」を返します

なので、これを条件にすることで選択されたかどうかが判定できます
このコードでいえば、「-1」(選択した)であれば真(True)となります

MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
Else
MsgBox "キャンセル実行"
End If

残りのコードは、分岐によって処理される部分です

1行目は真の時に実行されるので、選択された状態であることが確認されているので
その指定ファイルの絶対パスをメッセージに表示します

Else以降は偽(False)の場合になるので、キャンセルされた場合に当てはまりますので、メッセージでキャンセルを知らせます

このコードは、ダイアログ全ての種類で有効です
名前を付けて保存のダイアログでも、キャンセルすればこの条件分岐で処理できます

選択個数で分岐

一応、選択個数で判定を行うこともできます
すこし条件文が冗長になるので、ここで解説しておきます

'ファイル選択ダイアログでキャンセルした場合に分岐する
If Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Count >= 1 Then
MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
Else
MsgBox "キャンセル実行"
End If

データの選択個数を取得するプロパティを使用します

その個数が1以上であれば選択していると判断します
なので、「>= 1」として1以上なら真になるように条件をたてます

どちらの条件分岐でもいいのですが、少し長くなるこちらはあまり意味はないかもしれません
指定したときに「-1」が返されることが分かっていれば、トップのコードでいいですね

FileDialog.Executeメソッド

FileDialog.Executeメソッドはダイアログで指定した操作を実行します。ファイルを開く・保存の実行コード

'選択したファイルを開く
Application.FileDialog(msoFileDialogOpen).Execute
'保存を実行する
Application.FileDialog(msoFileDialogSaveAs).Execute

ダイアログボックスでの指定を行った後に、ファイルを開くか名前を付けて保存を実行するには「Application.FileDialog().Execute」メソッドを使用します

このコードは単体では意味はありません
事前にユーザーにダイアログで指定を行ってもらう必要があります
そのダイアログの表示に関する解説は以下の記事にあります

表示したダイアログの種類と同じものにメソッドを使用すると実行されます

Application.FileDialog(msoFileDialogOpen).Show
Application.FileDialog(msoFileDialogOpen).Execute

この様に、Showメソッドの後に実行する事で操作が実行されます
ただ、Showメソッドでキャンセルを行ったり、開く操作を対象とした以外の行動をしている可能性もありますので、その辺は対応に合わせてプロパティを変更していく必要があります

FileDialog.SelectedItemsプロパティ

FileDialog.SelectedItemsプロパティは選択したアイテムの絶対パスが格納されます。Countプロパティによる個数取得もあります

'ファイル選択で指定したファイル1つ目の絶対パスを取得
Debug.Print Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1)
'ファイル選択で指定したファイルの個数を取得
Debug.Print Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Count

ダイアログボックスで指定したデータの絶対パスを取得するには、「SelectedItems」プロパティを使用します

このプロパティは、指定したデータの絶対パスが文字列で返されます

また、ダイアログボックスで複数選択していた場合は、引数の数値がインデックス番号になっているので数値を変更することで取得していくことができます

このプロパティには、さらにプロパティがあります
その場合はこのプロパティがオブジェクトに切り替わるわけですが、あまりどうでもいい話です

いくつかありますが、使用するのは「Count」プロパティです

Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Count

このコードではユーザーがダイアログで選択したデータの個数が取得できます

ダイアログの複数選択は個数が可変なので、いくつになるか分かりませんので処理をする際にこのプロパティで個数を取得することで、選択した全てを処理することが出来るようになります

ダイアログボックスの表示(FileDialog.Showメソッド)

ダイアログの表示コード、種類ごとのコードがあります。ここでは表示のみの処理になります

'ファイル選択のダイアログ表示
Application.FileDialog(msoFileDialogFilePicker).Show
'フォルダ選択のダイアログ表示
Application.FileDialog(msoFileDialogFolderPicker).Show
'ファイルを開くダイアログの表示
Application.FileDialog(msoFileDialogOpen).Show
'名前を付けて保存ダイアログの表示
Application.FileDialog(msoFileDialogSaveAs).Show

ダイアログボックスを表示するには、「Application.FileDialog().Show」メソッドを使用します
表示するダイアログの種類を引数に指定してからメソッドを使用します
種類の省略はできません

'ファイル選択のダイアログ表示
Application.FileDialog(msoFileDialogFilePicker).Show
'フォルダ選択のダイアログ表示
Application.FileDialog(msoFileDialogFolderPicker).Show

ファイル・フォルダ選択のダイアログを表示します
「msoFileDialogFilePicker」がファイル選択、「msoFileDialogFolderPicker」がフォルダ選択になります

ファイルの選択時には、ファイル全てが対象になりますのでExcel以外のデータの指定も可能です
また、複数選択が可能でマウスの範囲選択やCtrlキーでの指定が可能です

ここで選択したものは、SelectedItemsプロパティに絶対パスが文字列で取得されますので、以下の記事からプロパティでの動きも確認してください

'ファイルを開くダイアログの表示
Application.FileDialog(msoFileDialogOpen).Show

ファイルを開くダイアログの表示をします

上記のファイル選択時と同様でExcel以外のファイルの指定も可能です
ただ、あくまでもExcelのメソッドになりますので、開く際はExcelでデータが開かれますので注意が必要です

これ単体ではファイルを開けません、後述します

'名前を付けて保存ダイアログの表示
Application.FileDialog(msoFileDialogSaveAs).Show

名前を付けて保存のダイアログを表示します

この保存対象は、アクティブブックが対象になります
なので、コードブック以外のブックを指定したい場合は事前にそのブックをアクティブ状態にしておきます

上記のファイルを開くダイアログと名前を付けて保存ダイアログで行った指定に関しては、このコードだけでは実行されません

このコードは指定を行うだけで、実際の動作に関しては同じオブジェクトにExecuteメソッドを実行する必要があります
メソッドの解説と動きに関しては以下の記事から確認してください

ダイアログボックスのキャンセル

ダイアログボックスで必ずしもユーザーがデータを指定して完了するとは限りません

キャンセルする場合もあります、この場合には条件分岐により処理を分岐する必要があります
以下の記事でダイアログのキャンセル時の条件分岐処理を解説しています

FileDialogオブジェクト(ダイアログボックス)

FileDialogオブジェクトの解説。各メソッドとプロパティの一覧

Excelでダイアログボックスを表示及び操作を行うには、FileDialogオブジェクトを操作します

ダイアログボックスとは、「ファイルを開く」操作で表示される画面のことです

FileDialogオブジェクトでは、ファイルを開く以外にもフォルダの選択も行うことができるため、処理を行う対象フォルダの指定に使用したりします

ここで選択したファイルは、その絶対パスが返されます
そのパスを元にファイル操作を行っていく形になります

また、通常のダイアログボックス同様に複数の選択も可能です
その場合はItemプロパティに取得され、複数選択時はインデックス番号で指定が可能になります

基本的にExcelではドラッグ&ドロップ操作はできません
VBAでもユーザーフォーム間でしかできません
その辺の解説は以下の記事内で行っています

そこで白羽の矢の立ったのが、このダイアログボックスです
ユーザーのファイル選択はここから行ってもらうようにしましょう

FileDialogオブジェクトの操作について

これはオブジェクト操作になります
ダイアログの表示といっても、対象とするものの設定を行う必要がある場合があります
例えば、Excelブックを指定してもらいたいのにWordファイルを選択されてしまうことがあり得ます
これを制限するプロパティを設定する必要があります

この設定は、いつ行うのかというと、表示する前に設定を行います
なので、FileDialogオブジェクトの基本的な操作の流れは以下になります

  1. 指定のダイアログオブジェクトのプロパティを設定
  2. ダイアログを表示して、ユーザー操作
  3. 選択したファイルの絶対パスを取得

この様に表示する前に行うことがあって、表示後にもプロパティから処理を行います
ユーザーフォームの様に事前にプロパティ設定を行い保存しておくようなことは出来ないので、使用するときにコード上で行う必要があります

また、2から3の手順に移る際に、ユーザー操作でキャンセルが実行されていないかを判定しておく必要があります
判定方法については以下の記事を確認してください

FileDialogのメソッド

  • Execute
    操作を実行する、これをしないと選択しただけになる
  • Show
    ダイアログを表示する、これをしないと意味がないやつ
  • Filters.Add
    ファイル選択時の種別を制限するためのフィルター設定、拡張子で指定する

FileDialogのプロパティ

  • SelectedItems
    選択されたデータの絶対パスが格納されたもの、インデックス番号で指定可能
  • Title
    ダイアログボックスのタイトル部分に表示される文字列の設定
  • AllowMultiSelect
    ファイルの複数選択の許可設定、Falseにすると単一選択になる
  • InitialFileName
    初期表示されるフォルダを指定するためのプロパティ