質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2206閲覧

GetOpenFilenameを使用して、ファイルが存在する場合、【開く・処理・閉じる】を繰り返したい

Dis

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/03/06 15:41

編集2020/03/06 15:43

Sub Sample7()
Dim filePath As Variant
filePath = Application.GetOpenFilename _
(FileFilter:="Excelブック(.xlsx;.xlsm),*.xlsx; *.xlsm; *.xls", MultiSelect:=True)

Dim trgt As Variant Set trgt = Workbooks("a").Sheets("b") Dim wb As Workbook

If IsArray(filePath) Then
For Each wb In filePath
If Dir(wb) = "123" Then
Set wb = Workbooks.Open("123")
wb.Sheets(2).Range("J19:Q20") = trgt.Range("D55:K56")
wb.Sheets(2).Range("J21:Q22") = trgt.Range("D58:K59")
wb.Close
End If

If Dir(wb) = "456" Then Set wb = Workbooks.Open("456") wb.Sheets(2).Range("J19:Q21") = trgt.Range("D60:K62") wb.Close End If

.
.
.
.
If Dir(wb) = "789" Then
Set wb = Workbooks.Open("789")
wb.Sheets(2).Range("J19:Q21") = trgt.Range("D63:K65")
wb.Close
End If

Next
End If

どうしてもわからないのでご教授ください。
GetOpenFilenameで複数のファイル選択をし、ファイルを全て開いて、処理する
ではなく
複数のファイル選択後、一つファイルを開き処理し閉じる、一つファイルを開き処理し閉じる、としたいです。
また、Ifステートメントを使用して、ファイルが存在しない場合は処理を無視するとしたいです。
GetOpenFilenameでパスを取得しているので、そこを活用するのかと思いますが、どうしてもわかりません。
どなたかご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/03/07 00:45

コードは「コードの挿入」で記入しましょう。
guest

回答2

0

ベストアンサー

ExcelVBA

1Option Explicit 2 3Sub Sample7() 4 Dim filePath As Variant 5 Dim v As Variant 6 Dim trgt As Worksheet 7 Dim wb As Workbook 8 9 filePath = Application.GetOpenFilename _ 10 (FileFilter:="Excelブック(*.xlsx;*.xlsm),*.xlsx; *.xlsm; *.xls", MultiSelect:=True) 11 If IsArray(filePath) Then Exit Sub 12 13 Set trgt = Workbooks("a").Sheets("b") 14 15 For Each v In filePath 16 Set wb = Nothing 17 On Error Resume Next 18 Set wb = Workbooks.Open(v) 19 On Error GoTo 0 20 21 If Not wb Is Nothing Then 22 Select Case True 23 Case wb.Name Like "123.*" 24 wb.Sheets(2).Range("J19:Q20") = trgt.Range("D55:K56") 25 wb.Sheets(2).Range("J21:Q22") = trgt.Range("D58:K59") 26 Case wb.Name Like "456.*" 27 wb.Sheets(2).Range("J19:Q21") = trgt.Range("D60:K62") 28 Case wb.Name Like "789.*" 29 wb.Sheets(2).Range("J19:Q21") = trgt.Range("D63:K65") 30 End Select 31 wb.Close True 32 End If 33 Next 34End Sub

動かしてないけど、イメージ的にはこんな感じですかね?
Select Case の時のLike演算子の使い方があっているかうろ覚えなので自信ないです。
選択しているので「存在しない」というこは無いと思いますが、
「開けない」ということがあると思うので、エラー回避を一応入れてます。
ファイルのベースネームを取得する(または抜き取る)とこはもうちょっとちゃんとやってもいいかなと
思います。その辺はご自身の判断でお願いします。
参考になれば。

投稿2020/03/06 23:12

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Dis

2020/03/07 16:38

非常に参考になりました。 特に以下の文が非常に参考になりました!!! If Not wb Is Nothing Then Select Case True Case wb.Name~ 本当にありがとうございました。
guest

0

GetOpenFilenameで選択した、エクセルブックそれぞれに対して処理を行いたいという話であれば、以下のURLのコードが参考になりませんか。

https://32877.xii.jp/view/263
選択した複数のファイルに同じ処理をするVBA例

ただしこの例では、選択した各ワークブックに対し同じ処理をしたいのではなく、ワークブックのファイル名によって処理が微妙に違うみたいで若干工夫が要ると思います。

投稿2020/03/06 18:15

geinin

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問