Excelのこととか色々

マクロをどんな Excel ファイルにも実行できるように設定して、3秒かかる操作も1秒で完了。あといろいろ書いてみます・・・

【Excel/VBAのこと25】ツールを作る 列(行)を非表示にする応用編(Group)

【Excel/VBA のこと 25】

   f:id:tuna-kichi:20200223230814p:plain

 

 

 

こんな感じの表を使っています。 

サンプルテーブル

列Aの基準となるデータと各列のデータを目視で確認しているのです。

 

列C、Dくらいまでなら、あまり問題ないのですが、

それ以上先になると、確認しなければいけない行がずれてしまいます。

 

このような作業は、比較するものを隣同士に並べれば楽ちんです。

つまり、基準列と比較列以外の列を非表示にしてしまいます。

そして、私は、再表示もすぐにできる グループ化の方を好みます。

 

外観

こんな感じ。

  列選択ツール外観


チェックボックス

コマンドボタン

オプションボタン x 6

 

列の項目名の表示にオプションボタンを使いましたが、

リストボックスとかラベルでも良いかもしれません。

私が、実際に使用しているテーブルは40列くらいあります。

 

マクロ

'モジュールレベル変数です。Column No の略
Dim ColNo As Long

                  

コマンドボタン(キャンセルボタン)

Private Sub cmdCancel_Click()
  End
End Sub

                  

オプションボタン1

Private Sub op1_Click()
  ColNo = 2 '列Aは基準列なので、+1します
  Call MoveToColumn 'メインのマクロを呼び出します
End Sub

                  

オプションボタン2

Private Sub op2_Click()
  ColNo = 3
  Call MoveToColumn

End Sub

                  

オプションボタン3

Private Sub op3_Click()
  ColNo = 4
  Call MoveToColumn

End Sub

                  

オプションボタン4

Private Sub op4_Click()
  ColNo = 5
  Call MoveToColumn

End Sub

                  

オプションボタン5

Private Sub op5_Click()
  ColNo = 6
  Call MoveToColumn

End Sub

                  

オプションボタン6

Private Sub op6_Click()
  ColNo = 7
  Call MoveToColumn

End Sub

                  

指定列選択、それ以外は非表示にする

Sub MoveToColumn()
 Dim r As Long '行番号を格納します(Row)
 Dim c As Long '列番号を格納します(Column)
 Dim LastC As Long '最終列を格納します

 

 'グループ化を解除します
 'グループ化でないときに実行してもエラーになりません
 Columns.ClearOutline

 r = Selection.Row '行番号を取得する
 Cells(r, ColNo).Select '列番号を取得する
 LastC = Cells(1, Columns.Count).End(xlToLeft).Column '最終列を取得する

 For c = 2 To 8
  If chHidCol = True Then 'もしチェックボックスが入っていたら・・・
   If c <> ColNo Then 'もし指定の列でなければ・・・
    Columns(c).Group 'その列をグループ化にする
   End If

  Else 'チェックが入っていなければカーソルだけ移動する
   Cells(r, ColNo).Select
  End If
 Next c


 'このコードでグループ化した列を閉じます
 '最後の数字を「2」にすると開きます

 ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1

 Unload frmSelectColumn 'フォームを閉じます

End Sub

                  

フォーム初期化

Private Sub UserForm_Initialize()

  'グループ化を解除します
  'グループ化になっていないときに実行してもエラーになりません
  Columns.ClearOutline 
End Sub

                  

標準モジュール

Sub 列選択()
 frmSelectColumn.Show
End Sub

********************************************************** 

このツール、マクロは特殊な作業用なので、リボンに登録せず

その作業をするExcelに直接作成しました。

 

シート上にボタンを設置

列選択ボタン・・・フォームを起動させます

グループ化を解除ボタン・・・グループ化を解除します フォームは起動しません

  マクロ実行結果

 

列をグループ化するマクロですが、行をグループ化する場合も

おなじ要領で作成できるはずです。

 

**********************************************************

 

個人用マクロブックについてはこちら

www.tuna-kichi.com

 

リボンに登録についてはこちら

www.tuna-kichi.com

 

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

にほんブログ村 子育てブログ 幼稚園児育児へ
にほんブログ村
にほんブログ村 英語ブログ 初心者英語へ
にほんブログ村
にほんブログ村 IT技術ブログ VBAへ
にほんブログ村

==================================

  Graspyで無料プログラミング講座を受講する