• 締切済み

サブフォルダからエクセルブックをとりだすマクロ

特定のフォルダからエクセルブックのみを抽出し別のフォルダに集める(コピーする)マクロを作りたいと思い、以下のように作成しました。 (AAAフォルダ⇒移動元、BBBフォルダ⇒移動先) ただしこれだと、AAAフォルダ内にあるサブフォルダからは拾ってこれないようです。 AAA内の全てのサブフォルダからエクセルブックを拾ってくるにはどう修正すればよろしいでしょうか。 ――――――――――― Sub sample1() Dim FSO As Object, fld As Variant, bk As Variant Const Fld1 As String = "C:\AAA" Const Fld2 As String = "C:\BBB\" Const tgt As String = "*.xlsx" Set FSO = CreateObject("Scripting.FileSystemObject") For Each fld In FSO.GetFolder(Fld1).SubFolders For Each bk In fld.Files If bk.Name Like tgt Then bk.Copy Fld2 End If Next bk Next fld End Sub

みんなの回答

回答No.5

こんにちは。No.2補足欄への返信です。 > 「AAAフォルダ > 配下のサブフォルダ > 配下のサブフォルダ まで含め」てエクセルブックを集めるにはどうしたらよいかという意図の質問でした。 それはそれでいいのですが、 何がうまく行っていて、何がうまく行っていないのか、 という点は、まだ、こちらに向けて説明されていませんよね。 一般論として、扱う階層を深くすればするほど、 「フォルダ名以外は全く同じ名前のファイル」を扱う可能性が増えますから、 例えば「同じ名前のブックが無いことは担保される」とか、そうじゃないとか、 そういった条件次第で、こちらが書く内容は変わってくる、ということは、 No.2で既に説明したつもりです。 この点にレスがない、ということは、  専ら階層を深める事さえ出来ればよし  同名ファイルの上書きについては無視してよい、 という理解でいます。 ということで、こちらもNo.2補足を前提に一旦リセットした形でお応えします。 □モジュールの宣言部を使うことになりますので、 試す時には、紛れが無いよう、新しく標準モジュールを作成してから モジュールの先頭にスクリプトを貼り付けるなど注意してみて下さい。 □実行するプロシージャは、Sub ReW9113611 です。 □上述の通り、今回は、 「ひとつのフォルダに同名のファイルをコピーすると上書きされてしまう」 ことへの対策はしていません。  Scripting.File.Copy メソッドの引数には、 元質問でご提示のようにフォルダパスだけを指定する方法と、 No.2で提示したように、フルパス(フルネーム)を指定する方法と、 が、ありますので、必要に応じてそちらで応用、使い分けてください。 ★Scriptingへの参照設定『Microsoft Scripting Runtime』 を行ってから開発にあたる方が、何かと易しいでしょうから、 参照設定した場合のスクリプト(宣言)を★コメントとして併記しておきます。 開発時には参照設定、配布時には参照設定に依存しない書き方、 という風に分けた方が、開発の速度が高まると思います。 ●指定(変更)が必要なパラメータについては●マークにて、、、。 再帰処理を扱う場合は、通常、深度の上限を設けることが多いです。 というより、最大の階層数を決め打ちにしたものの方が、 扱い易いですし、他者にも受け容れられ易いでしょう。 N_SUBDIR_DEPTH_LMT ... 仮に、2つ下の階層まで、としていますが、 大き過ぎない数字で、十分な数字を指定するようにしてください。 また、もしも、ここに概ね 3 よりも大きい数字を指定するような場合は、 フォルダデザインまたはマクロの設計を見直した方が好いように思います。 やや無理し過ぎ、というか、誰が書いてもトラブル回避が難しくなります。 簡易的に安全策を取るなら、ループ内の何処かに   DoEvents など、書き加えておいて、 ユーザー操作による処理中断に備えておけば、多少は安心です。 ▼フォルダの階層構造を視覚的に確認できるように、 イミディエイトウィンドウへの出力処理を▼コメントとして併記しています。 確認したい時だけ、コメントを外して実行してみてください。 ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ' ' 以下 〓〓 モジュール宣言部(先頭)〓〓 Option Explicit Private oFSO As Object 'Private oFSO As Scripting.FileSystemObject ' ★参照設定(Scripting Microsoft Scripting Runtime) Private Const S_DIR_SRC As String = "C:\AAA" ' ●要指定 コピー元フォルダパス Private Const S_DIR_DEST As String = "C:\BBB\" ' ●要指定 コピー先フォルダパス Private Const S_EXTE As String = "*.xlsx" ' ●要指定 *拡張子 Private Const N_SUBDIR_DEPTH_LMT As Long = 2 ' ●要指定 サブフォルダの階層深度 上限を指定 ' ' 以上 〓〓 モジュール宣言部(先頭)〓〓 ' ' /// メイン(実行)プロシージャ Sub ReW9113611()   Set oFSO = CreateObject("Scripting.FileSystemObject") '  Set oFSO = New Scripting.FileSystemObject ' ★   Call SubW9113611(oFSO.GetFolder(S_DIR_SRC)) End Sub ' ' /// サブプロシージャ (再帰呼び出しアリ) Sub SubW9113611(oDir As Object, Optional ByVal nDep As Long) Dim oSubDir As Object, oFile As Object 'Sub SubW9113611(oDir As Scripting.Folder, Optional ByVal nDep As Long) ' ★ 'Dim oSubDir As Scripting.Folder, oFile As Scripting.File ' ★   'Debug.Print String(nDep, vbTab) & ">\"; oDir.Name, ' ▼イミディエイトウィンドウで階層確認   'Debug.Print "f:"; oDir.Files.Count, "sd:"; oDir.SubFolders.Count ' ▼ ' ' ファイルをコピー   For Each oFile In oDir.Files     If oFile.Name Like S_EXTE Then   'Debug.Print String(nDep + 1, vbTab) & oFile.Name ' ▼       oFile.Copy S_DIR_DEST     End If   Next oFile ' ' サブフォルダの階層深度 上限 を超える場合は処理を抜ける   If nDep >= N_SUBDIR_DEPTH_LMT Then Exit Sub ' ' サブフォルダ毎に再帰呼出   For Each oSubDir In oDir.SubFolders     Call SubW9113611(oSubDir, nDep + 1)   Next oSubDir End Sub ' ' 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.4

こんばんは No1です。 すみません、標準モジュールの 先頭、Sub sample2_1()の前に Dim FSO as Object を入れておいて下さい。 コピーし忘れてました。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは No1です。 Fld1とFld2の指定は変更しておいて下さい。

回答No.2

こんにちは。 > ただしこれだと、AAAフォルダ内にあるサブフォルダからは拾ってこれないようです。 「うまく行かない」といった状況の説明は、 もう少し具体的、限定的にした方が好いです。 AAAフォルダ配下のすべてのサブフォルダからすべてのExcelブック(.*xlsx)を BBBフォルダへコピーする、、、ということまでは理解出来ますが、結果として、 例えば、 「ひとつもコピーされない」 とか 「ひとつのサブフォルダにある分だけがコピーされる」 とか、、、。 とりあえず、後者の状況なのだとして、 よく見かけるフォルダデザインとして、 日付や部署名などといった属性をサブフォルダ名だけで表現しているような例、   (サブ)ファルダ内のブック名はサブフォルダを跨いで共通になっていて、   (サブ)フォルダの名前でしか、ファイル(ブック)パスに相違がない というような場合を想定してみました。 > bk.Copy Fld2 上の条件で、この記述を実行した場合は、 BBBフォルダへコピーはすべてのブックに対して実行されるものの、 BBBフォルダ内での名前が同一のものはすべて上書きになってしまうので、 結果的に「ひとつのサブフォルダにある分だけがコピーされる」ことになります。  bk.Copy Fld2 & fld.Name & "_" & bk.Name のように、 「コピー元サブフォルダの名前をブック名に付け加える」 といった対策で、この状況であれば、 > AAA内の全てのサブフォルダからエクセルブックを拾ってくるにはどう修正すればよろしいでしょうか。 への答にはなっているかと。 「ひとつもコピーされない」 状況については、OS側で設定される書き込み権限の問題を 一度は確認した方が宜しいかと。 この場合は特に、各バージョン情報が無いと、アドバイスは難しいです。 尚、 AAAフォルダ > 配下のサブフォルダ > 配下のサブフォルダ まで含めたい、 というお話には読めませんでしたので、今回は、 その点についてお応えしませんが、 もし、そういうことでしたら、再帰処理するのが一般的です。 差し当たり以上です。 何か不足があれば補足してください。

kkkkkkkk87
質問者

補足

丁寧なご回答をいただいたところ大変申し訳ありませんが、質問文に間違いがありました。 「AAAフォルダ > 配下のサブフォルダ > 配下のサブフォルダ まで含め」てエクセルブックを集めるにはどうしたらよいかという意図の質問でした。 失礼いたしました。 再帰処理というものがあるんですね。 頑張って理解に努めたいと思います。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 今のコードでも"C:\AAA"の1階層分のサブフォルダー内のファイルはコピー出来てる と思いますが、"C:\AAA"内のファイルと、全ての階層のサブフォルダー内のファイル をコピーするなら、 Sub sample2_1()   Const Fld1 As String = "C:\temp"   Const Fld2 As String = "C:\data\"   Const tgt As String = "*.xlsx"   Dim bk As Variant      Set FSO = CreateObject("Scripting.FileSystemObject")   For Each bk In FSO.GetFolder(Fld1).Files     If bk.Name Like tgt Then       bk.Copy Fld2     End If   Next bk   Call sample2_2(Fld1, Fld2, tgt)   Set FSO = Nothing End Sub Sub sample2_2(ByVal Fld1 As String, ByVal Fld2 As String, ByVal tgt As String)   Dim fld As Object   Dim bk As Variant   For Each fld In FSO.GetFolder(Fld1).SubFolders     For Each bk In fld.Files       If bk.Name Like tgt Then         bk.Copy Fld2       End If     Next bk     Call sample2_2(ByVal fld.Path, ByVal Fld2, ByVal tgt)   Next fld   Set fld = Nothing End Sub こんな、感じです。 エラー処理は適宜入れて下さい。

kkkkkkkk87
質問者

補足

すみません。質問文に間違いがありました。 おっしゃる通り、 "C:\AAA"の1階層分のサブフォルダーだけでなく、「全ての」階層のサブフォルダーからエクセルブックを集めるにはどうすればよいか、という質問でした。 こちらの意図をくんでくださり、ありがとうございます。 また質問ばかりで恐縮なのですが、sample2_2の For Each fld In FSO.GetFolder(Fld1).SubFolders の部分で実行時エラー424「オブジェクトが必要です」が出てしまうようなのですが、どのように対処すればよろしいでしょうか。

関連するQ&A

  • マクロで質問です

    下記のようなマクロで現在はマクロコード内にフォルダのアドレスを書いていますが これをダイアログを開いてフォルダを選択できるようにするには どうすればよいでしょうか? Sub Sample10()    Call FileSearch("V:\個人\飯塚\マクロ\RawData2") End Sub Sub FileSearch(Path As String) Application.ScreenUpdating = False    Dim FSO As Object, Folder As Variant, File As Variant    Set FSO = CreateObject("Scripting.FileSystemObject")    For Each Folder In FSO.GetFolder(Path).SubFolders        Call FileSearch(Folder.Path)    Next Folder    For Each File In FSO.GetFolder(Path).Files        If File.Name = "RawData" Then Workbooks.Open fld & File, Format:=2 Range("B1:B180").Select Application.CutCopyMode = False Selection.Copy Application.DisplayAlerts = False ActiveWindow.Close Application.DisplayAlerts = True Range("f2").Select ActiveSheet.Paste ActiveSheet.Next.Activate End If    Next File End Sub

  • VBA:2つのCSVファイルを開きたいです。

    エクセル2010のVBAにてCSVファイルを開き結合させるプログラムを組もうとしているのですが、2つ目のCSVファイルを開こうとすると、何故かエラーが出てしまいます。 -------------------------------------------------------------------------------- 1つ目 Sub mobile_FileSearch(Path As String) 'test.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call mobile_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "test.csv" Then Workbooks.Open ("test.csv") End If Next File End Sub ---------------------------------------------------------------------------- 2つ目 Sub local_FileSearch(Path As String) 'bbb.csvのデータを検索して開く Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Call local_FileSearch(Folder.Path) Next Folder For Each File In FSO.GetFolder(Path).Files If File.Name = "bbb.csv" Then Workbooks.Open ("bbb.csv")'←ここでエラー End If Next File End Sub ------------------------------------------------------------------------ まったく同じプログラムで、csvファイル名だけ変えただけで実行時エラー1004が出てしまいます。 一体全体何が問題なのでしょうか?

  • FSOを使いサブフォルダのファイル操作

    同じ階層のサブフォルダにxlsm入るが入っており、VBAによりモジュールを解放しようと試みています。 まずは、FSOを使ってサブフォルダにアクセスしようとしましたが、下から6行目でエラー(424 オブジェクトが必要です)が出てしまい、解決できませんので、ご教示いただけないでしょうか? よろしくお願いします Sub DeleteMain() With Application.FileDialog(msoFileDialogFolderPicker) If Not .Show Then Exit Sub Call DeleteSub(folderPath:=.SelectedItems(1)) End With End Sub Sub DeleteSub(folderPath As String, Optional mycount As Long = 0) Dim fso As Object, myFolders As Object, myfile As Object Set fso = CreateObject("Scripting.FileSystemObject") Set myFolders = fso.GetFolder(folderPath).SubFolders For Each myfile In fso.GetFolder(folderPath).Files mycount = mycount + 1 ' Cells(mycount, 1) = myfile.Path Debug.Print myfile.Path Next For Each myFolders In fso.GetFolder(folder.Path).SubFolders Call DeleteSub(myFolder.Path, mycount) Next Set fso = Nothing Set myFolders = Nothing End Sub

  • 部分検索でフォルダ名を検索するマクロ

    Excel2013、windows8を利用しています。 任意の文字を入力して、その文字を含むサブフォルダを検索するマクロを考えています。 以下の例ではフォルダパス\\000.00.000.00\ab\c\内のサブフォルダから、ワタナベという文字 を含むサブフォルダ名のみを検索し、サブフォルダ名をvbaのイミディエイトに結果を出力するマクロを作ったつもりなのですが正しく動きません(エラーが出るわけでは無いのですが何も出力されない)。 どこが間違っているのか教えて頂けないでしょうか? 以下のマクロをつくるにあたって参考にしたホームページは http://officetanaka.net/excel/vba/tips/tips36.htm です Sub Sample() Call FileSearch("\\000.00.000.00\ab\c\", "ワタナベ") End Sub Sub FileSearch(Path As String, Target As String) Dim FSO As Object, Folder As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders If Folder.Name Like Target Then Debug.Print Folder.Path End If Next Folder End Sub

  • テキストファイルをエクセルに移すマクロのことで?

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String 'ここのアドレスをファイルが格納されているフォルダのパスに変えてください FolderPath = "C:\Users\・・・" Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub

  • マクロで特定のフォルダの中から任意のフォルダを開きたい

    マクロで特定のフォルダの中から、任意のフォルダを開きたいのです。 または、特定のフォルダの中から最新のブックを開きたいのですが このような方法ご存知の方ご教示いただけませんでしょうか^^; 以下のコードは、似たような方法がないか検索して 見つけたマクロなのですが、この方法ですと 特定のフォルダを指定して開くことはできますが 任意のフォルダを一発で開くということは難しいようです。 Private Sub Worksheet_BeforeDoubleClick() Cancel = True Const dataDir As String = "C:\テスト\保存データ\" Dim dataFilePath As String dataFilePath = dataDir & Target.Value & ".xls" Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(dataFilePath) Then Workbooks.Open (dataFilePath) End If 保存データというフォルダに番号がフォルダ名のフォルダが複数入っています。 例) 100 101 102 103 104 と、いった具合です。 保存フォルダの中の104(任意のフォルダ)を開くマクロまたは番号のフォルダは関係なく 保存フォルダの中の最新ブックを開くことができるような方法はないでしょうか? 開きたいブックというのは、最新ブックのみですので、この例の場合 104が最新のフォルダというわけではなく、番号のフォルダ自体は 104以降もあり、最新ファイルが104にある場合は105以降のフォルダは 空の状態です。 分かりにくい説明ではございますが、よろしくお願いします^^;

  • VBAでアクティブなファイルを参照して、ファイル一覧作成(サブフォルダ含む)

    VBAでアクティブなファイルのフォルダ(サブフォルダを含む)のファイル一覧を 作成したいと思っています。 以下のサイトを参考にして、パス、ファイル名を落とすまではできました。 http://okwave.jp/qa3544575.html === Sub test() Application.ScreenUpdating = False Sheet1.Cells.Clear Sheet1.Cells(1, 1) = "パス" Sheet1.Cells(1, 2) = "ファイル名" files "d:\", 2 Application.ScreenUpdating = True End Sub Sub files(path As String, ByRef row As Long) DoEvents Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim f As Object For Each f In fso.GetFolder(path).files Sheet1.Cells(row, 1) = path Sheet1.Cells(row, 2) = f.Name row = row + 1 Next For Each f In fso.GetFolder(path).SubFolders files f.path, row Next Set fso = Nothing End Sub === >files "d:\" の箇所を修正して、アクティブなブックを参照しようとしてみたのですが、 なかなか上手くいきません。 また、できれば *.xls などファイルの種類を指定したいのです。 filesearchを使用して組んだ時は 「AAA = ActiveWorkbook.path」「Filetype ~ 」 などでそれらの指定ができたのですが、上記に応用する事ができません。 どなたかご教示頂けますよう、よろしくお願いいたしますm(_ _)m

  • サブフォルダ内のファイル名取得について

    Windows7 Access 2013環境です。 USB接続したハードディスク内のファイルリストを作成しようとしています。 ハードディスクはNTFSフォーマットです。 ボタン1をクリックしたとき、テーブル1をソースにしたフォーム1に ファイル名を書き出していくようにしました。 ドライブ内のサブフォルダを選択すると、プログラムは正常に作動するのですが ドライブ直下を指定すると、実行時エラー 70 "書き込みできません" が発生します。 NTFSのアクセス権は、管理者でログインしているので、システム関連のフォルダ System Volume Information $RECYCLE.BIN 以外は問題ありません。 どこに問題があるのでしょうか。もし、システム関連のフォルダが 引っかかっているとしたら、その回避方法についても 具体的にご教授願います。 ↓エラー箇所↓ -------------------------------------------------------------- For Each subfolder In folder.SubFolders -------------------------------------------------------------- ↓作成したプログラム↓ -------------------------------------------------------------- Private Sub ボタン_1_Click() Dim dlg As FileDialog Dim fold_path As String Dim strTargetDir As String DoCmd.GoToRecord acDataForm, "F0001_フォーム1", acNewRec Set dlg = Application.FileDialog(msoFileDialogFolderPicker) If dlg.Show = False Then Exit Sub fold_path = dlg.SelectedItems(1) strTargetDir = fold_path Call FolderSearch(strTargetDir) MsgBox "終了" Set dlg = Nothing Else End If End Sub Public Sub FolderSearch(strTargetDir As String) Dim fso As Object Dim folder As Object Dim subfolder As Object Dim file As Object Dim objFilsSys As Object Dim objDrive As Object Dim strDriveLetter As String Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(strTargetDir) strDriveLetter = Left(strTargetDir, 1) Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objDrive = objFileSys.GetDrive(strDriveLetter) For Each subfolder In folder.SubFolders  ←エラー箇所 FolderSearch subfolder.Path Next subfolder For Each file In folder.Files With file Me.ボリューム名 = objDrive.VolumeName Me.ファイル名 = file.Name Me.ファイルパス = folder.Path Me.ファイルサイズ = folder.Size DoCmd.GoToRecord acDataForm, "F0001_フォーム1", acNewRec End With Next file Set objDrive = Nothing Set fso = Nothing Set folder = Nothing End Sub

  • エクセルのブックを閉じるマクロについて

    エクセルのブックAとブックBが開いている状態で、 ブックAのボタンに登録して実行すると、ブックAのみ閉じる、 というマクロを作りました。(下部にコードを記載します) このマクロは、2つのブックが開いていると正常に稼働するのですが、 ブックが1つしかない場合、実行時エラーが出てしまいます。 (ブックAのみ開いた状態でこのボタンを押してもエラーなく閉じたい) 実行時エラーが出ないようにするにはどうすれば良いか、 おわかりの方がいらっしゃいましたら教えて下さい。 どうぞよろしくお願い致します。 Sub このブックのみ閉じる() Dim wa As String wa = "ほかに無い" Dim wb As Workbook For Each wb In Workbooks If wb.Name <> ThisWorkbook.Name Then wa = "ほかにあるよ" End If Next If wa = "ほかに無い" Then Application.DisplayAlerts = False Application.Quit '終了予定 End If Range("D2").Select Selection.ClearContents ThisWorkbook.Close SaveChanges:=False End Sub

  • マクロ エクセル2003

    いつも回答して頂き感謝しています。 原紙のブックを開き、別の名前を付けて保存するマクロを考えています。 原紙のブックを開くマクロはネットから探して、少し修正して出来あがったのですが、 この開いた原紙のブックに別の名前を付けて保存するマクロで困っています。 ただ単に名前を付けるだけだったら問題無いのですが、 その名前が既に保存されていないか確認した後、保存としたいのです。 ブックを開く記述を少し引用して出来ないかやってみたのですが、 Const Target2 As String = "C:\Users\Owner\Documents\" & NewFile で、定数式が必要です。と表示されエラーが発生してしまいます。 どのように変更したら上手くいくのでしょうか?宜しくお願い致します。 Sub Sample() Dim buf1 As String Dim buf2 As String Dim NewFile As String Dim ws1 As Worksheet Dim wb As Workbook Set ws1 = ThisWorkbook.Worksheets("作成") NewFile = "借入貸出" & ws1.Range("C4").Value & "." & ws1.Range("D4").Value Const Target1 As String = "C:\Users\Owner\Documents\借入貸出原紙.xlsx" Const Target2 As String = "C:\Users\Owner\Documents\" & NewFile & ".xlsx" buf1 = Dir(Target1) If buf1 = "" Then MsgBox Target1 & vbCrLf & "は存在しません", vbExclamation Exit Sub End If For Each wb In Workbooks If wb.Name = buf1 Then Application.DisplayAlerts = False Workbooks("借入貸出原紙.xlsx").Close Application.DisplayAlerts = True End If Next wb Workbooks.Open Target1 buf2 = Dir(Target2) If buf2 = "" Then End If End Sub

専門家に質問してみよう