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

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

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

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

Q&A

解決済

3回答

5278閲覧

フォルダ内の全てのExcelに同じ処理を繰り返す (VBA)

sincos41

総合スコア17

VBA

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

0グッド

1クリップ

投稿2017/10/05 07:09

編集2017/10/05 07:28

【実施したいこと】
フォルダ内にExcelファイルが約200個あります。
この全てのに同じ処理をしたいのですが、マクロで繰り返す方法がわからないので教えて下さい。
処理をする内容は簡単なもので、マクロで作成しました。

・ 各Excelファイルは1つのシートしか存在せず、シート名は重要ではないので全て「Sheet1」になっています。
・ 各Excelファイルのデータの配置や表形式は同じです。
・ レコードの行数がExcelファイルによって異なります。

尚、下記のVBAを試してみたのですが、実際の処理が反映されず、間違いの箇所が分からずに困っています。
間違いもしくは、別の書き方があればそれを教えて頂けると幸いです。

【試してみたコード】
sub macro1()
dim myPath as string
dim myFile as string

 mypath = ThisWorkbook.Path

’指定フォルダのブックを順繰り拾う
myfile = dir(mypath & "*.xlsx")
do until myfile = ""

 ’ブックを開いて処理を行い保存して閉じる
workbooks.open mypath & myfile
Sheets("Sheet1").Select
ActiveWorkbook.Names("該当するワード").Delete
ActiveWorkbook.Names("該当するワード").Delete
ActiveWorkbook.Names("該当するワード").Delete
ActiveWorkbook.Names("該当するワード").Delete
ActiveWorkbook.Names("該当するワード").Delete
activeworkbook.Save
activeworkbook.Close savechanges:=True

  myfile = dir()
loop
end sub

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

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

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

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

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

guest

回答3

0

パスとファイルの区切りに""がありません。(Dir()への引数のパスなど)
以下のように変更してみて下さい。

VBA

1myFile = Dir(myPath & "\" & "*.xlsx") 2Do Until myFile = "" 3 'ブックを開いて処理を行い保存して閉じる 4 Workbooks.Open myPath & "\" & myFile

因みに、「名前」はBook単位なので、Sheets("Sheet1").Selectは不要ですね。

追記

参考までに、Namesコレクションのようなコレクションの操作にはFor Eachを使用すると簡潔な記述になります。

VBA

1Sub macro1() 2Dim myPath As String 3Dim myFile As String 4Dim nm As Name 5 6myPath = ThisWorkbook.Path & "\" 7'指定フォルダのブックを順繰り拾う 8myFile = Dir(myPath & "*.xlsx") 9Do Until myFile = "" 10 'ブックを開いて処理を行い保存して閉じる 11 Workbooks.Open myPath & myFile 12 For Each nm In ActiveWorkbook.Names 13 Select Case nm.Name 14 Case "該当するワード1", "該当するワード2" 15 nm.Delete 16 End Select 17 Next 18 ActiveWorkbook.Close savechanges:=True 19 myFile = Dir() 20Loop 21End Sub

「名前」の定義を全て削除したいなら、Select Case~による判定は不要ですし、削除したくないものを限定したいなら、CASE で削除したくないものを指定してelseで削除を行えば記述が少なくて済みます。

投稿2017/10/05 07:36

編集2017/10/05 08:33
sazi

総合スコア25173

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

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

sincos41

2017/10/10 03:11

追記までして下さり、ありがとうございます。まだまだVBAは初心者ですので、今後にも繋がる助言を頂けて感謝してもしきれないほどです。大変勉強になりました。
guest

0

ベストアンサー

下記のように改修すれば動作すると思います。
コメントに修正内容の説明を記述しています。

VBA

1Option Explicit 2Sub macro1() 3 Dim myPath As String 4 Dim myFile As String 5 6 On Error Resume Next '該当Excelファイル内に「該当するワード」が無かったときにエラーになるのでそれを無視する設定 7 8 myPath = ThisWorkbook.Path 9 10 myFile = Dir(myPath & "\" & "*.xlsx") '\が無かったので追加 11 Do Until myFile = "" 12 13 Workbooks.Open myPath & "\" & myFile '\が無かったので追加 14 Sheets("Sheet1").Select 15 ActiveWorkbook.Names("該当するワード").Delete 16 ActiveWorkbook.Names("該当するワード").Delete 17 ActiveWorkbook.Names("該当するワード").Delete 18 ActiveWorkbook.Names("該当するワード").Delete 19 ActiveWorkbook.Names("該当するワード").Delete 20' ActiveWorkbook.Save 'Closeのときにもセーブされるので削除 21 ActiveWorkbook.Close savechanges:=True 22 23 myFile = Dir() 24 Loop 25End Sub 26

投稿2017/10/05 07:54

kikukiku

総合スコア514

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

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

sincos41

2017/10/10 03:09

お礼が遅くなりましたが、修正ありがとうございます。無事に解決することができました。
clown1616

2019/03/14 09:36

同じような内容で悩んでいました。ありがとうございました。
guest

0

不具合のご説明が具体的でないので、
回答しやすくする為に、
以下の情報を記載した方が良いです。
・OS、Officeのバージョン(例:Win7(64bit)、Office2013(32bit))
・どこのコードで、どうなってしまうのか?
(デバッグの方法を先に習得すべきかと:ブレークポイント、F5、F8、イミディエイト)

直接は関係ないですが、
WorkBook型の変数、WorkSheet型の変数を使えるようになった方が
インテリセンスが使えるようになり、書きやすく、書き損じが減ります。

また、ファイル関連の処理にはFSOを用いる方が扱いやすくなります。
(処理速度がシビアであればDirの方が早いです)

投稿2017/10/05 08:03

ExcelVBAer

総合スコア1175

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問