【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。IMMRです。
VBAでは、ブック内のセルに記載された数値や文字に対する処理だけではなくて、
他のファイル(テキストファイルやブックファイル)を読み込んで処理を行うことも出来ます。
ファイルを読み込むときは、もちろんファイル名を記述するのですが、
直接ファイル名は記述しないほうがよいのです。
なぜなのか。という理由そして、対処法について説明していきます。
ファイルと言っても種類は多数あります。テキストファイルやブックファイル等です。
ここでは、テキストファイルを例とします。
テキストファイルを指定するサンプルコードは以下になります。
サンプルコード(テキストファイルを指定する)
Dim mybuf As String
Open "C:\VBA\LogData\AA0001.txt" For Input As #1
Do Until EOF(1)
Line Input #1, mybuf
Loop
Close #1
Open "C:\VBA\LogData\AA0001.txt" For Input As #1
・読み込みたいファイルの名前を記載する
Do Until EOF(1)
・読み込んだテキストファイルを最初の行から最後の行まで読み込む
Line Input #1, mybuf
・1行ずつ、mybufにセットする
Loop
・読み込んだテキストファイルを最初の行から最後の行まで同じ処理を行う
Close #1
・読み込んだテキストファイルをクローズする
といった形になります。
上記、サンプルコードでも問題なく処理を行うことが出来ます。
しかし、この場合だと「Open "C:\VBA\LogData\AA0001.txt" For Input As #1」となっているため、
ファイル名が固定になります。
そのため、毎回同じファイル名で処理を行うなら問題ないのですが
処理を行うたびに違うファイルを使用する場合はファイル名直さなくてはいけません。
毎回毎回処理を行うたびにコード内の修正をすると手間がかかったり、下手をするとファイル名を記述中に
処理文をいじってしまう恐れも出てきます。
そういうときは、ダイアログボックスを使用するのが一つの方法です。
ダイアログボックスを処理開始前に表示することによって、処理対象となるファイルを選択する方法です。
ダイアログより処理に必要なファイルを選択する方法は以下の通りです。
ダイアログを表示するコード
Dim Filename As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\VBA\LogData"
If .Show = 0 Then Exit Sub
Filename = .SelectedItems(1)
End With
Application.FileDialog(msoFileDialogFilePicker)
・ファイルを選択するダイアログを表示します。
.InitialFileName = "C:\VBA\LogData"
・ダイアログを表示するパスを記入します。ここでは、「C:\VBA\LogData」を対象とします。 ※下記のような感じてす。
図1 指定したフォルダ
If .Show = 0 Then Exit Sub
・何も選択されなかったら処理をやめます。
Filename = .SelectedItems(1)
・ダイアログボックスで選択されたファイルを変数(Filename)に格納します。
一度、上記のコードで実行してダイアログボックスが表示されるか確認します。
図2 ダイアログボックスの表示
ダイアログボックスが表示され、ファイルが選択できるようになっています。
当然ですが現在のコードでは、ダイアログを表示しファイルを選択。
その後に変数(Filename)に格納するだけなので、ファイルを選択したら処理が終わってしまいます。
そのため、本当に選択したファイルが変数(Filename)に格納されているかわかりません。
そのため、ここではコードにメッセージボックス追加します。
これにより、で変数(Filename)に洗濯したファイルが格納されているか確認出来ます。
ダイアログを表示するコード2(メッセージボックスを追加)
Dim Filename As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\VBA\LogData"
If .Show = 0 Then Exit Sub
Filename = .SelectedItems(1)
End With
MsgBox Filename
上記で表示した「ダイアログを表示するコード」の最後に、変数(Filename)に
格納された値を確認するために「MsgBox Filename」を追加しました。
再度、実行します。
図3 ダイアログボックスの表示
ダイアログボックスでファイルを選択します。
ここでは、「CC0001」を選択します。
図4 ダイアログボックスでファイルを選択
↓
図5 メッセージボックスで選択したファイル名の表示
選択されたファイル名が表示されました。
これでダイアログで選択したファイル名が変数(Filename)に格納させる確認をすることが出来ました。
上記の方法より、ダイアログより処理に必要なファイルを選択するコードに変更していきます。
まず、テキストファイル名を直接記述したコードの部分(赤枠)を変更します。
図6 開くテキストファイル名を直接記述したコード
そして、ダイアログボックスを表示するコードを追加します。
追加するのは紫枠です。そして、ファイル名を取得した変数「Filename」を先ほどの開くテキストファイル名を直接記述したコードの
赤枠に来るようにします。これにより、ファイルを選択して、
今までと同じ処理をダイアログで選択したファイルで行うことが出来ます。
図7 ダイアログより開くテキストファイル名を選択するコード
最後に変更したサンプルコードを記載します。
Sub Test23()
Dim Filename As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "C:\VBA\LogData"
If .Show = 0 Then Exit Sub
Filename = .SelectedItems(1)
End With
Open Filename For Input As #1
Do Until EOF(1)
Line Input #1, mybuf
Loop
Close #1
End Sub
※.InitialFileName = "C:\VBA\LogData"の箇所はダイアログを表示させるパスなので各自、変更が必要です。
これによって、ダイアログより処理に必要なファイルを選択することができるようになりました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート