VBAを使うと色の塗りつぶしがない行や列の表示・非表示を切り替えることができます。
このページでは色のついたセルがある行や列のみを表示したり非表示にしたりするプログラムを紹介します。
・列の表示・非表示の切り替え(セルが色で塗りつぶされているかどうかを判定)
・VBA入りのエクセルファイルをダウンロード可能
それでは以下で詳しく紹介していきます。
目次
エクセルマクロVBAで色の塗りつぶしがない行や列を表示・非表示で切り替える
今回は以下の手順で、データ入力したシートから別シートへ蓄積させるプログラムを作っていきます。
1. 色の塗りつぶしがない行を非表示にする
2. 非表示の行を再表示させる
3. 色の塗りつぶしがない列を非表示にする
4. 非表示の列を再表示させる
以下で詳しく説明していきます。
1. 色の塗りつぶしがない行を非表示にする
上記のように、エクセルのいくつかのセルで色で塗りつぶされています。
VBAを設定したボタンを押すと、色で塗りつぶされたセルが存在する行を非表示にします。
このVBAプログラムは、後半のプログラムAとして解説しています。
ダウンロードできるエクセルでは「Sheet1」が対象です。
2. 非表示の行を再表示させる
1で非表示にした行を、ボタンを押して再表示させます。
このVBAプログラムは、後半のプログラムBとして解説しています。
ダウンロードできるエクセルでは「Sheet1」が対象です。
このように1と2で行の表示・非表示を切り替えることができます。
3. 色の塗りつぶしがない列を非表示にする
上記のように、エクセルのいくつかのセルで色で塗りつぶされています。
VBAを設定したボタンを押すと、色で塗りつぶされたセルが存在する列を非表示にします。
このVBAプログラムは、後半のプログラムCとして解説しています。
ダウンロードできるエクセルでは「Sheet2」が対象です。
4. 非表示の列を再表示させる
3で非表示にした列を、ボタンを押して再表示させます。
このVBAプログラムは、後半のプログラムDとして解説しています。
ダウンロードできるエクセルでは「Sheet2」が対象です。
このように1と2で行の表示・非表示を切り替えることができます。
ボタンにVBAプログラムを登録
上記の画像では、VBAプログラムをボタンに登録しています。
ボタンにVBAプログラムを登録することで、ボタンを押下しプログラムを実行することができます。
ボタンをVBAプログラムを設定したい場合は、以下で動画も交えて設定方法を紹介しているので、そちらをご覧ください。
VBA入りのエクセルファイルをダウンロード
以下で紹介しているVBAプログラムをそのまま使いたい人は、以下のフォームからダウンロードできます。
登録したメールアドレスへ「VBAプログラムが含まれたエクセル」を送信します。
本プログラムの内容をそのまま使用可能です。ぜひお仕事にお役立てください。
それでは、以下でプログラムについて詳細を説明します。
VBA作成前の事前準備
ExcelでVBAを使うためにはいくつかの準備が必要です。
具体的には以下です。
以下で説明します。
1. ExcelでVBAを使うための事前準備
エクセルVBAを使うためには、保存ファイルの拡張子変更、Excelの基本設定変更の2つをしておきます。
2つともで難しい作業はなく、それぞれ1分もあれば設定変更可能です。
上記に関しては、以下の記事で解説をしています。
もしVBAを使うための準備段階に不安がある人は上記をご覧ください。
この内容は以下の動画で紹介しています。
入門エクセルマクロの使い方|マクロ作成から実行までを徹底解説
文字や画像だけで分かりづらい人は上記の動画をご覧ください。
VBAプログラムソースA|行を非表示にする
今回紹介するプログラムの概要は以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
'プログラム0|変数宣言の指定 Option Explicit 'プログラムA-1|プログラム開始 Sub Sample1_HideRows() 'プログラムA-2|最終行を取得 Dim cmax As Long cmax = Range("C65536").End(xlUp).Row 'プログラムA-3|最終行まで処理 Dim i As Long For i = 5 To cmax 'プログラムA-4|色で塗りつぶされている行があるかどうかチェック If Rows(i).Interior.ColorIndex = xlNone Then 'プログラムA-4-1|色で塗りつぶされていない行を非表示 Rows(i).Hidden = True Else 'プログラムA-4-2|色で塗りつぶされている行を非表示 'Rows(i).Hidden = True End If Next 'プログラムA-5|プログラム終了 End Sub |
以下で詳しく説明しています。
プログラム0|変数宣言の指定
1 |
Option Explicit |
「Option Explicit」とは、変数宣言を強制するためのものです。
予期しないエラーを防止できるため「Option Explicit」を入力することを習慣化することを推奨しています。
詳しい説明は以下のページで紹介しています。
プログラムA-1|プログラム開始
1 |
Sub Sample1_HideRows() |
「Sub Sample1_HideRows()」のプログラムを開始することを意味します。
VBAではプロシージャという単位でプログラムを呼び出します。
プロシージャの構文は下記となっています。
1 2 3 |
Sub プロシージャ名() '実行プログラム End Sub |
「Sub」で始まり「End Sub」で終わります。
「Sub XXXX」の「XXXX」の部分がプロシージャ名です。
このプロシージャ名はあらゆる文字(アルファベット、ひらがな、漢字、数字など)が使用可能です。
ただし、プロシージャ名の先頭は数字を入れるとエラーとなります。
あとで見たときに、「何のプログラムだったのか?」とならないようにするためです。
なお、「()」の中には何も記入されていません。これは引数なしという意味です。なお、プログラム2-1では引数を受け取ってプログラムを実行します。
初心者の内は、引数ということが分からなくてもVBAプログラムを書くことは可能です。
興味があれば、「VBA 引数」で検索して調べてみてください。
プログラムA-2|最終行を取得
1 2 |
Dim cmax As Long cmax = Range("C65536").End(xlUp).Row |
C列の最終行をcmaxとして取得します。
Debug.Printの検証結果
1 2 3 4 5 6 |
Dim cmax As Long cmax = Range("C65536").End(xlUp).Row Debug.Print cmax >>>cmax:19 |
この事例ではC列の最終行はC19なので、cmax=19となります。
プログラムA-3|最終行まで処理
1 2 |
Dim i As Long For i = 5 To cmax |
5行目からcmax(19)まで順々に1行ずつ繰り返し処理を行います。
プログラムA-4|色で塗りつぶされている行があるかどうかチェック
1 2 3 4 5 6 7 8 9 10 |
If Rows(i).Interior.ColorIndex = xlNone Then 'プログラムA-4-1|色で塗りつぶされていない行を非表示 Rows(i).Hidden = True Else 'プログラムA-4-2|色で塗りつぶされている行を非表示 'Rows(i).Hidden = True End If Next |
このIf文でi=5~cmax(19)で1行ずつ処理を行うとき、そのi行目に色のついたセルが1つ以上あるかどうかをチェックしています。
もし、色のついたセルが0であれば、プログラムA-4-1を実行します。
また、色のついたセルが1つ以上あれば、プログラムA-4-2を実行します。
なお、ここではIf文を使って、判定を行っています。if文については以下で事例を使って説明していますので、そちらをご覧ください。
プログラムA-4-1|色で塗りつぶされていない行を非表示
1 2 |
If Rows(i).Interior.ColorIndex = xlNone Then Rows(i).Hidden = True |
色を塗りつぶしていない行を非表示にします。
上記のように色を塗りつぶしたセルが一つでもあれば、その塗りつぶされている行にもを表示した状態にできます。
プログラムA-4-2|色で塗りつぶされている行を非表示
1 2 3 |
Else 'Rows(i).Hidden = True End If |
こちらはコメントアウトしているので、プログラムはスキップされます。
ただし以下のようにプログラムA-4-2のコメントアウトを削除し、プログラムA-4-1をコメントアウトすることで、色で塗りつぶした行を非表示にすることもできます。
1 2 3 4 5 6 7 8 9 10 |
If Rows(i).Interior.ColorIndex = xlNone Then 'プログラムA-4-1|色で塗りつぶされていない行を非表示 'Rows(i).Hidden = True Else 'プログラムA-4-2|色で塗りつぶされている行を非表示 Rows(i).Hidden = True End If Next |
このようにコメントアウトの位置を変更することで、色を塗りつぶしていないセルのみを表示させます。
仕事に応じて、好きな方を選択して使用することをおすすめします。
プログラムA-5|プログラム終了
1 |
End Sub |
プログラムA-1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
VBAプログラムソースB|行を表示する
2つ目のプログラムを紹介します。
このプログラムBはプログラムAを実行した後に実行することを想定しています。
1 2 3 4 5 6 7 8 |
'プログラムB-1|プログラム開始 Sub Sample2_AppearRows() 'プログラムB-2|非表示の行を全て表示 Rows.Hidden = False 'プログラムB-3|プログラム終了 End Sub |
以下で詳しく説明します。
プログラムB-1|プログラム開始
1 |
Sub Sample2_AppearRows() |
「Sub Sample2_AppearRows()」のプログラムを開始することを意味します。
説明はプログラムA-2と同じなので、省略します。
プログラムB-2|非表示の行を全て再表示
1 |
Rows.Hidden = False |
プログラムAが実行された段階では複数の行が非表示になっています。
このプログラムを実行すると、非表示になっている行を再表示します。
その結果、上記のようにすべての非表示の行が表示されます。
この一文で非表示になっている行が全て再表示されます。
プログラムB-3|プログラム終了
1 |
End Sub |
プログラムB-1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
VBAプログラムソースC|列を非表示にする
列を非表示にするプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
'プログラムC-1|プログラム開始 Sub Sample3_HideColumns() 'プログラムC-2|最終列を取得 Dim cnt As Long cnt = Range("XFD5").End(xlToLeft).Column 'プログラムC-3|最終列まで処理 Dim i As Long For i = 3 To cnt 'プログラムC-4|色で塗りつぶされている列があるかどうかチェック If Columns(i).Interior.ColorIndex = xlNone Then 'プログラムC-4-1|色で塗りつぶされていない列を非表示 Columns(i).Hidden = True Else 'プログラムC-4-2|色で塗りつぶされている列を非表示 'Columns(i).Hidden = True End If Next 'プログラムC-5|プログラム終了 End Sub |
以下で詳しく説明しています。
プログラムC-1|プログラム開始
1 |
Sub Sample3_HideColumns() |
「Sub Sample3_HideColumns()」のプログラムを開始することを意味します。
説明はプログラムA-1と同じなので、省略します。
プログラムC-2|最終列を取得
1 2 |
Dim cnt As Long cnt = Range("XFD5").End(xlToLeft).Column |
5行目の最終列をcntとして取得します。
Debug.Printの検証結果
1 2 3 4 5 6 |
Dim cnt As Long cnt = Range("XFD5").End(xlToLeft).Column Debug.Print cnt >>>cnt:7 |
この事例では5行目の最終列はG5なので、cnt=7となります。
7の理由は、アルファベット順でGが7番目だからです。
プログラムC-3|最終列まで処理
1 2 |
Dim i As Long For i = 3 To cnt |
3列目(C列)からcnt(7)列目のG列まで順々に1列ずつ繰り返し処理を行います。
プログラムC-4|色で塗りつぶされている行があるかどうかチェック
1 2 3 4 5 6 7 8 9 10 |
If Columns(i).Interior.ColorIndex = xlNone Then 'プログラムC-4-1|色で塗りつぶされていない列を非表示 Columns(i).Hidden = True Else 'プログラムC-4-2|色で塗りつぶされている列を非表示 'Columns(i).Hidden = True End If Next |
このIf文でi=3~cnt(7)のとき、そのi列目(C列~G列)に色のついたセルが1つ以上あるかどうかをチェックしています。
もし、色のついたセルが0であれば、プログラムC-4-1を実行します。
また、色のついたセルが1つ以上あれば、プログラムC-4-2を実行します。
ただし、この事例ではプログラムC-4-2はコメントアウトをしているため実行されません。
プログラムC-4-1|色で塗りつぶされていない列を非表示
1 2 |
If Columns(i).Interior.ColorIndex = xlNone Then Columns(i).Hidden = True |
色を塗りつぶしていない列を非表示にします。
つまり色を塗りつぶしたセルが一つでもあれば、以下のようにその列が表示されたままになります。
プログラムC-4-2|色で塗りつぶされている列を非表示
1 2 3 |
Else 'Columns(i).Hidden = True End If |
こちらはコメントアウトしているので、プログラムはスキップされます。
ただし以下のようにプログラムC-4-2のコメントアウトを削除し、プログラムC-4-1をコメントアウトすることで、以下のように色で塗りつぶした列を非表示にすることもできます。
1 2 3 4 5 6 7 8 9 10 |
If Columns(i).Interior.ColorIndex = xlNone Then 'プログラムC-4-1|色で塗りつぶされていない列を非表示 'Columns(i).Hidden = True Else 'プログラムC-4-2|色で塗りつぶされている列を非表示 Columns(i).Hidden = True End If Next |
このように、色を塗りつぶしていないセルのみを表示させます。
仕事に応じて、好きな方を選択して使用することをおすすめします。
プログラムC-5|プログラム終了
1 |
End Sub |
プログラム1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
VBAプログラムソースD|列を再表示する
列を再表示するプログラムを紹介します。
このプログラムDはプログラムCとの切り替えで実行することを想定しています。
1 2 3 4 5 6 7 8 |
'プログラムD-1|プログラム開始 Sub Sample4_AppearColumns() 'プログラムD-2|非表示の行を全て再表示 Columns.Hidden = False 'プログラムD-3|プログラム終了 End Sub |
以下で詳しく説明します。
プログラムD-1|プログラム開始
1 |
Sub Sample4_AppearColumns() |
「Sub Sample4_AppearColumns()」のプログラムを開始することを意味します。
説明はプログラムA-2と同じなので、省略します。
プログラムD-2|非表示の行を全て再表示
1 |
Columns.Hidden = False |
プログラムCが実行された段階では以下のように複数の列が非表示になっています。
このプログラムを実行すると、非表示になっている列を再表示します。
その結果、上記のようにすべての非表示の列が表示されます。
この一文で非表示になっている列が全て再表示されます。
プログラムD-3|プログラム終了
1 |
End Sub |
プログラムD-1と対になるプログラムで、プログラム終了させるための記述です。
「End Sub」を読み込むと、プログラムが終了します。
プログラムの解説はここまでです。
Excel VBAについて詳しく理解したいなら
VBAを活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にVBAを活用して効率化してきた作業は以下の記事で紹介しています。
興味がある人は以下の記事もご覧ください。
動画でも解説しています。
エクセルマクロVBAで出来ることを15の事例で紹介|日常業務をラクにするヒントを見つけよう!
(音声が小さいので、ボリュームを上げてご覧いただければと思います)
VBAの勉強方法
私はプログラミング初心者からVBAを勉強を始めて少しずつレベルアップしていきました。
成長の過程は以下で紹介しています。
学習の過程では、意識すべきポイントがあります。
特に独学の場合だと、勉強を優先してしまい、肝心な実践を疎かにしがちです。
私の経験では、実践から逆算した勉強が必要だと考えています。
目指すべきは会社でお金をもらいながら勉強することです。
要はVBAを仕事の一つとして上司に認めてもらうのです。
そうすればわざわざ高いお金を払って勉強をする必要がなくなります。
しかも作業を自動化して、会社やチームに貢献しつつ、自らのスキルアップできます。
そのために必要な考え方を以下で紹介しています。
とはいえ、プログラミング初心者でVBAについて知識ゼロの人もいるはずです。
いきなり会社でVBAで使うことさえ、とてつもなくハードルが高く見えてしまうものです。
その場合は、VBAの基本について学ぶ必要があります。
たとえば車の運転も慣れてしまえば、たいしたことではありません。
しかし教習所で運転の基本を学び、免許を取得することで、公道で運転できるようになります。
VBAも同じです。VBAに免許はありませんが、まずは基本を学ばないことには会社で使えるレベルにはなりません。
実際に私もプログラミング初心者のときは、動画を見たり書籍を読んだりして勉強しました。
今はオンラインの教材で無料で学習できるものも多いです。
上記のリンクでは、私の経験から勉強にオススメの教材を紹介しています。
興味がある人はご覧ください。
VBAを自分で書けるようになる
さて、本記事で紹介したマクロを利用すれば、作業の自動化が可能になります。
しかしデメリットもあります。それはカスタムできないことです。
なぜなら、色々な要望が増えるからです。
この動画を見たとき、「もっと○○ができるのでは?」や「ここはなんとかならないのか」と感じる人は少なくないはずです。
例えば、「他の条件を付け加えたい」や「日付毎に条件を変えたい」といった要望が出るかもしれません。
このような要望を満たすには、マクロを勉強して自力でマクロを編集できるようになる必要があります。
もし、自力でマクロを編集できるようになれば、今より仕事の効率はグッと上がります。
実際、私も自力でマクロを書けるようになってからは、仕事の生産性が一気に上がりました。
他の人が30分~1時間かけて行う仕事が、ボタン一つで終わらせることができるようになったのです。
その結果、周囲からの信頼も増し、仕事で高い評価を得られるようになりました。
ただ、要望に応えるようになるためには、マクロを学ぶ必要があります。
まずは無料でマクロを勉強してみる
ウェブや書籍で勉強すれば、マクロを習得できると考えている人は少なくありません。
しかし、仕事で使えるマクロを習得したいなら、仕事で使える部分に特化した教材で学ぶことをお勧めします。
なぜなら、ウェブや書籍には仕事に関係しない部分まで提供していることが多いからです。
例えば、マクロ初心者なのに配列を学ぼうとする人がいます。実は配列なしでも仕事で使えるマクロを書くことは可能です。
しかし、マクロ初心者ほど「全ての知識が必要だ」と考えて、無駄な学習に時間を使ってしまうのです。詳しくは、こちらの記事で紹介しています。
そこで、私がお勧めするのは仕事に直結するマクロ教材です。とくにお勧めするのは、こちらの無料オンライン動画です。
なぜなら、仕事に直結する部分に絞って、エクセルマクロを学ぶことができるからです。
マクロの作り方・考え方から解説しているので、教材をしっかり学べばここで紹介したマクロをゼロから書けるようになります。
マクロ初心者が、仕事に直結したいマクロを学ぶなら、まずはこちらの無料オンライン動画を試すのがいいです。
興味がある人は、まずは無料でエクセルマクロの勉強を始めてみてください。
もっと学びたいと感じたら、さらに深く勉強をしてみることをお勧めします。