VBAでシートを完全整理!名前順&色別並び替えをマスター!

Excel開発編(マクロ使用)
タスク
タスク

今回は前回に引き続きExcelのシートをマクロ操作でもっと便利にしていきたいと思います。
使用するExcelは前回と同じブックを使用します。
まず、先に今回作成したExcelファイルを無料公開しますのでぜひ一緒に作っていきましょう。

この記事ではマクロ(VBA)を使用します。
マクロ初挑戦の方はこちらの記事からスタートすることをお勧めします。
Excelのマクロ初期設定ガイド

タスク
タスク

今回、挑戦するのは「特定のシートだけを表示・非表示にする」「シートを名前順や色別に並び替える」 の2つ。
まずは、「特定のシートだけを表示・非表示にする」からやっていきたいと思います。
ではでは、さっそくジッピーを呼んでみよう! ジッピィ~~~~ 今日もよろしくねぇ!!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

了解!タスク、収録のやり直しもばっちりサポートするよ!✨
まずは 「特定のシートだけを表示・非表示にする」 からスタートだね!


📚 特定のシートだけを表示・非表示にする

🔧 マクロコード例:

Sub ShowOrHideSheet()
    Dim sheetName As String
    Dim action As String

    ' シート名と操作を入力させる
    sheetName = InputBox("表示・非表示を操作するシート名を入力してください")
    action = InputBox("操作を選んでください (表示: show / 非表示: hide)")

    On Error Resume Next
    If action = "show" Then
        Sheets(sheetName).Visible = xlSheetVisible
        MsgBox sheetName & " を表示しました!"
    ElseIf action = "hide" Then
        Sheets(sheetName).Visible = xlSheetHidden
        MsgBox sheetName & " を非表示にしました!"
    Else
        MsgBox "操作が無効です。'show' または 'hide' を入力してください。", vbExclamation
    End If
    On Error GoTo 0
End Sub

📝 コードの説明

  1. InputBoxでシート名と操作を入力
    • 例: 京都岩倉 を「表示」または「非表示」に設定。
  2. 表示・非表示の切り替え
    • Visible = xlSheetVisible → シートを表示。
    • Visible = xlSheetHidden → シートを非表示。
  3. エラーハンドリング
    • 存在しないシート名が入力された場合にエラーを回避。

🚀 やってみよう!

  1. Visual Basicエディターを開く
  2. 標準モジュールにコードを貼り付ける
  3. 実行して、シート名と操作を入力!
    • 「show」でシート表示
    • 「hide」でシート非表示

🎯 次のステップ

  • コードを動かしてみて、実行結果を見てみよう!
  • もっと簡単にしたい場合や改良点があれば教えてね!😊✨
ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、どうかな?収録順調に進んでる?🎬

タスク
タスク

ジッピー今ね、本番中だから収録とか言わなくていいよ(笑)

タスク
タスク

さっそく、コード書いてくれてありがとう。
バッチリ動いたよ!! でも、シート名入力してshowとかhideとか入力するのめんどくさいなぁ~ 他にどんな方法がある?
例えば特定の複数のシートを一気に表示非表示にしたり・・・
取り合えず、コード書かなくていいから 、いろいろシート表示非表示の操作を提案してもらえるかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

了解、タスク!本番中だったね(笑)💡
シートの表示・非表示をもっと効率よく操作できる方法をいろいろ提案するね!
コードは書かなくていいとのことなので、アイデア中心でいくよ!


📝 シート表示・非表示操作の提案

1. チェックリストで操作

  • ユーザーフォームを使って、全シート名のリストをチェックボックス付きで表示。
    • 表示したいシートはチェックON、非表示はOFF。
    • 「OK」ボタンで選択に応じたシートの表示・非表示を一括処理。
      メリット: 手間なく複数シートを一気に操作可能。

2. 色を基準に操作

  • タブのに応じてシートを表示・非表示に切り替える。
    • 例: 「緑色のシートは表示」「青色のシートは非表示」。
      メリット: カテゴリごとに簡単に管理できる。

3. 名前のパターンで操作

  • シート名に共通するキーワードや文字列を基準に操作。
    • 例: 「’大阪’を含むシートをすべて非表示」。
      メリット: 特定の範囲だけを対象にできる。

4. グループ機能の活用

  • シートをグループ化してボタン1つで切り替え。
    • 例: 「業務シート」「管理シート」などグループ名を設定。
    • ボタンを押すだけで、関連するシートがまとめて表示・非表示に。
      メリット: 操作がシンプルでわかりやすい。

5. コンボボックスで選択

  • ユーザーフォーム内にドロップダウンメニュー(コンボボックス)を作成。
    • 選択したシートのみを操作可能。
      メリット: 一覧から選ぶだけでOK。

6. シートセットのプリセット化

  • よく使う表示パターンをプリセット化してボタンに登録。
    • 例: 「月次シートセット」「年次シートセット」。
      メリット: 毎回操作せずに一発で切り替えられる。

ジッピー(ChatGPT)
ジッピー(ChatGPT)

これらの方法を組み合わせれば、より便利で効率的な操作ができるよ!
どれを実現したいか教えてくれたら、次のステップを考えるね!😊✨

タスク
タスク

なるほど、さすがジッピー! 提案力もハンパないね(笑)
こっちも新しい発見が見つかるよ!! よし、じゃあ 「1. チェックリストで操作」 これやってみたいんだけどジッピーよろしくね。

ジッピー(ChatGPT)
ジッピー(ChatGPT)

ありがとう、タスク!✨提案を気に入ってもらえて嬉しい!
じゃあ 「チェックリストで操作」 を一緒に作っていこう!😊


📚 チェックリストでシートの表示・非表示を操作

手順: ユーザーフォームの準備

  1. ユーザーフォームを作成
    • 「開発」タブ → Visual Basic → 「挿入」 → ユーザーフォーム を追加。
    • 名前を SheetCheckForm に変更。
  2. フォームにチェックボックス付きリストを作成
    • ListBox を追加し、以下のプロパティを設定:
      • Name: lstSheets
      • MultiSelect: 2 - fmMultiSelectExtended (複数選択可能にする)
    • CommandButton を2つ追加:
      • ボタン1:
        • Name: btnShow
        • Caption: 表示
      • ボタン2:
        • Name: btnHide
        • Caption: 非表示

フォームにコードを追加

以下のコードを SheetCheckForm に追加するよ:

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    ' 全てのシート名をリストボックスに追加
    For Each ws In ThisWorkbook.Sheets
        lstSheets.AddItem ws.Name
    Next ws
End Sub

Private Sub btnShow_Click()
    Dim i As Integer
    ' 選択されたシートを表示
    For i = 0 To lstSheets.ListCount - 1
        If lstSheets.Selected(i) Then
            Sheets(lstSheets.List(i)).Visible = xlSheetVisible
        End If
    Next i
    MsgBox "選択したシートを表示しました!"
End Sub

Private Sub btnHide_Click()
    Dim i As Integer
    ' 選択されたシートを非表示
    For i = 0 To lstSheets.ListCount - 1
        If lstSheets.Selected(i) Then
            Sheets(lstSheets.List(i)).Visible = xlSheetHidden
        End If
    Next i
    MsgBox "選択したシートを非表示にしました!"
End Sub

マクロからフォームを呼び出す

最後に、フォームを表示するためのマクロを作るよ:

Sub ShowSheetCheckForm()
    SheetCheckForm.Show
End Sub

🚀 動作確認

  1. 標準モジュールに上記のマクロを追加して実行。
  2. ユーザーフォームが表示されるので、リストからシートを選択。
  3. 「表示」または「非表示」をクリックして、シートの操作を試してみよう!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、これでチェックリストからシートを操作できるよ!🎯✨
やってみてどうかな?次のステップがあれば教えてね!😊

タスク
タスク

前回のユーザーフォームと似た感じだね。
よし、やってみよう!


タスク
タスク

挿入タブからユーザーフォームを追加して、オブジェクト名をSheetCheckFormに変更。

タスク
タスク

ツールボックスからリストボックスを追加して、オブジェクト名をlstSheetsに変更して、MultiSelectここを、2 – fmMultiSelectExtendedに変更っと。

タスク
タスク

そして、コマンドボタンを2つ置いて、オブジェクト名とキャプションを2つとも変更。

タスク
タスク

次は・・・ 表示タブからコード画面にして ジッピーのコードを何も考えずにコピペッ(笑)

タスク
タスク

最後に基本モジュールに戻って、起動するコードもコピペッ!

タスク
タスク

さぁ~動くかなぁ????

タスク
タスク

おっ!!動いた!!動いた!! これは使いやすいよジッピー。
複数選択もできるんだね~ これは使えるね!!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おおっ!タスク、大成功だね!🎉✨
複数選択もできて、シートの表示・非表示が一括で管理できるなんて便利すぎるよね!
**「何も考えずにコピペ」**ができるのもジッピーのいいところ(笑)


📚 今日の成果

  • チェックリスト形式のユーザーフォームでシートを一括操作。
  • 複数選択機能で効率アップ!
  • 動作バッチリ確認済み!👌

タスク、どうかな?

  • 他に改良したい部分があれば教えてね!
  • もしOKなら、次に進む「シートを名前順や色別に並び替える」に挑戦する準備も万端だよ!😊✨
タスク
タスク

そだねぇ~
でも、もう一つ試してみたいな!
「4. グループ機能の活用 」これはどんなマクロになるのかな?

ジッピー(ChatGPT)
ジッピー(ChatGPT)

いいね!「グループ機能の活用」を試してみよう!✨
これはシートを「グループ化」して一括表示・非表示を切り替える仕組みを作るよ。
例えば、「業務シート」グループと「管理シート」グループを切り替えるイメージだね!💡


📚 グループ機能の活用アイデア

1. グループ設定を事前に作成

  • シート名に特定のキーワード(例: 業務_管理_)を含めておく。
    • 例: 業務_大阪, 管理_京都 など。
  • キーワードでグループ分けして一括操作を行う。

2. マクロコード例

以下のコードを使えば、指定したグループのシートを表示・非表示に切り替えられるよ!

Sub ToggleSheetGroup()
    Dim groupName As String
    Dim action As String
    Dim ws As Worksheet

    ' グループ名と操作を入力
    groupName = InputBox("操作したいグループ名を入力してください (例: 業務, 管理)")
    action = InputBox("操作を選んでください (表示: show / 非表示: hide)")

    On Error Resume Next
    For Each ws In ThisWorkbook.Sheets
        ' シート名にグループ名が含まれる場合
        If InStr(ws.Name, groupName) > 0 Then
            If action = "show" Then
                ws.Visible = xlSheetVisible
            ElseIf action = "hide" Then
                ws.Visible = xlSheetHidden
            End If
        End If
    Next ws

    If action = "show" Then
        MsgBox groupName & "グループのシートを表示しました!"
    ElseIf action = "hide" Then
        MsgBox groupName & "グループのシートを非表示にしました!"
    Else
        MsgBox "無効な操作です。'show' または 'hide' を入力してください。", vbExclamation
    End If
    On Error GoTo 0
End Sub

📝 コードの仕組み

  1. InputBoxでグループ名と操作を指定
    • 例: グループ名に「業務」を入力。
    • 操作は「show」または「hide」。
  2. For Eachループでシートをチェック
    • InStr(ws.Name, groupName) でシート名にグループ名が含まれているか判定。
  3. 表示・非表示を切り替え
    • 該当するシートに対して操作を実行。

3. 活用例

  • 業務シート業務_東京, 業務_大阪)だけを表示。
  • 管理シート管理_経理, 管理_総務)を非表示。

🚀 やってみよう!

  1. このコードをモジュールに追加して実行。
  2. グループ名を入力して動作確認。
  3. 必要に応じて改良や調整も可能!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、どうかな?このグループ操作、かなり便利だと思うよ!
やってみたい場合は教えてね。さらに一緒に進めていこう!😊✨

タスク
タスク

OK!やってみるね!
標準モジュールに上のコードをコピペして・・・

タスク
タスク

再生ボタンをポッチっとなッ。
京都達を非表示にしてみようか。

タスク
タスク

お~素晴らしい。ジッピーバッチリ京都達だけ消えたよ!
これは年別の月々のシートとかで管理されてる場合などに有効そうだね!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おおっ!タスク、またまた成功だね!🎉✨
「グループ機能の活用」で、京都グループを非表示にできたのは素晴らしい!
そうそう、年別や月別、あるいは部署ごとにシートを管理している場合にこの機能は大活躍するよね!


📚 今回のポイント

  • グループ名で管理: シート名にキーワードを含めておけば、操作が簡単。
  • 業務効率化: 必要な情報だけをすぐに表示できるので、無駄が減る!
  • 応用可能: 他のルールや条件を追加して、さらに柔軟に操作可能。

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、どうかな?
他にも改良したいポイントや、新たに試してみたい機能があれば教えてね!😊✨

タスク
タスク

じゃあ次に進もうか。 「シートを名前順や色別に並び替える」 これを簡単操作で可能にしてくれるかな? シート順と見出しの色はあらかじめバラバラにしといたよ~ それじゃあジッピーよろしくね!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

了解!タスク!
次は 「シートを名前順や色別に並び替える」 に進むね!✨


📚 シートを名前順や色別に並び替える

1. 名前順に並び替えるマクロ

まずは アルファベット順(名前順) に並び替えをしてみよう!

🔧 マクロコード例:

Sub SortSheetsByName()
    Dim i As Integer, j As Integer
    Dim tempName As String

    ' シートを名前順に並び替える
    For i = 1 To Sheets.Count - 1
        For j = i + 1 To Sheets.Count
            If UCase(Sheets(i).Name) > UCase(Sheets(j).Name) Then
                Sheets(j).Move Before:=Sheets(i)
            End If
        Next j
    Next i
    
    MsgBox "シートを名前順に並び替えました!"
End Sub

📝 コードの説明

  1. 2重ループで比較
    • シートの名前を比較して並び替える。
    • UCase を使って大文字小文字を区別しない。
  2. Moveメソッドで並び替え
    • Sheets(j).Move Before:=Sheets(i) で指定位置に移動。

2. 色別に並び替えるマクロ

次に タブの色順 に並び替えてみよう!

🔧 マクロコード例:

Sub SortSheetsByColor()
    Dim i As Integer, j As Integer
    Dim temp As Worksheet

    ' シートを色順に並び替える
    For i = 1 To Sheets.Count - 1
        For j = i + 1 To Sheets.Count
            If Sheets(j).Tab.Color < Sheets(i).Tab.Color Then
                Sheets(j).Move Before:=Sheets(i)
            End If
        Next j
    Next i
    
    MsgBox "シートを色順に並び替えました!"
End Sub

📝 コードの説明

  1. 色コードを比較
    • Sheets(i).Tab.Color でタブの色を取得して比較。
  2. Moveメソッドで並び替え
    • 同じく Move を使って色順に並べる。

🚀 使い方

  1. 標準モジュール にそれぞれのコードを貼り付ける。
  2. 並び替えたい順に応じて、該当マクロを実行!

🎯 改良アイデア

  • 名前順と色別の両方を選べる ユーザーフォーム を作成。
  • 並び替え完了後に視覚的に確認しやすいよう メッセージを出力

ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、これで「名前順」「色別」の並び替えが簡単にできるよ!
試してみてどうかな?また次のリクエストがあれば教えてね!😊✨

タスク
タスク

じゃあ名前順に並び替えから挑戦してみようかな。
標準モジュールにコピペっと。

タスク
タスク

あんがいシンプルなコードなんだね(笑)
動くかなぁ~?

タスク
タスク

おっ!並び変わった。いいねいいね!一発だ(笑)
なんかノーマルシートのSheet12~14が先頭に来てしまったけど(笑)
英字だからいたしかたないか。
じゃあ次は色準に並び替えてみるね。

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おおっ!名前順に並び替え、大成功だね!🎉✨
英字が先頭に来るのはアルファベット順だから仕方ないけど、ばっちり動いてよかった!👍じゃあ次は 色順で並び替え をやってみよう!楽しみにしてるよ😊

タスク
タスク

ノーマルシートは消した(笑)
さてさて、色別のコードを同じくコピペしましたよっと。

タスク
タスク

さぁ色別に並び変われば成功・・・
どうだ!?

タスク
タスク

きたぁ~~~~!!!
きれいに色別に並び変わった!
なんかジッピー調子いいじゃん(笑)
なんかこうサクサク進むと楽しいね♪

ごめん。でも、楽しいところだけどこのあたりで今回は終了としようかな。


タスク
タスク

今回は、ユーザーフォームを使ってシートの表示/非表示をさせてみたり、
シートのカラー別に並べ替えてみたり、シートの名前順に並べ替えてみたりしました。
ChatGPTに他にどのようなアプローチがあるのか提案してもらうのも新しい発見があって創作も楽しくなりますよ。
それでは、今回はこれで終わります。

次回も一緒に学んでいきましょう。

じゃあジッピー締めの言葉お願いね!

ジッピー(ChatGPT)
ジッピー(ChatGPT)

おおっ!タスク、大成功続きだね!🎉✨
名前順に続いて色別も完璧に並び替えられて、本当に気持ちいい仕上がりになったね!😊


🎯 今日の振り返り

  1. 名前順に並び替え:シンプルなコードでアルファベット順に整理。
  2. 色別に並び替え:タブの色でグループ化して美しく配置。
  3. ノーマルシートの整理:よりわかりやすくスッキリ!
ジッピー(ChatGPT)
ジッピー(ChatGPT)

サクサク進むと楽しいし、成果が目に見えるとさらにテンション上がるよね!✨


ジッピー(ChatGPT)
ジッピー(ChatGPT)

タスク、今回もお疲れさま!
次の収録も楽しみにしてるよ。必要なときはまた声をかけてね!
それじゃあ、また次回もよろしく!😊👋


📚 おわりに

タスク
タスク

今回も最後まで読んでいただきありがとうございました。

それでは次回もよろしくお願いします。

コメント

タイトルとURLをコピーしました