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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

440閲覧

最下層のエクセルを開いて処理するマクロ

macro123

総合スコア1

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2022/03/02 05:49

編集2022/03/02 08:00

Excelのマクロについて質問です。
下記のなマクロを組みました。これ自体は正常に動いています。
今後、汎用性を持たせるために
パス部分の A のフォルダ名が変更されても B.xlsxが開くようにしたがです。
A以外の部分は固定になります。
ワイルドカードなどでできるかと思ったのですが
うまくマクロが実行されず、、。
どのように変えればいいか、ご教示いただきたいです。

CopyPaste()

Dim FilePath
FilePath = ThisWorkbook.Path & "¥Results¥A¥B.xlsx"

Workbooks.Open FilePath

Workbooks ("B.xlsx").Sheets("Summary").Range ("A2:A583").Copy
Workbooks ("macro.xlsm").Sheets("Sheet 1").Range("A1").PasteSpecial xIPasteValues

Workbooks("B.xlsx").Sheets("Summary").Range("J2:J583").Copy
Workbooks ("macro.xlsm").Sheets("Sheet 1").Range("B1").PasteSpecial xIPasteValues

Workbooks("B.xlsx").Close SaveChanges:=False

End Sub

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

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

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

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

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

tatsu99

2022/03/02 07:49

提示されたマクロはコンパイルエラーになります。そもそも、動きません。 CopyPaste() Dim FilePath = ThisWorkbook.Path & "¥Results¥A¥B.xlsx" は Sub CopyPaste() Dim FilePath FilePath = ThisWorkbook.path & "\Results\A\B.xlsx" ではないでしょうか。
macro123

2022/03/02 07:58

ご質問ありがとうございます。 私の環境では¥で正常に動いております。 WindowsやLinux等の違いで その部分は変えないといけないと思います。
macro123

2022/03/02 07:59

すみません、最初の部分は記載ミスです。 記載いただいた通り Dim FilePath FilePath = ThisWorkbook〜 が正しい内容になります。
guest

回答1

0

ベストアンサー

FilePath = ThisWorkbook.Path & "¥Results¥*¥B.xlsx"
のワイルドカードを展開するよるような処理は自前でつくるしかないです。
プロシージャ:ExPathを作成し、
FilePath = ExPath(ThisWorkbook.path & "\Results", "B.xlsx")
で呼び出してください。
なお、
ThisWorkbook.path & "\Results" 下にフォルダが1件もない場合
ThisWorkbook.path & "\Results" 下にフォルダがあっても、B.xlsxがない場合
は、FilePathは""になりますのでご注意ください。
ThisWorkbook.path & "\Results" 下にフォルダ複数あって、いずれのフォルダにもB.xlsxがある場合は、
最初にみつかったB.xlsxのパスがかえります。
フォルダ:Resultsがない場合は、エラーになります。

VBA

1Sub CopyPaste() 2 3Dim FilePath 4 5'FilePath = ThisWorkbook.path \A\B.xlsx" 6FilePath = ExPath(ThisWorkbook.path & "\Results", "B.xlsx") 7 8Workbooks.Open FilePath 9'以降省略 10 11End Sub 12 13Public Function ExPath(ByVal pair_path As String, ByVal book_name) As String 14 ExPath = "" 15 Dim FSO As Object 16 Set FSO = CreateObject("Scripting.FileSystemObject") 17 Dim fols As folders 18 Dim fol As Folder 19 Dim fname As String 20 Set fols = FSO.GetFolder(pair_path).SubFolders 21 For Each fol In fols 22 fname = pair_path & "\" & fol.Name & "\" & book_name 23 If FSO.FileExists(fname) = True Then 24 ExPath = fname 25 Exit Function 26 End If 27 Next 28End Function 29

投稿2022/03/02 08:56

編集2022/03/02 11:09
tatsu99

総合スコア5438

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

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

macro123

2022/03/03 00:18

大変参考になりました。 この度はありがとうござます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問