挫折したくない人のためのVBA入門:GetOpenFilenameでファイル選択を「お任せ」にする技術

ITスキル
スポンサーリンク

「あぁ、まただ…。ファイル名が今日の日付に変わったから、マクロのコードの中身を書き換えないと動かないや。面倒くさいなぁ…」

こんな経験はありませんか?

せっかくマクロを作っても、対象のファイルが変わるたびにVBAの画面を開いて「ファイルパス(保存場所)」を書き換えているようでは、本当の効率化とは言えませんよね。

そこで登場するのが、今回ご紹介する「GetOpenFilename」です。

これは、Excelで「ファイルを開く」ボタンを押したときに出てくる、あの「ファイル選択画面(ダイアログ)」を、自分のマクロ内に呼び出す便利な仕組みです。

【業務効率化】VBAの記事を見る

なぜ「パスの直接書き込み」は避けるべきなのか?

例えばデスクトップにある「売上データ.xlsx」を読み込むマクロを作ったとします。

しかし、このマクロを上司や同僚に共有しても正しく動きません。
理由はシンプルで、他者のパソコンのデスクトップにはそのファイルがなかったり、異なるファイル名になっていたりするからです。

このように、特定のファイル場所をコードに直接書き込むこと(ハードコーディング)は、「誰がどこで使っても迷わず動くツール」を作る上での大きな障害になります。

GetOpenFilenameはユーザーの「御用聞き」

このメソッドは、例えるなら「買い物へ行く前に『今日は何を買ってきましょうか?』と確認してくれる御用聞き」のようなものです。
つまり、マクロが自動でファイルを探しに行くのではなく、「どのファイルを使用しますか?」とユーザーに問いかけてくれるようになります。

それでは、コピペで使えるコードを見てみましょう。

Sub SelectFileSample()
    ' 変数の宣言
    Dim filePath As Variant
   
    ' ファイル選択ダイアログを表示(御用聞き機能の呼び出し)
    ' 引数のFileFilterで、エクセルファイルだけを見えるように制限しています
    filePath = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xlsx;*.xls")
   
    ' 「キャンセル」が押されたときの対策
    ' 何も選択されなかった場合、filePathには False が格納されます
    If filePath = False Then
        MsgBox "キャンセルされました。処理を中断します。"
        Exit Sub
    End If
   
    ' 選択されたファイルのパスを表示(実際はここにファイルを開く処理などを記述します)
    MsgBox "あなたが選んだのはこれですね!:" & vbCrLf & filePath
   
    ' 参考:実際に開く場合は以下のように書きます
    ' Workbooks.Open Filename:=filePath
End Sub


おわりに

VBAは一見「難しそう」と思われがちですが、完成したツールはこうした「使い手へのちょっとした気遣い」の積み重ねで成り立っています。

この GetOpenFilename をマスターすれば、私たちの作成するツールは一気に「プロ仕様」へと進化します。ぜひ、今日から自分のマクロに組み込んでみてください!

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
ITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました