VBAで指定したシート名以外を非表示にする方法

このQ&Aのポイント
  • ExcelのVBAを使用して、指定したシート名以外を非表示にする方法について教えてください。現在、指定したシート名以外を非表示にする方法として、Sheets(Array("B", "C", "D")).Selectというコードを使用していますが、SNameで指定したシート名以外をArrayする方法がわかりません。
  • 例えば、Sheet A以外を非表示にしたい場合、VBAコードをどのように書けばよいでしょうか?また、シート名が関連性のない名前や10シート以上ある場合でも対応できる方法を教えてください。
  • ExcelのVBAを使用して、指定したシート名以外を非表示にする方法を教えてください。現在、Sheets(Array("B", "C", "D")).Selectというコードを使用していますが、SNameで指定したシート名以外をArrayする方法がわかりません。
回答を見る
  • ベストアンサー

指定したシート名以外を非表示にするには?VBA

エクセルです。 例えば、 A,B,C,Dと言うシートがあり、 A以外を非表示にさせたい場合は、 Sub test() Dim SName As String '表示したいシート名 SName = "A" Sheets(Array("B", "C", "D")).Select ActiveWindow.SelectedSheets.Visible = False End Sub で出来ますが、 SName = "B"の場合など、どのシート名を指定した場合でも その指定したシート名以外のシートを非表示にするVBAコードを教えてくれませんか? しかも、例題でA,B,C,Dとしましたが 実際のシート名は、A会社、B会社、C事業部、D部署・・・等 関連性のないシート名だし、10シート以上あります。 Sheets(Array("B", "C", "D")).Select の部分を,VBAでどううまくやればいいのかわかりません。 SNameで指定したシート名以外をArrayしたいです。 ご回答よろしくお願いします。

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

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

Arrayにしたいということなのでご要望とは違いますが 1つだけの指定なら下記のように。 Dim sht As Worksheet SName = "A" For Each sht In ThisWorkbook.Sheets If sht.Name <> SName Then sht.Visible = xlSheetHidden Next

SPSQWMBWXN
質問者

お礼

そうですね。 無理やりArrayを使わなくてもいいんですね。 出来ました。ありがとうございました。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 Sheet名を格納する方法ではなく、順番にSheet名を検索していく方法です。 Sheet名が「A」以外のSheetを非表示にするとします。 ※ 実際は再表示する必要があると思いますので、 余計なお世話かもしれませんが、再表示のコードも一緒に載せておきます。 標準モジュールに↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub 非表示() Dim k As Long For k = 1 To Worksheets.Count If Worksheets(k).Name <> "A" Then Worksheets(k).Visible = False End If Next k End Sub Sub 再表示() Dim k As Long For k = 1 To Worksheets.Count If Worksheets(k).Visible = False Then Worksheets(k).Visible = True End If Next k End Sub こんな感じではどうでしょうか?m(_ _)m

SPSQWMBWXN
質問者

お礼

非表示、再表示 どちらのマクロも作ってもらえて感謝です。 ありがとうございました。

関連するQ&A

  • Excel(エクセル)で非表示シートをVBAで計算するには?

    よろしくお願いします。 エクセルで1つのブックにAシート~Fシートまであるとします。 再計算させると、すべてのシートを再計算してしまうため時間がかかるので、マクロの自動記録を利用して「Aシート→Bシート→Cシート→Dシート→Eシート」と、必要なシートだけを順番に計算させる事で、処理時間短縮をさせる事をする事ができました。 EシートとFシートは表示させておいて、その他のA~Dシートは非表示にしました。 Eシートには、A~Dシートで計算した結果が表示されるようになっています。 ですが、A~Dシートを非表示にして作成したマクロを実行すると、エラーが出てしまい上手くできません。 A~Dシートを非表示にしていても、ブック全体を再計算させる事はできます。 非表示にしたシートをマクロで計算させるには、どのようにしたら良いでしょか? アドバイスをお願い致します。 登録したマクロは下記のようになっています。 Sub 計算() Sheets("Aシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Bシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Cシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Dシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select End Sub

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • excelのvbaでのシート指定が時々おかしい

    時々なんですが、excelのVBAでシート指定をしているにもかかわらず、その指定がされてない時があります。 たとえば sheets("sheet1").select sheets("sheet2").select RANGE("A1") = "aa" とした時に、sheet1にaaが入ってしまうような感じです。 毎回なるわけではないので、指定の方法が間違ってるとかではない気がするんですが…。 なぜこのようなことがおきるのでしょうか?

  • シート名を変更してもVBAでエラーにならないように

    VBA初心者です。 VBAで複数のシートを選択するという動作を行う時、シート名を変更するとエラーになってしまうのですが、どうすれば回避できるのでしょうか?オブジェクト名?が使用できるらしいのですが、エラーになってうまく動作しません。指定の仕方を変える必要があるのでしょうか? 例えば、  Sheets(Array("第1週", "第2週", "第3週", "第4週", "第5週")).Select  Sheets("第1週").Activate と記述してあって、シート名の"第1週"を"9月1日"とかに変更したら、当然エラーになりますが、 左のプロジェクトエクスプローラにある、Sheet1(第1週)の名前の変わらないオブジェクト名"Sheet1"の方で指定したいと思うのですが、単純に名前を置き換えても動作しません。どのように指定すればよいのでしょうか?

  • ワークシート上で印刷設定をしたい。

    印刷の設定をワークシート上で行うようにしたいのですが、 やり方を教えてください。 下の場合、 [シート]Sheet1、Sheet2 [枚数]2 ですが、ワークシートに例えば B2から下(つまりB3、B4・・・)にシート名、 A2から下(つまりA3・A4・・・)に「印刷」とあれば、B列のシート名のを 印刷対象にする。 C2から下(つまりC3、C4・・・)にそれぞれのシートの枚数を指定して 下記のようなコードにして印刷するようにしたいと思っています。 下の場合Array("Sheet1", "Sheet3")となっていますが、場合によってはシートは1枚かもしれません。こういった具合ですが、どのような コードにすればよいでしょうか?よろしくお願いします。 Sub insatsu() Sheets(Array("Sheet1", "Sheet3")).Select Sheets("Sheet1").Activate ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True End Sub

  • VBAでワークシートを変数にするとき

    たとえばSheet1とSheet2を一度に選択する場合、 Sub Macro6() Sheets(Array("Sheet1", "Sheet2")).Select End Sub と書くと思います。 ワークシートを変数で書く場合は Sub test() Dim ws1 As Worksheet, ws2 As Worksheet Sheets(Array(ws1.Name, ws2.Name)).Select End Sub と、いちいち名前で指定しなければならないのでしょうか? それとももっと別の書き方があるのでしょうか?

  • Excel VBA:ひとつ前に開いていたシート名の取得

    Sheet1,2,3があり、全て同じ種類の「表」が書かれているとします。 例えばクラス名簿だとして、 Sheet1には出席番号1~10の生徒のデータ、 Sheet2には出席番号11~20の生徒のデータ、のように。 各シートのうち、違うのはデータの中身であって、 [出席番号][生徒氏名]などの項目は同じです。 この時、 Sheet1で項目名を変更した時、Sheet2、Sheet3の項目名も同時に変更させたいです。 Sheet1の[出席番号]を[No.]に変更したら、Sheet2,3の[出席番号]も自動的に[No.]に変更させたいです。 また、変更可能なのはSheet1だけでなく、Sheet2の項目を変更した時もSheet1,3の項目を自動的に変更したいです。 常にSheet1の項目を参照するのであれば、 Private Sub Workbook_SheetActivate(ByVal ActSheet As Object) SName = "Sheet1" Sheets(SName).Range("A4:G4").Copy 'Sheet1の項目をコピー Sheets(ActSheet.Name).Range("A4").Select ActiveSheet.Paste '現在アクティブなシートにSheet1の項目をコピー End Sub で可能でした(諸事情によりセル内に「=Sheet1!A4」等と書きたくないです)。 このコードで、 参考するシート名を入れる変数SNameに「1つ前に開いていたシート名」を入れることができれば可能だと思うのですが、 そのようなデータを取得することはできるでしょうか? よろしくお願いします。

  • EXCELのVBAですが。

    EXCELのVBAですが。 Sub macro1() Dim mycnt As Integer Dim sheet_name1 As String Sheets("kekka").Select Range("A1").Select Sheets("shiji").Select mycnt = Range("B1").Value sheet_name1 = Range("c" & mycnt) Sheets("kekka").Select Sheets("kekka").name = sheet_name1 Sheets("kansuke").Select Sheets("kansuke").Copy Before:=Workbooks("2007年報告.xls").Sheets(3) End Sub (やりたいこと) B1に入っている数値でC1からC10に入っているあるシートの名前(たとえばkansukeとする)を取り、その名前で kekkaというシート名をkansukeという名前に変える。 名前を変えたkansukeというシートを別の2007年報告というbookにコピーを転送する。 (質問)上のコードで実はkansukeと書いてあるところは,B1の値次第で当然いろいろに 変化するため、そのシート名にとらわれない書き方をしたいのですがどう記述すればいいのか わかりません。以上お願いします。

  • excel vba 非表示のシートに入力するには?

    エクセルで簡単な学習ツールを作っています。 シートは「問題」シートと「解答」シートの2シートがあり、「解答」シートは非表示になっています。 「問題」シートで解答者の名前をプルダウンで選択し、正解だと思う解答のラジオボタンを選択し、 最後に解答ボタンを押すと、入力した内容が非表示の「解答」シートに反映するような仕組みに したいのですが、どうすればうまくいきますか? 現在 Private Sub workbook_open() Sheets("問題").Select Range("K1") = 0 Range("K2") = 0 Sheets("解答").Select Range("B2") = 0 Range("C2") = 0 Sheets("問題").Select Range("B2") = "" End Sub と入力していますが、「解答」シートが非表示になっているためデバックになります。 非表示の「解答」シートに入力内容が反映する方法を教えてください。

  • 複数シートの選択

    エクセルVBAで複数シートの選択をしたいのです。 シート名やシートの位置が変更される可能性があるので オブジェクトで指定したいのですが 記述方法が分かりません。 ##シートの位置 Sub mac1() Worksheets(Array(2,5)).Select End Sub ##シート名 Sub mac2() Worksheets(Array("aaa","あああ")).Select End Sub

専門家に質問してみよう