[VBA] Excelの複数シートをループを使わず一行の処理で非表示・再表示にすることはできる??

概要

この記事について

Excelのシートに対する一括処理は、
次のようにシート名の配列としてSheetsオブジェクトを生成することで
ループを使わず一行の処理で実装することが可能。

1'社員シートと勤怠シートをまとめて削除する
2Call Sheets(Array("社員", "勤怠")).Delete

このようにして、
複数のシートの非表示・再表示(Visibleプロパティの変更)を、
ループを使わず一行の処理でできるかどうか?という命題がある。

探したけれど、これについて言及している日本語サイトは存在しなかったので、
検証した結果を記したい。

ちなみにstackoverflowなどには
これについていくつか記事が存在した。

検証

非表示にすることはできる?

問題なくできる。

1Sub hideSheetArray()
2    ActiveWorkbook.Sheets(Array("accounting", "finance")).Visible = False
3End Sub

上の関数は、
現在開いているブックのaccountingシートとfinanceシートを非表示にする。

再表示することはできる?

こちらは できない

1Sub unHideSheetArray_notWorking()
2    ActiveWorkbook.Sheets(Array("accounting", "finance")).Visible = True
3End Sub

UI上でも再表示は一つずつしかできないので、
Visibleプロパティの特徴と考えるしかなさそう。

再表示のUI

一括で再表示にするにはループを使うしかない

残念ながらそのようである。

1Sub unHideSheetArray()
2    Dim sh As Worksheet
3    
4    For Each sh In ActiveWorkbook.Sheets(Array("accounting", "finance"))
5        sh.Visible = True
6    Next sh
7    
8End Sub

関連記事

comments powered by Disqus