[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の名前のシートがある時だけ、一部のシートを非表示にしたい』(プププ)
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.