SheetsクラスのSelectメソッドが失敗

このQ&Aのポイント
  • Excelファイルのマクロで、SheetsクラスのSelectメソッドが失敗しましたのエラーが出ます
  • 原因はSelectしているSheetの中に非表示なシートがあるのが原因です
  • このケースはsheet4~sheet10までのシートを選択して、選択した全てのシートの特定部分を消去し、選択していないシートに入って選択を解除し基本となるシートに戻るというマクロです
回答を見る
  • ベストアンサー

SheetsクラスのSelectメソッドが失敗

Excelファイルのマクロで、SheetsクラスのSelectメソッドが失敗しましたのエラーが出ます 以下のマクロですが、最初のSheets(Array(................))._Select でエラーになりますその後は解りませんが...。 原因はSelectしているSheetの中に非表示なシートがあるのが原因ですが、 このマクロが入っているExcelファイルは色々な人が使うので人によって非表示にしたい シートがまちまちで、限定は出来ません。ただし、非表示にしたものはそのファイルを 使う人はそのシートはなくても構わないですので、使う人によってマクロを修正すれば 動くのですが、ちょっと面倒なのでこのマクロを修正して対応出来ればと思います。 このケースはsheet4~sheet10までのシートを選択して、選択した全てのシートの特定 部分を消去し、選択していないシートに入って選択を解除し基本となるシートに戻る というマクロです。 マクロの記録で作成して、いらなそうなやつを削除したものです。 ホームページで色々検索しましたが、非表示シートはSelect出来ないと言うことは何となく 解りましたが、マクロの記録で作成した事でも解るように全くの初心者ですので、そこの ところよろしくお願いします。 Sub クリアー() ' ' クリアー Macro ' Sheets(Array("sheet4", "sheet5", "sheet6", "sheet7", "sheet8", "sheet9", "sheet10")). _ Select Sheets("sheet6").Activate Union(Range( _ "F109:BO109,F112:BO112,F115:BO115,F118:BO118,F121:BO121" _ ), Range( _ "FJ225:GS225,FJ228:GS228,FJ231:GS231,FJ234:GS234,FJ237:GS237" _ ), Range( _ "OA535:PD535,OA538:PD538,OA541:PD541,OA544:PD544,OA547:PD547")).Select Selection.ClearContents Sheets("sheet3").Select Sheets("sheet6").Select Range("J1:L1").Select End Sub

  • t_gon
  • お礼率66% (2/3)

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO2です。 シート名を以下のコメントコード内の文字列にカンマ区切りで設定して下さい。 Sub sample() Dim i As Integer, ws ws = Split("aaa,bbb,ccc,ddd,eee,fff,ggg", ",") 'シート名配列の作成 For i = 0 To UBound(ws) Debug.Print ws(i) With Sheets(ws(i)) Union( _ .Range("F109:BO109,F112:BO112,F115:BO115,F118:BO118,F121:BO121"), _ .Range("FJ225:GS225,FJ228:GS228,FJ231:GS231,FJ234:GS234,FJ237:GS237"), _ .Range("OA535:PD535,OA538:PD538,OA541:PD541,OA544:PD544,OA547:PD547")). _ ClearContents End With Next Sheets("sheet6").Select Range("J1:L1").Select End Sub

t_gon
質問者

お礼

ありがとうございます。 最悪一つ一つシートをActivateして同じ処理をするのかと思っていましたが これで、簡単にできそうです。 他にもExcelファイルで非表示にしたいのがあったので、これを応用したいと思います。 本当にありがとうございました。 追伸、それぞれの関数の意味はちょっとまだ解りませんが、一つ一つ確認してみたいと思います。

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。 環境を間違えましたので訂正です。 ub sample() Dim i As Integer For i = 4 To 10 With Sheets("sheet" & i) Union( _ .Range("F109:BO109,F112:BO112,F115:BO115,F118:BO118,F121:BO121"), _ .Range("FJ225:GS225,FJ228:GS228,FJ231:GS231,FJ234:GS234,FJ237:GS237"), _ .Range("OA535:PD535,OA538:PD538,OA541:PD541,OA544:PD544,OA547:PD547")). _ ClearContents End With Next Sheets("sheet6").Select Range("J1:L1").Select End Sub

t_gon
質問者

お礼

補足ではまずかったのかな? 初めて、投稿したのでまだよくわかりません。すみません。 補足では Dim i As Integer With Sheets("sheet4","sheet5","sheet6","sheet7",........) と書き込みましたが、変数を使用しないので Dim i As Integer もいらないですね ほんとに初心者ですみませんです。

t_gon
質問者

補足

早速の回答ありがとうございます。 Dim i As Integer For i = 4 To 10 With Sheets("sheet" & i) とは、下記のように変更しても大丈夫ですか? Dim i As Integer With Sheets("sheet4","sheet5","sheet6","sheet7",........) というのも、説明が不足していましたが、シート名規則性がないばらばらなためです。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

ご例示のマクロですが、Sheet6しかクリアしないのでは? 一例です。 Sub sample() Dim i As Integer For i = 1 To 3 With Sheets("sheet" & i) Union( _ .Range("F109:BO109,F112:BO112,F115:BO115,F118:BO118,F121:BO121"), _ .Range("FJ225:GS225,FJ228:GS228,FJ231:GS231,FJ234:GS234,FJ237:GS237"), _ .Range("OA535:PD535,OA538:PD538,OA541:PD541,OA544:PD544,OA547:PD547")). _ ClearContents End With Next Sheets("sheet3").Select Range("J1:L1").Select End Sub

関連するQ&A

  • ECXEL VBA - Selectメソッドの失敗

    Rangeを指定するのに、 Workbooks("abc").Sheets("Sheet1").Range("A1").Select と言う風に指定したいのですが、これを行なうと -------------------------------------------- 実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。 -------------------------------------------- となってしまう為、いつもわざわざ下記のようにしています。 Workbooks("abc").Activate Sheets("Sheet1").Select Range("A1").Select Selectだけでなく、Copyの貼り付け等の時も同様で かなりの手間と、コードの長さになってしまっています。 どこかの設定を変えると出来たりするのでしょうか? 又、他に良い方法がありましたらお教え下さい。 よろしくお願いします。

  • rangeクラスのselectメソッドが失敗

    お世話になっております。 ExcelのVBAマクロについて質問があります。 Sheet1にボタンを設置し、Sheet2のセルA1をselectするという単純なものですが、タイトルのエラーが出て実行されません。 エラーを回避するためにはSheet2をアクティブにする必要があるという事まではわかったので、Active.indexでSheet2がアクティブになっていることを確認したのですが同様のエラーが出ました。 何か解決策がございましたら、ご教示のほどよろしくお願いします。 Excel2003にて作成 worksheets(2).Activate Range(″A1″).Select 追記 もしよければworksheetsの頭文字が小文字になる原因もわかる方がいたらご教示のほどよろしくお願いします。

  • Rectangleクラスのselectメソッド失敗

    EXCEL VBAで図形を描画するものを作成して動かしていました。 今までは通常に動作していたのですが、ある時から急に下記メッセージが表示してしまい。 それ以降、エラーが出続けています。 実行時エラー1004 Rectangleクラスのselectメソッドに失敗しました。 その図形を選択すると、四角形65580となっており、65536を超えている からかと想定しています。 図形の作成数を初期化すれば直るような気もしますが、どなたか 原因と対処方法が分かる方はいらっしゃらないでしょうか? なお下記の様に記述しています。 Sheets(シート名).Select ActiveSheet.Rectangles.Add(変数1,変数2,変数3, 変数4).Select Selection.Interior.ColorIndex = 変数5 Selection.SendToBack

  • worksheetクラスのcopyメソッドが失敗しました。

    VBA初心者です。 「worksheetクラスのcopyメソッドが失敗しました。」 エラー回避方法を教えてください。 やりたいことは、データ入力シートから雛形シートにデータを参照して、データ入力シートの1行ずつを新しいシートにしたいです。35シートぐらいをコピーしたら上記のエラーがでました。メモリ不足でエラーになるんだろうなぁということは予測つくのですが、なにか回避方法はありますか? 別のブックを使う方法でもよいです。ご教示ください。 コードはこんな感じです。 Sub シート作成1() 'データ行選択 Range("B9").Select Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Unprotect Rows("8:8").Select Selection.AutoFilter Selection.AutoFilter Field:=12, Criteria1:="<>" Range("B9").Select Range(Selection, Selection.End(xlDown)).Select '選択したデータ行のシート作成 For Each 選択セル In Selection Worksheets("ひな形").Copy after:=ActiveSheet DoEvents 'シート名の変更 ActiveSheet.Name = 選択セル.Value ActiveSheet.Tab.ColorIndex = 38 Next 選択セル DoEvents 'オートフィルタを元にもどす Sheets("データ入力シート").Select Rows("8:8").Select Selection.AutoFilter Range("B1").Select Columns("L:O").Select Selection.EntireColumn.Hidden = True Range("B1").Select ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ False, AllowSorting:=True, AllowFiltering:=True End Sub よろしくおねがいします。

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • range クラスのselectメソッドが・・・

    マクロ実行時に 実行エラー 1004 「Range クラスのselectメソッドが失敗しました。」 のメッセージが出てしまいます。 マクロは以下のとおりです。 ----------------------------------------------------------------------------------- Sub 振替表作成() Workbooks.Add Application.SheetsInNewWorkbook = 1 ActiveSheet.Name = "未収" MsgBox ("未収・前受振替表エクセルファイルを作成します。" & "任意の場所を指定して保存してください。 ") With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = "未収・前受振替表" If .Show = -1 Then .Execute End With MsgBox ("対象月次の1370集計表 を選択してください。") With Application.FileDialog(msoFileDialogOpen) .InitialFileName = "" .AllowMultiSelect = True If .Show = -1 Then .Execute End With Columns("A:D").Select Selection.Delete Shift:=xlToLeft ---------------------------------------------------------------------------- Columns("A:D").Select の部分でエラーになります。 Columns("A:D").Select の前に ActiveWindow.Select を入れてみたんですが駄目です。 Columns("A:D").Select の前に Selection.Select を入れてみたんですが駄目です。 Columns("A:D").Select の前に Worksheets("シート名").Activate を入れてみたんですが駄目です。 原因と解消方法がわかりません。 何がいけないんでしょうか?

  • マクロの実行とコマンドボタン

    office2000、WIN98SEです。 マクロの記録でマクロを作成しました。 これをコマンドボタンにコピペして実行するとエラーになります。マクロの実行から動かすとなんの問題もありません。なにがいけないんでしょう。教えてください。 ちなみにやりたいことは、複数のシートの同じセルを一気にクリアにしたいです。 記録したマクロは以下の通りです。宜しくお願いします。 Sheets(Array("用紙(1)", "用紙(2)", "用紙(3)", "用紙(4)")).Select Sheets("用紙(1)").Activate Range("B9").Select ActiveWindow.SmallScroll Down:=36 Range("B9:C58").Select Selection.ClearContents Range("F9").Select ActiveWindow.SmallScroll Down:=36 Range("F9:G58").Select Selection.ClearContents Range("I9").Select ActiveWindow.SmallScroll Down:=36 Range("I9:I58").Select Selection.ClearContents Sheets("用紙(1)").Select Range("B9").Select End Sub

  • Excelのマクロで特定のセルに罫線を引きたい

    Excelのマクロで特定のセルに罫線を引きたいのですが、 自分で実行したマクロを確認すると長過ぎてとても見づらいです。 それで調べて下記のようにまとめてみたのですが、 2つのシートをグループ選択する段階で止まってしまいます。 Dim 最終行 As Integer 最終行 = (Range("F65536").End(xlUp).Row) Sheets(Array("Sheet1", "Sheet2")).Select Sheets("Sheet1").Activate ActiveWindow.LargeScroll Down:=1 Range("F1:F" & 最終行).BorderAround LineStyle:=xlNone, _ Weight:=xlThin, _ ColorIndex:=xlAutomatic   With Selection.Borders(xlInsideVertical) End With どちらのシートも同じ列の最終行まで範囲選択することに変わりありません。 シンプルで簡単な書き方はないでしょうか? どうかよろしくお願い致します。

  • Selectメソッドが無視される

    1時間くらいループさせるvbaなのですが Sheets("シート名").Select を何回も行うのですが、ある程度の時間が経つと無視されるようになります。 シート選択後にセルを探したりするので、該当のシートが無視されるため、実行時エラー91が発生してしまいます。 エラー発生後しょうがないからvbaを終了し、 手動でシートを選択しようとしても画面が固まってることもあります。 長時間VBAを行うとこういう現象が発生するのでしょうか? 内容はサイト上のとあるデータをエクセルシートに書き出しています。 一つのobjIEで何百回もNavigateしています。 エクセル2007です。

  • excel2003のマクロで全シートを選択したい場合

    初心者です、お願いします。 Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select Sheets("Sheet1").Activate Range("E1").Select Selection.NumberFormatLocal = "G/標準" ’現在文字列 ActiveCell.FormulaR1C1 = "7/1/2008" Range("F1").Select Selection.NumberFormatLocal = "G/標準"  ’現在文字列    ActiveCell.FormulaR1C1 = "5/31/2009"  上記の記述で1行目、全シートの選択を指定したいのです。 どのように変えたら良いかどなたか教えてください。

専門家に質問してみよう