
下記のマクロは先日教えて頂いたマクロで、
マクロを実行すると、ワイルドカードで指定したブックを開く事が出来ます。
ファイル名
①22069167-1_00-確認申請受付【花子】(提出用).xlsx
の場合は上手くマクロが実行されてブックを開く事が出来ますが。
②210610132-1_東二条7丁目住宅新築工事【太郎】(提出用) .xlsx
の場合は"コピー元ブックが見つかりません"を表示されてブックを開く事が出来ません。
下記のコードを変更し、①の場合も②の場合も両方ブックを開く事が出来る方法があれば教えてください。
よろしくお願いいたします。
現状のマクロ
Sub 提出シートを開く()
Dim folderPath As String
Dim fileName As String
folderPath = ThisWorkbook.Path & "\"
fileName = Dir(folderPath & "*(提出用).xlsx")
Do While fileName <> ""
Workbooks.Open (folderPath & fileName)
fileName = Dir()
Loop
End Sub
Sub 提出シートコピー範囲()
Dim ws As Worksheet
If Workbooks.Count > 1 Then
Set Wb2 = Workbooks(2) '別ブック
On Error Resume Next
Set ws = Wb2.Worksheets("提出シート")
If Err.Number <> 0 Then
MsgBox "コピー元ブックの提出シートが見つかりません"
On Error GoTo 0
Wb2.Close False
End
End If
'セルの値を取得する
ws.Range("B1:H47").Copy
Else
MsgBox "コピー元ブックが見つかりません": End
End If
End Sub
以上となります。
よろしくお願いいたします。

No.7ベストアンサー
- 回答日時:
No5です。
>出来れば、作業フォルダ内にはマクロ設定ブックと〇〇(提出用).xlsxの2つしかExcelファイルはありません。
>ターゲットブックしかないので、拡張子で判断し、(提出用)は不要になればと思っております。
そういうことでしたら、Sub 提出シートを開く()を
以下のように変えれば良いかと。(動作確認はしておりません)
Sub 提出シートを開く()
Dim folderPath As String
Dim fileName As String
folderPath = ThisWorkbook.Path & "\"
fileName = Dir(folderPath & "*.xlsx")
If fileName <> "" Then
Workbooks.Open (folderPath & fileName)
End If
End Sub
No.6
- 回答日時:
>.xlsxの2つのExcelファイルしかありません。
このロジックは使いまわすのではないかと思うのですが・・・違ったかな?
いずれにいたしましても 今回の場合(不具合の種をまきたくないので)
Call 提出シートを開く で呼ぶのをやめて
Sub 提出シートコピー範囲()内にまとめるべきです
Sub 提出シートコピー範囲()
Dim folderPath As String
Dim fileName As String
Dim ws As Worksheet
folderPath = ThisWorkbook.Path & "\"
'作業フォルダ内にはマクロを設定しているコピー先のブックとコピー元の
'○〇(提出用).xlsxの 2つ のExcelファイルしかありません。
fileName = Dir(folderPath & "*.xlsx")
If fileName <> "" Then
'別ブック ○〇(提出用).xlsx
Set Wb2 = Workbooks.Open(folderPath & fileName)
On Error Resume Next
Set ws = Wb2.Worksheets("提出シート")
If Err.Number <> 0 Then
MsgBox "コピー元ブックの提出シートが見つかりません"
On Error GoTo 0
Wb2.Close False
End
End If
'セルの値を取得する
ws.Range("B1:H47").Copy
Else
MsgBox "コピー元ブックが見つかりません": End
End If
End Sub
No.5
- 回答日時:
No2です。
>私としては、今回のケースを含めて、様々なブック名に対応できるようにしたいと思っております。
様々なブック名とは、具体的にどのようなケースでしょうか。
①任意の文字+(提出用).xlsx
②任意の文字+(提出用) .xlsx
(提出用)の後に半角のスペースが1つある場合
③任意の文字+(提出用)□□□.xlsx
(提出用)の後に半角のスペースが2つ以上ある場合(□は半角のスペースとします)
④任意の文字+(提出用) .xlsx
(提出用)の後に全角のスペースが1つある場合
⑤任意の文字+(提出用) .xlsx
(提出用)の後に全角のスペースが2つ以上ある場合
⑥任意の文字+(提出用) .xlsx
(提出用)の後に全角と半角が混在しスペースが2つ以上ある場合
⑦任意の文字+(提出用)XYZ.xlsx
(提出用)のあとに任意の文字(例ではXYZ)があるケース
⑧任意の文字+(提出用).xlsx
(提出用)の括弧である()が全角の場合
⑨任意の文字+(提出用).xls
拡張子がxlsx以外のブックの場合(xlsm)も含む
①②を正常ケースとして処理したいということは理解できましたが、
③から⑨のケースも正常ケースとして処理されたいのでしょうか?
No.4
- 回答日時:
#3です
名前の付いたExcelが送られて来て 半角スペースが入っている事が避けられないので(*(提出用) .xlsxファイル名で不具合は発生しない)
VBA処理時に 拡張子前の半角スペースを許容したい(今回の文字列)場合は ワイルドカードを指定するのは危険なので 条件を増やすやり方でどうでしょう
例
Sub 提出シートを開く()
Dim folderPath As String
Dim fileName As String
folderPath = ThisWorkbook.Path & "\"
fileName = Dir(folderPath & "*(提出用).xlsx")
If fileName = "" Then fileName = Dir(folderPath & "*(提出用) .xlsx")
Do While fileName <> ""
Workbooks.Open (folderPath & fileName)
fileName = Dir()
Loop
End Sub
混在する場合は*(提出用).xlsxのみが処理されます
十分に条件を絞れており Workbooks(2)しか使わないなら
Do While を使わず If文で処理した方が良いと思います
Workbooks.Open (folderPath & fileName) した方が良いと思います
そもそも(絶対と考えてはいけないけれど)
folderPathには自ブックと絶対にターゲットブックしかないという事であれば Do While と 拡張子で判断できるので(提出用)は不要になります
だいぶ余計な事かも知れませんが・・
#2様へのお礼には 語弊があるように思います
内容は#3で回答した内容と同様に
問題を危惧して ご質問の通り進めて良いかを問いかけていると思いますよ
No.3
- 回答日時:
こんにちは
原因は
うまくいかないブックには .xlsxの前に半角スペースがあるからですが
これをVBA側で対応する方法は色々とあります
しかしながら
貴方の処理を期待するブックが複数存在する場合
Do While fileName <> ""
VBA側で条件を広げることは思わぬ不具合を発生させる可能性を考えてください
限定文字 (提出用).xlsx に不要な文字が入らない対策をするべきだと思います
ブック抽出条件を広げるなら
#1様の方法や 単純に
fileName = Dir(folderPath & "*(提出用)*.xlsx")
とすればよいですが(知恵でBA)
繰り返し問題を発生させないために
出来ればよいではなく 本質を捉えて 判断してください
No.2
- 回答日時:
210610132-1_東二条7丁目住宅新築工事【太郎】(提出用) .xlsx
このファイル名は、(提出用)の後に半角の空白が1つあります。
半角の空白を□で表示すると
210610132-1_東二条7丁目住宅新築工事【太郎】(提出用)□.xlsx
のようになっています。
従って、fileName = Dir(folderPath & "*(提出用).xlsx")の行にマッチせず、
このファイルがオープンされません。ファイル名を
210610132-1_東二条7丁目住宅新築工事【太郎】(提出用)□.xlsx
から
210610132-1_東二条7丁目住宅新築工事【太郎】(提出用).xlsx
に変更すれば(半角の空白を削除すれば)、期待した動作になるはずです。
それとも、ファイル名はこのままの状態で、このファイルを開くようにしたいということでしょうか。
No.1
- 回答日時:
Sub 提出シートを開く()
Dim folderPath As String
Dim fileName As String
folderPath = ThisWorkbook.Path & "\"
fileName = Dir(folderPath & "*(提出用).xlsx")
Do While fileName <> ""
Workbooks.Open (folderPath & fileName)
fileName = Dir()
Loop
End Sub
を
Sub 提出シートを開く()
Dim folderPath As String
Dim fileName As String
folderPath = ThisWorkbook.Path & "\"
fileName = Dir(folderPath & "*.*")
Do While fileName <> ""
if instr(fileName,"(提出用).xlsx")>0 then
Workbooks.Open (folderPath & fileName)
end if
fileName = Dir()
Loop
End Sub
では
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelのマクロについて教えてください。 2 2024/06/14 16:38
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/18 09:20
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/13 13:39
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) Excelのマクロについて教えてください。 2 2024/06/13 10:35
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBAで別ブックのシートを指定し...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
Excel2007VBAファイルの表示に...
-
VBで既存エクセルシートを新規...
-
別ブックの列同士の値が一致し...
-
【ExcelVBA】zip圧縮されたCSV...
-
エクセルVBA
-
VBA同じシートの別ブックに転記...
-
複数シート名とブック名が一致...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
現在開いているbook全てを対象...
-
VBA コードを実行すると画面が...
-
Excelファイルを開くとき、読み...
-
VBAでざっくりとした質問になり...
-
フォルダ内のExcelファイルを全...
-
vbaで他のブックに転記したい。...
-
VBS Bookを閉じるコード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBA コードを実行すると画面が...
-
VBAで別のブックにシートをコピ...
-
VBAで別ブックのシートを指定し...
-
【Excel VBA】書き込み先ブック...
-
Excelマクロ 該当する値の行番...
-
【ExcelVBA】zip圧縮されたCSV...
-
[Excel]ADODBでNull変換されて...
-
【ExcelVBA】インデックスが有...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
vbaで他のブックに転記したい。...
-
エクセルマクロで、他ブックか...
-
vbaでvbaProjectのパスワード解...
-
VBA 実行時エラー 2147024893
-
【マクロ】違うフォルダにある...
おすすめ情報
№2さん
大変失礼いたしました。
№3さんのご指摘で、誤ったお礼をしておりました、
私としては、今回のケースを含めて、様々なブック名に対応できるようにしたいと思っております。
よろしくお願いいたします。
色々と考えて頂きまして、ありがとうございます。
作業フォルダ内にはマクロを設定しているコピー先のブックとコピー元の
○〇(提出用).xlsxの2つのExcelファイルしかありません。
提案していただけた
folderPathには自ブックと絶対にターゲットブックしかないという事であれば Do While と 拡張子で判断できるので(提出用)は不要になります
を使用した、コードを教えていただけますか。
申し訳ありません。
よろしくお願いいたします。
ご連絡ありがとうございます。
現状では(提出用)をワイルドカードにて判断しておりますが、
出来れば、作業フォルダ内にはマクロ設定ブックと〇〇(提出用).xlsxの2つしかExcelファイルはありません。
ターゲットブックしかないので、拡張子で判断し、(提出用)は不要になればと思っております。
よろしくお願いいたします。