見出し画像

21-複数シートを一気に表示!(エクセルマクロ)

表示させたいシートを複数指定して表示させる!

皆さんこんにちは。
前回(20-複数シート一気に表示!)は非表示シートを一気に表示させるマクロをご紹介しました。
今回は表示させたいシートを複数指定して開くマクロをご紹介します。
前回書いたマクロにコードを追加して書いていきます。

◆イメージ

画像1

◆書くマクロ

画像4

★黄色の部分が前回のコードの全てです。

◆解説

Dim mysheet As Worksheet
③Dim sentaku As Range
⑥Dim i As Long
③sentaku = Worksheets("マクロ").Range("A1:A4")

②For Each mysheet In Worksheets
 ⑤For i = 2 To 4
   ④If mysheet.Name = sentaku(i, 1) Then
    ①mysheet.Visible = True
   ④End If
 ⑤Next

Next

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

まず、このマクロの一番の目的のコードは①です。
①mysheet.Visible = True
この、シートを表示させるコード。
表示させたいシートは◆イメージにあるように「マクロ」シートのA列に書かれているシート名(1月、2月、3月)です。
②For Each mysheet In Worksheets
で1シート取得した後、
そのシートの名前が「1月」だったらシートを表示させたい。
   ↓ ↓
   If mysheet.Name = ”1月” Then
    ①mysheet.Visible = True
   End If
こういうことですよね。
ここで”1月”の部分を2月、3月と、次の図の赤枠から順番に取得したい、と考えます。

画像3

★赤枠をみて思います。そうだ!あの手を使おう!

◆指定範囲の中の値を順番に取得する


画像4

★参照記事<12-マスタを配列にして配列から値をとりだす

これをまねして書けばいいのです!

「マクロ」シートの赤枠を指定する範囲とすると
③sentaku = Worksheets("マクロ").Range("A1:A4")

sentakuは変数で範囲を表すものとして作りますので、
③Dim sentaku As Range(sentakuは範囲の変数です。)

◆ここまで書けた状態のマクロ

Dim mysheet As Worksheet
③Dim sentaku As Range
③sentaku = Worksheets("マクロ").Range("A1:A4")

②For Each mysheet In Worksheets
   If mysheet.Name = ”1月” Then
    ①mysheet.Visible = True
   End If
Next

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

◆③により、順番に値を取得させる準備はできました。
これを利用して”1月”の部分を書き換えると、、

If mysheet.Name = sentaku(2, 1) Then
 ①mysheet.Visible = True
End If
★”1月”は③の範囲を確認すると2行目の1列にある値ですからね。

では問題です!
sentaku(2, 1) の部分を2月、3月と変化させるにはどれを変数にするべきでしょうか!?

そうです。行番号が3、4と変われば
sentaku(3, 1)  ➡ 2月 
sentaku(4, 1)  ➡ 3月
となることがわかります。
↓↓

If mysheet.Name = sentaku(i, 1) Then
 ①mysheet.Visible = True
④End If


◆「i」の範囲を指定する。

最後に、変数「i」を変化させるためのコードを書きます!
ループさせる部分をFor ・Nextで挟んで、Forの後ろには「i」の範囲を指定します。

 ⑤For i = 2 To 4
   ④If mysheet.Name = sentaku(i, 1) Then
    ①mysheet.Visible = True
   ④End If
 ⑤Next

i」という変数をつくったので、変数宣言をしておきます。
⑥Dim i As Long(i は整数の変数です。)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

Dim mysheet As Worksheet
③Dim sentaku As Range
⑥Dim i As Long
③sentaku = Worksheets("マクロ").Range("A1:A4")

②For Each mysheet In Worksheets
 ⑤For i = 2 To 4
   ④If mysheet.Name = sentaku(i, 1) Then
    ①mysheet.Visible = True
   ④End If
 ⑤Next

Next
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

以上です。
今回は長かったですね。
実務で複数のシートを一気に開きたいときにはとても便利ですので使ってみてくださいね。
★非表示シートを全て開く。という実行で十分であれば前回の記事<20-複数シート一気に表示!>コード4行でできますのでそちらをご参考ください。

この記事が気に入ったらサポートをしてみませんか?