- ベストアンサー
EXCEL VBAのファイルオープンについて
1列のセルそれぞれに同フォルダのファイル名が入力されていて(ファイル数は変化する)それを、一度に開くか、もしくは1つずつ開いていくかの構文で悩んでいます。ファイル数が特定されていないので、Do Untilでカウンタ変数をたててしているのですが、1つ目のファイルは開くのですが、後のファイルがエラーになってしまいます。 説明がうまくできていないかもしれませんが、もしわかりましたら、是非教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>1つ目のファイルは開くのですが、後のファイルがエラーになってしまいます。 >・・・もしわかりましたら、是非教えてください。 エラー原因なら・・・内容がわからないので、分からないとしかいいようがありませんが・・・ 質問にあるような状態で、不特定の複数Bookを開くようにコードを書いてみました。参考にして下さい。 下のコードは、A1にフォルダ名がセットされていて、B列にB1から不特定数(>0)のファイル名が連続にセットされている例です。ファイルが存在しない場合などのエラー処理は省略しています Sub xlsFilesOpen() Dim myFolder As String '共通のフォルダ名 Dim rw As Long '行カウンタ Dim ThisBookname As String 'このブック名 ThisBookname = ThisWorkbook.Name myFolder = Range("A1") If Right(myFolder, 1) <> "\" Then myFolder = myFolder & "\" With Range("B1") 'ファイル名が登録されていれば開く While .Offset(rw, 0) <> "" 'Bookを開く Workbooks.Open myFolder & .Offset(rw, 0) '次のセル(B列の次の行になる) rw = rw + 1 Wend End With '最初のBookを表示しているだけです Workbooks(ThisBookname).Activate End Sub
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
>ここでちょっと質問なのですが、 >Ifに対してもEnd Ifがなくてなぜエラーがでないのでしょうか? If~Then~Else ステートメントの書き方については、VBAのヘルプを見ると、 『条件が真 (True) の場合のステートメントの実行 条件が真 (True) の場合に 1 つのステートメントだけを実行するときは、 If...Then...Else ステートメントの1行の構文を使います。 次の例は、キーワードElseを省略した1行の構文を示しています。 Sub FixDate() myDate = #95/2/13# If myDate < Now Then myDate = Now End Sub 』 とあります。 条件が成立した時、1つのことだけを行う場合にこう書けます。 X = a: If y < 0 Then x = b のような使い方をして行が長くならないようにしています。癖かもしれません。 >while~Wend 本で探せませんでした。 >これからも活用できそうです。 while~Wendは少し古い書き方かもしれません。 Do~Loopでも当然できます。こちらをマスターしたほうがいいかもしれません。 個人的にはwhile~Wendの方がなれているのでこちらを使うことが多いです。 Do~Loop についても、Help等でみて下さい。 Do~Loop例:B1~B3に何か入力しておいて実行してみて下さい。最初の回答と同じような意味合いです。 Sub DoLoopTest() Dim rw As Long With Range("B1") Do Until .Offset(rw, 0) = "" MsgBox "セル" & .Offset(rw, 0).Address & "の値は" & .Offset(rw, 0) rw = rw + 1 Loop End With MsgBox "おしまい" End Sub
お礼
丁寧な回答ありがとうございます。 仕事で初めてVBAをやり出し、聞く人もいなく本だけを見て作っているので、 これが本当に正しいのか?など不安になる事が多く、今回質問をして、 回答頂き、とても嬉しく思っています。
お礼
できました!! while~Wend 本で探せませんでした。 これからも活用できそうです。 ありがとうございました。ほんとに勉強になりました。 ここでちょっと質問なのですが、Ifに対してもEnd Ifがなくてなぜエラーがでないのでしょうか?