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

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

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

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

Q&A

解決済

1回答

2573閲覧

VBAで、指定ブックをアクティブにしようとすると、エラーが発生する。

YYJP

総合スコア23

VBA

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

0グッド

0クリップ

投稿2021/06/24 12:36

編集2021/06/24 12:39

前提・実現したいこと

block3_correct.xlsx~block7_correct.xlsx、4つのブックについて、
シートの値をフィルタリングし、フィルタされた行を削除する操作を行おうとしています。
ループで各ブックにつき処理を行うにあたり、
各ブックをアクティブにする必要があると思うのですが、
Workbooks(Data(i)).Activate
で、エラーになってしまいます。
どうしたら、問題なくループが回せるようになるでしょうか?

発生している問題・エラーメッセージ

インデックスが有効範囲にありません。

該当のソースコード

VBA

1Sub 正解データ() 2 3 'カレントディレクトリを確認 4 MsgBox "変更前のパス:" & CurDir 5 ChDir "C:\Users\×××\OneDrive\ドキュメント\大学院\修士論文\facial expression\実験データ0605\0618\3" 6 '変更後のパス確認 7 MsgBox "変更後のパス:" & CurDir 8 9 Dim Data(1 To 4) 10 11 Data(1) = "block3_correct.xlsx" 12 Data(2) = "block4_correct.xlsx" 13 Data(3) = "block6_correct.xlsx" 14 Data(4) = "block7_correct.xlsx" 15 16 Dim i As Integer 17 For i = 1 To 4 18 MsgBox Data(i) 19 Workbooks(Data(i)).Activate 20 '行抽出 21 ActiveWorkbook.ActiveSheet.UsedRange.AutoFilter _ 22 Field:=1, _ 23 Criteria1:=False 24 '行削除 25 With ActiveWorkbook.ActiveSheet.Range("A1").CurrentRegion.Offset(1, 0).EntireRow.Delete 26 End With 27 'オートフィルタ解除 28 ActiveWorkbook.ActiveSheet.Range("A1").AutoFilter 29 Next 30End Sub

試したこと

Data(i)には値はちゃんと入っているのですが、
Workbooks(Data(i)).Activateが動きません。
ブックの指定がうまくできていないということなのでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

もしWorkbooks(Data(i)).Activateのところでエラーになっているなら、そのブックが含まれてないということです。
試しに以下のコードを埋め込んで、Workbooksの中身を確認してください。
ちゃんと4つのブック名が表示されますか?

VBA

1Dim b As Workbook 2For Each b In Workbooks 3 Debug.Print b.Name 4Next

投稿2021/06/24 12:54

neconekocat

総合スコア443

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

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

YYJP

2021/06/24 13:42

ご回答ありがとうございます。Workbooksの中身は、 意図していたblock3_correct.xlsx~block7_correct.xlsxのブックではなく、これらのブックの大元となっているブック(このブックのシートをCopyして、各ブックを作成しました)でした・・・。 大元のブックも、block3_correct.xlsx~block7_correct.xlsxも同じフォルダには置いてあるのですが、どうしたら、block3_correct.xlsx~block7_correct.xlsxをアクティブブックとして指定できるようになるでしょうか?
neconekocat

2021/06/24 14:22 編集

各ブックが開かれているかどうかすら分からないのでなんとも言えません。 もし開いていないのであればWorkbooks.Open等で開いてやる必要があります。 そもそも論になってしまいますが、各ブックを作成する処理を変えるのが一番キレイな形になるのではないでしょうか?
YYJP

2021/06/24 14:32

Workbooks.Openを使って、無事やりたかった処理ができました! あとは、動かしながら、コードをきれいに直したり短くしたりしていこうと思います。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問