エクセルで複数のブックを開く際のエラーの解決方法について

このQ&Aのポイント
  • エクセルで複数のブックを開いて作業中に「インデックスが有効範囲にありません」というエラーが発生しています。一つのブックを操作している際にはエラーは発生しませんが、二つのブックを切り替えて作業する際に発生します。
  • エラーが発生する部分は、各ブックのマクロのコードの一部です。
  • エラーを解決するためには、二つのブックでコードが干渉しないようにする必要があります。具体的な解決方法や対策について教えてください。
回答を見る
  • ベストアンサー

複数のブックを開いているとエラーが出てしまいます

エクセルのマクロ初心者でたいへん恐縮です。質問の仕方が悪ければお詫び申し上げます。  エクセルでそれぞれ違うマクロが記録された二つのブックを開いて、シートの表から抽出などの操作をしています。例えば、(1).xlsと (2).xlsにはそれぞれ部品表のようなリストを含めて3つのシートがあります。その二つのブックを頻繁にアクティブに切り替えながら作業をしようとしているのですが、片方を使っていると別のブックを使った時に「インデックスが有効範囲にありません」というエラーが出て、アクティブブックとは違うシートを読み込んでしまっているようです。 ちなみにブックを一つだけ開いて操作している時は全くエラーはでません。二つのブックを扱っている時だけです。マクロはエンターを押すと実行されるようになっており、一方を実行するともう片方のブックでエラーが出てしまいます。 その二つのブックのコードでエラー(黄色く表示)になるのは以下の★~★の部分です。 ------------------------------------------------------------------------------------ <(1).xlsのマクロ> Sub Auto_Open() ' Auto_Open Macro ActiveSheet.Unprotect ' ★Sheets("パッキンリスト").Columns("B:N").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("検索出力表!Extract"), Unique _ :=False★ ActiveWindow.SmallScroll Down:=-28 Range("C19:N19").Select Selection.Copy Range("D3:E14").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=True ActiveWindow.SmallScroll Down:=4 Rows("21:21").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp ActiveWindow.ScrollRow = 1 Range("B3").Select Application.OnKey Key:="{RETURN}", Procedure:="Auto_Open" Application.OnKey Key:="{ENTER}", Procedure:="Auto_Open" ActiveSheet.Protect UserInterfaceOnly:=True End Sub ----------------------------------------------------------------------------------- <(2).xlsのマクロ> Sub Auto_Open() ' Auto_Open Macro ActiveSheet.Unprotect If Range("B3").Cells = "" Then MsgBox "  ☆ パーツNo,が未入力です。" ActiveSheet.Protect UserInterfaceOnly:=True Exit Sub End If ★Sheets("パーツリスト").Columns("C:G").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("B2:B3"), CopyToRange:=Range("B20:E20"), Unique:= _ True★ Range("C21:E21").Copy Range("D3:E5").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=True ActiveWindow.ScrollRow = 1 Application.OnKey Key:="{RETURN}", Procedure:="Auto_Open" Application.OnKey Key:="{ENTER}", Procedure:="Auto_Open" ActiveSheet.Protect UserInterfaceOnly:=True End Sub ------------------------------------------------------------------------------------  二つのブックを開いて、下のタスクバーでブックを切り替えて操作してもお互いが干渉せずそれぞれのブックのプログラムがエラー無く動くようにしたいのですが、 もし、何か解決法などございましたらご教授いただければ幸いです。 何卒よろしくお願い申し上げます。

noname#256688
noname#256688

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

アクティブブックを切り替えているのもありますが,それらのマクロの一番の問題点は,「Enterキーでマクロを動かさせる」の仕込みが甘いことにあります。 最低限の手直しに止めるにしても,表示ブックを切り替えるたびに,Enterしたときに「今はどのブックのマクロが起動すればいいのか」の設定を都度設定し直させないといけません。 手順: VBE画面のプロジェクトエクスプローラで,(1)ブックのThisWorkbookをWクリックして開く 現れたシートに下記をコピー貼り付ける private sub Workbook_Activate() application.onkey "{ENTER}", "Auto_Open" application.onkey "{RETURN}", "Auto_Open" end sub private sub Workbook_Deactivate() application.onkey "{ENTER}" application.onkey "{RETURN}" end sub private sub Workbook_Close() application.onkey "{ENTER}" application.onkey "{RETURN}" end sub (2)ブックのThisWorkbookにも,同じマクロをコピー貼り付ける。 以上です。 #補足 もうちょっとマクロのスキルが上がってから先のお話になりますが,将来的には今の「Enterキーで起動する」のマクロを全くやめて,各ブックの今作業しているシートそれぞれに,「B3セルに記入したら所定のマクロが自動で動く」というマクロに切り替えます。 練習: まっさらのブックを用意する シート1のシート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) if target.address <> "$B$3" then exit sub msgbox thisworkbook.name & " B3 enter" ’実際にはこの続きに,データの抽出と転記の手順を記入していく end sub ブック2のシート1にも同じ仕込みをして,それぞれのブックを並べてB3に記入する動作をおこなってみる。

noname#256688
質問者

お礼

keithin様 おかげさまで教えて頂いた通り行いましたところ、問題なく動作いたしました。マクロ初心者であるにもかかわらず、コードや貼り付け方まで教えて頂きたいへん感謝申し上げます。 今回のエンターで実行させる方法の仕込みが甘さと考え方の方向性が甘いことを痛感しました。 あと、おっしゃるとおり今後はエンターによる実行ではなく、所定の記入したセルで自動実行させる考えに切り替えてみます。 そして、ご丁寧に付け加えて頂いたそのマクロの練習や勉強も同時に行って行きたいと思います。  大変奥が深く、まだまだ勉強しなければいけないですが、これを機にがんばってみたいと思います。 末筆になりますが、このたびはたいへんご親切に分かりやすく教えていただき、本当に感謝いたします。直接お礼をしたいところですが、ここでのお礼とさせていただきます。 重ね重ね誠にありがとうございました。

関連するQ&A

  • 別ブックからのデータ取り込み

    下記の(1)(2)のマクロを(3)のコマンドボタンで実行させています。 (1)(2)を使用せずに(3)のコマンドボタンにまとめて記載したいのですが上手く出来ません。 また、(1)の"A:\あ.CSV"部分ですが、使用PCによってドライブが異なる場合があるります。セルC2に入力したドライブ名を反映させることはできないでしょうか? よろしくお願いします。 (1) Sub I()    Workbooks.Open Filename:="A:\あ.xls"    lngR = Range("B65536").End(xlUp).Row    Range("B2:B" & lngR).Select    Selection.Copy    Windows("か.xls").Activate    Range("B3").Select    ActiveSheet.Paste    lngR = Range("B65536").End(xlUp).Row    Range("B2:F" & lngR).Select    With Selection.Font     .Size = 8    End With     End Sub (2) Sub II()    Windows("あ.xls").Activate    lngR = Range("E65536").End(xlUp).Row    Range("E2:E" & lngR).Select    Selection.Copy    Windows("か.xls").Activate    Range("G3").Select    ActiveSheet.Paste    lngR = Range("G65536").End(xlUp).Row    Range("G2:G" & lngR).Select    Selection.Style = "Comma [0]"    With Selection.Font     .Size = 9    End With    Windows("あ.xls").Activate    ActiveWindow.Close   End Sub (3) Private Sub 取込_Click()    Application.ScreenUpdating = False    Protect UserInterfaceOnly:=True    Application.Run "I"    Application.Run "II"    Selection.Locked = False    Applicaion.ScreenUpdating = True   End Sub

  • 保護の解除・設定

    いつもありがとうございます。 現在シートの保護がパスワード入りでかかっています。 マクロで保護を解除するときに、 パスワードを入力不要で解除できませんか? また、引続きシートを保護するときに、 パスワードを入力しないで、元の、パスワードで、 保護が出来るでしょうか? 現在は、下記のようになっています。 (マクロの記録でしか作れませんので・・、) ActiveSheet.Unprotect ActiveWindow.SmallScroll Down:=24 Range("B50:X69").Select Selection.Copy ActiveWindow.LargeScroll Down:=-2 ActiveWindow.LargeScroll ToRight:=-3 ActiveWindow.SmallScroll Down:=-9 Range("B1").Select ActiveSheet.Paste Range("B2").Select Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 以上、よろしくお願い致します。

  • 実行時エラーについて

    Konkon_mと申します よろしくお願いします エクセルの質問なんですが、今回ワークシートから別のワークシートに表と数値を貼り付けるマクロを作成したのですが終了時に、『実行時エラー'1004' WorksheetクラスのPasteメソッドが失敗しました』のエラーがでるのです 一応、コピー&貼り付けはきちんと終了しているようなのですがすごく気になります 作成したマクロを載せますので、わかる方がいらっしゃいましたら教えていただけないでしょうか? 宜しくお願いします ChDir "H:\A\B" Workbooks.Open FileName:="\\PRO800\Home Directory\B\B\コピー.xls" ActiveWindow.WindowState = xlMinimized Range("B3:D10").Select Selection.Copy ActiveWindow.WindowState = xlMinimized ActiveWindow.WindowState = xlNormal ActiveWindow.WindowState = xlMinimized Windows("コピー.xls").Activate ActiveWindow.WindowState = xlNormal Range("B3").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("B3:D10").Select Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("A1").Select ActiveWorkbook.Save ActiveWindow.Close ActiveWindow.WindowState = xlNormal Range("B3").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A3").Select ActiveWindow.WindowState = xlMaximized End Sub

  • エクセル・マクロでグラフを最背面に移動させたい

    エクセルのグラフを3つピッタリと重ねて表示しています 後ろのグラフを選択する時「最背面に移動」させてますが これをマクロにしたいです とりあえずマクロの記録でしてみたら Sub Macro1() ActiveSheet.ChartObjects("グラフ 7").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 5").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select End Sub と出来たのですが、マクロの実行そしてみると3列目の Selection.ShapeRange.ZOrder msoSendToBack の所で、 「実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしてません」 となってしまいます、どうすればよいのでしょう ボタンを押したら最前面のグラフが最背面に移動するようにしたいのですが難しいのでしょうか

  • マクロの実行について 質問です。

    マクロ勉強中です! 何時間も調べておりますが、 どうしても分からないので お教え下さい(;_;) 別シートの都道府県が混在するデータの中から、 3列の付属語が『下関』のものだけをコピーして、シート1に貼り付けるマクロを マクロの記録で 『下関』 というタイトル?にして作りました。(下記) これを実行するときに、マクロ名からではなく、 下の表の R3C8セルの、『下関』 というハイパーリンクをクリックで 実行される・・・・ そんなふうにするには、どうしたらいいのでしょうか? ご回答を おまちしております。よろしくお願いします! Sub 下関() ' ' 下関 Macro ' ' Keyboard Shortcut: Ctrl+a ' ActiveWindow.SmallScroll Down:=-9 Range("B3").Select ActiveWindow.SmallScroll Down:=117 Range("B3:F137").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-9 Range("H3").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True Selection.Copy Sheets("Sheet1").Select Range("B3").Select ActiveSheet.Paste Range("C3").Select End Sub

  • エクセルでマクロを組み始めたばかりの者です。下記の

    エクセルでマクロを組み始めたばかりの者です。下記のようなマクロを組んでみましたが、27行目もしくは41行目のActiveSheet.Pasteで「実行時エラー‘1004‘: 変更しようとしているセルまたはグラフは保護されているため読み取り専用となっています…」というエラーメッセージが出て止まってしまいます。 しようとしている内容は、転送ボタンを押し各シートの指定セルへ一括転送(コピー)をしたいのです。 その際、転送先はシート保護をしておきたいのです。 エラーはエクセル2010で確認しましたが、職場のPCを使用するため2007や2003等他のバージョンを利用する可能性もあります。また、仕事で使用するため早急に使わなければならず焦っています。 Option Explicit Private Sub CommandButton2_Click() Call Macro2 End Sub Sub Macro2() Workbook.Open Filename:=”K:¥共有¥○○○.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”○○○.xlsm”).Activate Range(”E7”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”C:¥Users¥Desktop¥×××.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”×××.xlsm”).Activate Sheet(”△△△”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”K:¥共有¥□□□.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”□□□.xlsm”).Activate Sheet(”▽▽▽”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False MsgBox " 『○○○』と" & vbCrLf & "『×××』と" & vbCrLf & "『□□□』の" & vbCrLf & "規格を変更しました。" End Sub どの様に修正すれば良いのでしょうか? マクロが原因でしょうか?または他の原因があるのでしょうか? マクロ初心者のため、修正方法など具体的な詳細をお教えいただけないでしょうか。 お手数をおかけして申し訳ございませんが、よろしくお願いします。

  • マクロでブック間のリンクを切るためにはどうすれば良いですか?

    マクロ初心者です。現状、月次データの分類・集計にマクロを使用し、演算結果を新しいブックで保存して配布用資料としています。配布用資料はマクロを削除して送付しているのですが、その際に配布用のSheetにコピー元でのリンクの情報が残ってしまいます。都度、編集→リンクの設定でリンクの解除をしておりますが、これをマクロで解決する方法はあるでしょうか? 大変つたないコードでお恥ずかしいですが現状は以下の通りです。集計後、配布用の新しいブックを作成する過程とお考えください。 Sub Oct() Sheets("配布資料").Select ActiveSheet.Unprotect Sheets("10月").Select Range("A1:F40").Select Selection.Copy Sheets("配布資料").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Cells.Select Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Sheets("配布資料").Select ActiveSheet.Unprotect Sheets("配布資料").Select Sheets("配布資料").Copy Sheets("配布資料").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.Dialogs(xlDialogSaveAs).Show ActiveWorkbook.Close End Sub 殆どExcel自体を触ったことが無く、体裁を整えている程度のつたない知識です。ご指導いただければ幸いです。宜しくお願いいたします。

  • マクロを教えてください

    同じフォルダ内にあるXlsブックのあるSheetのデータを他のBookにコピーして貼り付けて貼り付けた側のBookで加工したいのですがうまくマクロが組めません。 Bookを共有で使っているので困っています。 Sub ワードアート1_Click ' ActiveWindow.ScrollWorkbookTabs sition:=xlLast Workbooks.Open ("販売管理表み.xls") Sheets("在庫一覧").Select Cells.Select Range("A1").Activate Selection.Copy Windows("完成在庫.xls").Activate Sheets("完成在庫一覧").Select Range("A1").Select ActiveSheet.Paste End Sub って書いてみましたが、Workbooks…のところでエラーになってしまいました。(TOT)初心者ですみません。教えてください。

  • VBAでブックの集計の仕方を教えてください。

    H22.12月度と言う名前のフォルダーにA店~E店と集計と言う名前のブックがあります。 集計のブックでA店~E店の集計をしてくるマクロを組んでいますが上手く作動しません。 集計のブックには、セルの書式設定をしていますので、A店~E店の売上一覧のシートから 値だけをコピーして集計したいのですが、罫線やパターン、数式までコピーしてきたり、 最後のE店だけ2重にコピーしてきたりと変な動作をします。 初心者で本やネットで調べながら作ったので、どこの記述がおかしくて、そうなるのかがさっぱりわかりません。 どなたか教えていただけませんでしょうか。よろしくお願いします。 Sub 集計() Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\H22.12月度\A店.xls" Sheets("売上一覧").Select Range("E5:Q24").Select Selection.Copy Application.WindowState = xlMinimized Windows("集計.xls").Activate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False If Range("E5").Value <> "" Then Range("E65536").Select Selection.End(xlUp).Select Selection.Offset(1, 0).Select End If ActiveSheet.Paste Windows("A店.xls").Activate Range("E5").Select Application.CutCopyMode = False ActiveWindow.Close     ・     ・     ・(B・C・D店も同じ記述)     ・     ・   Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\H22.12月度\E店.xls" Sheets("売上一覧").Select Range("E5:Q24").Select Selection.Copy Application.WindowState = xlMinimized Windows("集計.xls").Activate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False If Range("E5").Value <> "" Then Range("E65536").Select Selection.End(xlUp).Select Selection.Offset(1, 0).Select End If ActiveSheet.Paste Windows("E店.xls").Activate Range("E5").Select Application.CutCopyMode = False ActiveWindow.Close    Windows("集計.xls").Activate Application.WindowState = xlMaximized Range("E5").Select End Sub

  • エクセルで繰り返し同じ作業をしたい

    仕事でDドライブの中のフォルダにエクセルのシートが100種類位入っています。それらのエクセルシートに毎日同じ作業をしなければならないのですが、(エクセルを開いて行う作業は各シート共通です)そのマクロの作り方を教えていただけないでしょうか?ちなみに Workbooks.Open Filename:="D:\業務\あ.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\い.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\う.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close      その後もまだまだ続きます。 というマクロの記録を使って作ってはいるものの、やたらと長くなってしまいます。VBAの知識がない初心者なのですが、いい方法があれば教えていただけないでしょうか?

専門家に質問してみよう