アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルです。

例えば、
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したいです。
ご回答よろしくお願いします。

「指定したシート名以外を非表示にするには?」の質問画像

A 回答 (2件)

Arrayにしたいということなのでご要望とは違いますが


1つだけの指定なら下記のように。

Dim sht As Worksheet
SName = "A"

For Each sht In ThisWorkbook.Sheets
If sht.Name <> SName Then sht.Visible = xlSheetHidden
Next
    • good
    • 6
この回答へのお礼

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

お礼日時:2012/11/05 22:48

こんばんは!


一例です。
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
    • good
    • 4
この回答へのお礼

非表示、再表示
どちらのマクロも作ってもらえて感謝です。

ありがとうございました。

お礼日時:2012/11/05 22:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A