[[20190811170904]] 『特定の名前のシートがある時だけ、一部のシートを』(プププ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の名前のシートがある時だけ、一部のシートを非表示にしたい』(プププ)

VBA勉強中の初心者です。
クライアントからexcelのデータが送られてくるのですが、
シート名が 0001、0002、00301、005505、など数値の入った名前
(基本的には0から始まる数字で桁数は様々)です。

そのデータに頭が9から始まるシート
(上記のシートに加えて9002、90033、99005...など)
が入っている時があるのですが、
その時だけ0001と9から始まるもの以外を非表示にしたいです。

9から始まる名前のシートが無い時はそのままにしたいです。
(9があるデータと無いデータの別の共通の処理も
同一マクロ内に組み入れる予定なので)

VBAでどのように記述したら良いか分からず、
どなたかアドバイス等頂けると助かります。
よろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


こんな漢字でどうでしょうか
 Dim ws As Worksheet

 For Each ws In Worksheets
    If ws.Name Like "9*" Or ws.Name = "0001" Then

(マナ) 2019/08/11(日) 17:40


 素直にこんな感じ

 Sub test()
     Dim ws As Worksheet, flg As Boolean
     For Each ws In Sheets
         If ws.Name Like "9*" Then flg = True: Exit For
     Next
     If Not flg Then Exit Sub
     For Each ws In Sheets
         If (ws.Name <> "0001") * (ws.Name Like "[!9]*") Then ws.Visible = xlSheetHidden
     Next
 End Sub
(seiya) 2019/08/11(日) 17:42

編集かぶったけど書いて島たので投稿しておきます。

とりあえずシートを非表示にする命令はわかりますか?
また、ループ処理はどの程度わかりますか?

どちらもわかるというなら、
すべてのシートを巡回して、シート名が
「0001」に一致しない and 「9*」が含まれない とう条件を満たす場合は、そのシートを非表示にするという記述をすればよいとおもいます。

なお、シートを非表示にする命令の方はマクロの記録でしらべることができますので、ループ処理の一例を紹介します。

    Sub ループ一例()
        Dim mySH As Worksheet

        For Each mySH In Worksheets
            Debug.Print mySH.Name
        Next

    End Sub

(もこな2) 2019/08/11(日) 17:45


誤字はあるは、条件も間違ってるはで散々でした。

(マナ) 2019/08/11(日) 17:51


もこな2様 シートの非表示はvisibleという事は分かったのですが、
〜がある時・ない時の条件分岐?がよく分からず手こずってしまいました。
ループ処理はよく分からず、今改めて調べて
これで各シートを表示or非表示にする判別をしているのかと理解したレベルです。
For Each〜nextってよく見かけるので恐らく基本ですよね...基礎から勉強せねばと反省です。

seiya様 早速excelで試してみたところ無事できました。
ありがとうございます。
解読して自分でも記述できるようにしたいです。

マナ様 とんでもないです。ありがとうございます!
(プププ) 2019/08/11(日) 19:25

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.