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

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

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

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

マクロ

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

Q&A

解決済

1回答

207閲覧

VBAfフォルダの複数ファイル内の複数シートを一括取込み

hajihaji

総合スコア20

VBA

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

マクロ

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

1グッド

0クリップ

投稿2025/02/05 00:32

編集2025/02/05 22:15

実現したいこと

大量のエクセルシートをすべて抽出。

発生している問題・分からないこと

VBAでフォルダのなかにある複数ファイル内から複数シートを一括取込むと同じシートが重複して抽出されてしまうのですが原因がわかりません。
取り込む際重複したシート名には違う名前がふられていきますがどうもシートによっては2度ほど処理を繰り返しているようです。
アドバイスをいただけますと幸いです。

該当のソースコード

On Error Resume Next Dim FileName As String Dim IsBookOpen As Boolean Dim OpenBook As Workbook Dim ShCount As Long With CreateObject("WScript.Shell") .CurrentDirectory = "C:\Users\----\Desktop\取込用" End With FileName = Dir("*.xlsx") Do While FileName <> "" If FileName <> ThisWorkbook.Name Then IsBookOpen = False For Each OpenBook In Workbooks If OpenBook.Name = FileName Then IsBookOpen = True Exit For End If Next If IsBookOpen = False Then ShCount = ThisWorkbook.Worksheets.Count Workbooks.Open (FileName), UpdateLinks:=1 Worksheets.Copy after:=ThisWorkbook.Worksheets(ShCount) Workbooks(FileName).Close savechanges:=False End If End If FileName = Dir() Loop

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

いろいろ調べましたがどうも原因がわかりませんでした。

補足

特になし

tatsu99👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

On Error Resume Next

とりあえず、上記のステートメントはコメントアウトして下さい。

その上で、Workbooks オブジェクトの Open メソッドの戻り値として返されたブックへの参照を Workbook オブジェクト型の変数に渡した上、その変数を介してブックの操作を行うようにしてください。

Dim FileName As String Dim IsBookOpen As Boolean Dim OpenBook As Workbook Dim ShCount As Long

vba

1Dim FileName As String 2Dim IsBookOpen As Boolean 3Dim OpenBook As Workbook 4Dim ShCount As Long 5Dim TargetBook As Workbook
Workbooks.Open (FileName), UpdateLinks:=1 Worksheets.Copy after:=ThisWorkbook.Worksheets(ShCount) Workbooks(FileName).Close savechanges:=False

vba

1 Set TargetBook = Workbooks.Open(FileName:=FileName, UpdateLinks:=1) 2 TargetBook.Worksheets.Copy after:=ThisWorkbook.Worksheets(ShCount) 3 TargetBook.Close SaveChanges:=False 4 Set TargetBook = Nothing

投稿2025/02/06 00:39

sk.exe

総合スコア1008

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

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

hajihaji

2025/02/06 22:10

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問