VBAで行数をカウントするやり方【Count関数の使い方と導入方法】
こんな疑問にお答えします。
結論からいうと、
VBAでカウント関数を設定すれば、一覧表の行数が変わっても自動的に対処することが可能
です。
VBAでカウント関数を上手に扱うことができれば、以下のような処理を自動化することができます。
- 行数の変更を自動的に処理
- 「行の一番下に〇〇したい」を実現できる
- 行数が未確定のデータでも集約できる
この記事では、
「カウント関数でどんなことができるのか」
「実際の仕事にどのようにカウント関数を導入することができるのか」
をサンプル事例を使って詳しくご紹介します。
目次
VBAで「行数をカウントする」と何ができるの?
VBAを使って行数をカウントすると、
一覧表で値が入力されたセルの行数を取得することができる!
ようになります。
具体的にどんなことができるのか具体例を使ってご紹介します。
サンプル事例① 別シートの情報を集約して一覧表を作成するマクロ
シート別に管理されている一覧表を1つのシートに集約することができます。
一覧表の行数を増やしたり、減らしたりしても全く問題ありません。
変動する行数をカウントするので、集約して作成する一覧表はとてもキレイでみやすい。
下記の記事では、別シートの情報を集約し、進捗状況管理表を作成するマクロについて紹介されています。
仕事でかなり使われるマクロなので是非チェックしてみてください。
サンプル事例② 一覧表の罫線を引くマクロ
表示位置が変わったり、行数や列数が変わっても全く問題ありません。
罫線を常にキレイな状態に保つことができます。
下記の記事では、一覧表の罫線表示を自動化するマクロについて紹介されています。
見やすい一覧表にするためには「罫線の表示」がとても重要です。
罫線の表示を自動化し、作業効率をアップさせてみてはいかがでしょうか。
VBAで行数をカウントすることで、以下のような処理を完全自動化することができます。
- 一覧表の罫線を引く作業
- 集計表の合計計算
- 大量のデータの統計分析
大量のデータ分析を手作業で行っているなら、
カウント関数を使って自動化してしまう
ことがおすすめです。
私の職場では、誰でも編集できる共有化されたエクセルファイルがほとんどで、
「知らないうちに一覧表の行数が変更された」
「罫線がぐちゃぐちゃにされた」
という問題が頻繁に発生していましたが、
行数をカウントするVBAを設定することで、このような問題の発生を防ぐことができました。
行数をカウントするカウント関数とは?
カウント関数とは、文字通り「指示した内容の数量を数えてくれる関数」です。
言葉で説明するよりも、
カウント関数がどのような処理をするのか
を実際に見てもらった方がイメージできると思います。
簡単なサンプル事例を使ってカウント関数の基本的な設定方法について説明していきます。
基本的な設定はもう知っている!という方は、記事の後半で「実務で使えるカウント関数の設定方法」が詳しく紹介されているので参考にしてみてください。
サンプル事例 行数を取得するカウント関数の使い方
下図のような事例を使ってVBAを作成していきます。
一覧表の一番下の人は何番目で名前はなんのかを導き出すVBAを作成していきます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
Sub テスト()
Cells( 2 , 3 ) = Cells( Rows.Count,1 ).End(xlUp).Row
Cells( 5 , 3 ) = Cells(Cells(Rows.Count,1).End(xlUp).Row,1)
End Sub
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。
「テスト」を選択、「OK」でボタンにサンプルVBAを登録してください。
7.サンプルVBAの実行
一覧表の内容を変更したり、行数を増やしても正しい数字と名前が記載されます。
サンプル事例で使われているVBAは、
変数 = Cells(Rows.Count , 1).end(xlUp).Row
です。
一列目の一番下に入力されているデータの行が何番目なのかカウントし、変数に数字を入れる!という意味です。
変数をプログラム内で記載すれば、いつでも「1列目の最後の行数(数字)」を使うことができます。
サンプルVBAでは、取得した最後の行数を変数ではなくセルに直接反映させているため、
「7」という数字がC2セルに表示されています。
カウント関数を上手に使えば、最後の行に入力されている値(テキスト)を取得することもできます。
以下のようなときにカウント関数はよく利用されます。
- 一覧表の一番下は何行目?
- 一覧表に入力されたデータ数は何個?
- 「鈴木」というテキストは何個記載されている?
カウント関数を使えばVBAを実行するたび数量を数えてくれるので、
目で見て数量を数える行為をしなくて済むようになります。
大量のデータを扱うエクセルファイルにこのVBAを導入すると作業効率を格段にアップさせることができるので、自由に扱えるようにしましょう。
実務で使える行数をカウントするVBA
下記で紹介している3つのサンプル事例は実際の仕事で使えるVBAが使われています。
エクセル作業の効率をアップさせたい方は是非参考にしてみてください。
サンプル事例① 一覧表の行数をカウントして罫線を引くVBA
この記事の冒頭でも少しご紹介していますが、
罫線を自動で調整するVBAを使えば手動で罫線を引き直すという手間が一切なくなります。
罫線を自動で調整するVBAの導入方法とサンプルVBAをご紹介します。
上記のような一覧表の罫線を自動的に引いてくれるVBAを設定していきます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
Sub テスト()
g = Cells(Rows.Count, 1).End(xlUp).Row
r = Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(g, r)).Borders.LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders.Weight = xlThick
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).Weight = xlThin
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).Weight = xlThin
End Sub
上記サンプルVBAをコピーしてModuleにペーストしてください。
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。
「テスト」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
設定したVBAを実行すると、自動的に一覧表の罫線を引くことができました。
一覧表の項目が変更されたら自動的に罫線を引き直してくれるかどうか試してみます。
上図のように適当に項目を追加してVBAを実行してみます。
このVBAを使えば、一覧表の編集によって表の罫線を引き直す!という処理を防止することができます。
上記で掲載しているサンプルVBAはA1セルから始まる一覧表の罫線を自動で調整するものです。
サンプル事例② 一覧表の外側にコメントを入力する
一覧表の行数をカウントすることで、一覧表の枠外にコメントを記入することができます。
行数が増えても一番下の行までデータを分析することができるので、コメント記入漏れの心配がありません。
一覧表の枠外にコメントを記入するVBAの導入方法とサンプルVBAをご紹介します。
上記のような処理を行うVBAを設定していきます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
4.サンプルVBA
Sub テスト2()
g = Cells(Rows.Count, 1).End(xlUp).Row
r = Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(g, r)).Borders.LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders.Weight = xlThick
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).Weight = xlThin
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).Weight = xlThin
For i = 2 To g
If Cells(i, 2) > 400 Then
Cells(i, r + 1) = "値段が高い"
Else
End If
Next
End Sub
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。
「テスト2」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
一覧表の項目が増減しても上の実行結果のように枠外(右側)にコメントが入力され、
枠外にテキストが入力されます。
サンプル事例③ 一覧表の一番下に合計を集計するVBA
集計するVBAは、行の挿入や削除が頻繁に行われても集計した金額に影響を与えることを防ぐことができます。
VBAを実行する度に集計し直すので、
「挿入した行の値が集計されていなかった!計算式が消されて合計金額がわからなくなっていた!」
という心配がありません。
行数が変更される一覧表の集計を求めるときに便利なVBAです。
上図のような処理を行うVBAを設定していきます。
1.VBAを起動
2.標準モジュールを作成
3.ModuleにサンプルVBAを記載
サンプルVBA
Sub テスト3()
g = Cells(Rows.Count, 1).End(xlUp).Row
r = Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(1, 1), Cells(g, r)).Borders.LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders.Weight = xlThick
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideVertical).Weight = xlThin
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).LineStyle = xlContinuous
Range(Cells(1, 1), Cells(g, r)).Borders(xlInsideHorizontal).Weight = xlThin
Cells(g + 1, 1) = "合計"
Cells(g + 1, 2) = WorksheetFunction.Sum(Range(Cells(2, 2), Cells(g, 2)))
End Sub
5.ボタンを作成
6.作成したボタンにマクロを登録
マクロ名のリストにはModuleに作成したサンプルVBAが自動的に表示されます。
「テスト3」を選択して「OK」を押すと作成したボタンにサンプルVBAが登録されます。
7.サンプルVBAの実行
一覧表の行数や金額を変更してVBAを実行してみると下図のような結果になりました。
行の挿入や削除が頻繁に行われて計算式がぐちゃぐちゃになってしまうことはよくあることですが、
計算式が狂っていることに気づかず資料を作成しまうのはあってはならないことです。
合計を集計するVBAを使えば、実行毎に集計をやり直すので計算式がぐちゃぐちゃにされる心配も集計を間違う心配もありません。
これからVBAを勉強をはじめるには
カウント関数のように、VBAには仕事の効率をアップさせることができる機能がいろいろあります。
VBAのプログラミングスキルを身に着けることで、今まで何時間もかかかっていた作業をほんの数分で処理することができるようになります。
VBAを基本から学びたい!という方におすすめなのが、オンラインプログラミング学習サービス【1st Step】です。
【1st Step】は初心者のためのプログラミング学習サービスで、C言語・java・VBAの3つのプログラミングの基礎をオンラインで勉強することができます。
- 基礎からプログラミングを勉強したい
- まとまった勉強時間の確保が難しい
- 途中で挫折したくない
上記のように考えている方に【1st Step】はおすすめです。
下記の記事では、オンラインプログラミング学習サービス【1st Step】の特徴や私の体験など詳しく紹介しています。
これからVBAの勉強を始めようと考えている方は是非参考にしてみてください。
ディスカッション
コメント一覧
まだ、コメントがありません