「ワイルドカードを使ってファイルを開いたんだけど、そのファイルを閉じることができない。」
この記事ではこんな悩みを解決します。
初心者向けに画像多めで解説していきますので、ぜひ最後までご覧ください。
それではさっそくやっていきます!
はじめに
VBAで開いているファイルを閉じる方法のひとつに
【Windows(ファイル名).Close】
というやり方があります。
しかしこの方法は正式なファイル名を入力していなければ機能しません。
ワイルドカードでファイルを開いた場合、そのファイルの正式名称を把握できているわけではありませんので、この【Windows(ファイル名).Close】というやり方では、ファイルを閉じることができません。
この課題は、ある一文のVBAコードを、ファイルを開くコードの直後に記入すれば解決できます。
とはいえ、その一文だけをご紹介してもイメージがわかないと思います。
この記事ではせっかくなので、
①ワイルドカードを使ってファイルを開く
②その開いたファイルを閉じる
という一連の流れでご紹介していこうと思います。
ワイルドカードを使って開いたファイルを閉じる方法
実際のVBAコードを書いていく前に、まずは題材をご紹介しておきましょう。
今回は以下の画像のように、あるフォルダの中に複数のテキストファイルが入っています。
また、以下の画像のようにVBAを実行するエクセルシート上に、これらのファイルが入っているフォルダのフルパス、開きたいファイル名(ワイルドカード使用)が記入されている状態とします。
※今回は【file_Ver3】という文字から始まるファイルを開いてみます。
前提が確認できたところで、次はVBAコードを記入していきましょう。
◆ワイルドカード(*)を使って開いたファイルを閉じるという一連のVBAコード
Sub close_wild_card()
'変数の型を宣言
Dim read_fol As String
Dim read_file As String
'ファイルの開く
read_fol = Cells(2, 1)
read_data = Cells(5, 1)
Workbooks.OpenText Filename:=read_fol & "\" & read_data
'開いたファイルの正式名称を記憶させる
read_data = ActiveWorkbook.Name
'ファイルが開かれたことを確認する
MsgBox read_data & "が開かれました"
MsgBox read_data & "を閉じます"
'ファイルを閉じる
Windows(read_data).Close
End Sub
※テキストファイルを開いたり閉じたりする作業をもう少し詳しく知りたい方は、以下の記事を参考にしてみてください。
VBAコードのポイント解説
今回は以下の画像のようにA5セル(cells(5,1))にワイルドカードを使ってこれから開かれるファイル名が記載されています。
そのためまずは
read_data = Cells(5, 1)
としてこれから開くファイル名を宣言しています。
この【read_data】とA2セルに記載されている【read_fol】でファイルのフルパスを表現し、【Workbooks.OpenText】をつかってテキストファイルを開いています。
おそらくこの記事を読んでいる人はここまでは自分でできていたのではないでしょうか?
◆この記事の最重要ポイント
ワイルドカードで開いたファイルを閉じる際に必要なのは、以下の一文です。
この文を【Workbooks.OpenText】をつかってテキストファイルを開いた直後に記入しておきます。
今回の場合はこれ⇒【read_data = ActiveWorkbook.Name】
※私の場合はワイルドカードで使用した時の変数を流用しています。
この一文を挟んでおくことで、ワイルドカードを使って開いたファイルの正式名称をマクロに記憶させることができます。
正式名称さえ記憶できていれば、あとは冒頭に説明したように、
【Windows(ファイル名).Close】
でファイルを閉じることが出来ます。
以上が今回のポイント説明になります。
VBAコードの実行結果
スキル解説は以上で終わりですが、念のため今回のコードの実行結果も確認しておきましょう。
今回私のこのVBAコードを
【wild_card.xlsm】というファイルに記載していますのでここが出発点です。
開発タブ⇒マクロ⇒先ほど記入した【close_wild_card】を選択し、
『いざ、実行!!!』
すると以下のように新たにファイル【file_Ver3_abcde.txt】が開かれ、そのことを伝えるメッセージボックスが開かれています。
⇒OKボタンで閉じます。
すると次は以下のように閉じる直前のメッセージボックスが出てきます。
⇒ここもOKで閉じます。
(ここの記述はなくても良かったかな・・・。)
すると以下のように先ほどまで開かれていた【file_Ver3_abcde.txt】が閉じられ、最初に開いていた【close_wild_card】ファイルに戻っています。
というわけでエクセルシート上にも、VBAコード上にも、どこにも
【file_Ver3_abcde.txt】
という文字がなかったにも関わらず、ワイルドカードを用いてこのファイルを開き、そして閉じるという一連の流れが実行できました。
おわりに
というわけでワイルドカードを使ってファイルを開く⇒そのファイルを閉じる、という一連の流れを行ってみました。
ワイルドカードは便利な一方、混乱の種となる得るものですので、この記事で紹介したようなスキルを駆使して、バグに遭遇しないように注意しましょう。
このように、このブログでは、エクセル(VBA)を中心に、様々な業務効率化スキルを紹介しています。
■業務の生産性を上げたい。
■早く帰って子供と遊びたい。
こんな人はぜひ他の記事も読んでみてください。
また、VBAを使ってこんなことがしたいんだけど、やり方がわからない、という悩みを抱えているかたは、お気軽にコメント欄から質問してください。
私にわかる範囲であればご協力いたしますので。(もちろん無料です。)
最後に・・・
この記事が役に立ったという方はぜひ応援よろしくお願いします。
↓ 応援ボタン
Twitterもやっていますので、興味があれば覗いてみてください。
それではまた!!
コメント