大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、行数を取得するには「.Rows.Count」を使います。データが入力されている行数を取得するには、「Find」を使うと簡単に「データ行数」を取得できます。VBAでのテーブル操作をマスターしていきましょう。

はじめに

この記事では、テーブルの行数とデータ行数を取得する方法について、ご紹介します。

テーブルの行数を取得したい場合は、「.Rows.Count」を使うことでできます。

テーブルのデータ行数を取得したい場合は、次の方法があります。

  • テーブルの最終行からループする
  • 「End(xlUp)」を使う
  • 「Find」を使う ←簡単

一番簡単なのは、「Find」を使う方法です。

テーブルに空白行があったり、空テーブルだとしても、正しくデータ行数を取得できるので、便利です。

では、テーブルの行数とデータ行数を取得する方法について、解説していきます。

この記事を読むメリット

  • テーブルの行数と、データ行数を取得する方法がわかります

目次から見たい項目へ移動すると便利ですよ。

目次

テーブルの行数を取得

テーブルの行数を取得してみます。

次の2つの方法でやってみます。

  • ListObjectsを使う
  • 構造化参照を使う

テーブルの行数を取得する方法は、比較的簡単です。

では、やってみます。

ListObjectsを使う

ListObjectsを使って、テーブルの行数を取得するVBAコードです。

「.Range.Rows.Count」を使って、行数を取得します。

Sub TEST1()
    
    'テーブルの最終行を取得
    Debug.Print ActiveSheet.ListObjects("テーブル1").Range.Rows.Count
    
End Sub

ListObjectsで行数を取得します。

ListObjectsで行数を取得

ListObjectsで行数を取得します

実行すると、ListObjectsで行数を取得できます。

行数を取得できた

ListObjectsで行数を取得できました

ListObjectsで行数を取得できました。

構造化参照を使う

構造化参照を使って、テーブルの行数を取得してみます。

構造化参照の場合は、「.Rows.Count」を使います。

テーブル全体を参照したいので、「Range("テーブル1[#ALL]")」とします。

Sub TEST2()
    
    'テーブルの最終行を取得
    Debug.Print Range("テーブル1[#ALL]").Rows.Count
    
End Sub

構造化参照で、行数を取得します。

構造化参照で行数を取得

構造化参照で、行数を取得します

実行すると、構造化参照で行数を取得できます。

行数を取得できた

構造化参照で行数を取得できました

構造化参照で行数を取得できました。

ループしてテーブルのデータ行数を取得する

次は、「データ行数」を取得していきます。

まずは、テーブルを最終行からループして、「データ行数」を取得してみます。

テーブルの最終行からループする

テーブルの最終行からループして、「データ行数」を取得するVBAコードは、次のようになります。

Sub TEST3()
    
    Dim A
    With ActiveSheet.ListObjects("テーブル1").Range
        'テーブルを最終行からループ
        For i = .Rows.Count To 1 Step -1
            'データがある場合
            If ActiveSheet.ListObjects("テーブル1").Range(i, 1) <> "" Then
                A = i 'データ行数を入力
                Exit For 'ループを終了
            End If
        Next
    End With
    
    Debug.Print A
    
End Sub

手順は、

  • テーブル最終行から上にループ
  • データが存在したらデータ行を保存

という感じです。

手順

「For~Next」で、最終行から上にループします。

「For~Next」で、最終行から上にループします

データが存在するところまでループして、データ行数を取得します。

データが存在するところまでループして、データ行数を取得します

これで、データ行数を取得することができます。

次の3つのテーブルでやってみます。

  • 空白行があるテーブル
  • データで埋まっているテーブル
  • 空テーブル

では、やってみます。

空白行があるテーブル

空白行があるテーブルで、データ行数を取得してみます。

空白行があるテーブルでデータ行数を取得

最終行からデータが存在するまでループして、データ行数を取得します

実行すると、データ行数を取得できます。

「4」行を取得できた

データ行数を取得できました

「4」行という結果になりました。

正しくデータ行数を取得できています。

データで埋まっているテーブル

次は、データで埋まっているテーブルで、データ行数を取得してみます。

「データで埋まっているテーブル」でデータ行数を取得

データで埋まっているテーブルでも、データ行数を取得できます

実行すると、データ最終行を取得できます。

「4」行を取得できた

データ行数を取得できました

結果は、「4」となって、データ行数を取得できました。

空のテーブル

空のテーブルで、データ行数を取得してみます。

「空テーブル」でデータ行数を取得

空テーブルの場合は、一番上までループして、「1」となります

空テーブルの場合は、一番上までループして、「1」となります。

「1」行を取得できた

データ行数を取得できました

データ行数を取得できました。

「End(xlUp)」を使ってデータ行数を取得する

次は、「End(xlUp)」を使って、データ行数を取得してみます。

「End(xlUp)」を使う方法は、ちょっとめんどくさいです。

やってみます。

End(xlUp)でデータ最終行を取得してデータ行数を取得

End(xlUp)で、データ最終行を取得して、データ行数を取得するVBAコードです。

Sub TEST4()
    
    Dim A
    With ActiveSheet.ListObjects("テーブル1").Range
        'テーブルの最終行から、「Ctrl + ↑」を使う
        A = .Cells(.Rows.Count, 1).End(xlUp).Row - .Row + 1
    End With
    
    Debug.Print A
    
End Sub

手順は、次のようになります。

  • 「End(xlUp)」で、最終行から上に移動してデータ最終行を取得
  • テーブルが存在する行を取得
  • 「5-2+1=4行目」を計算

という感じです。

手順

「End(xlUp)」で、最終行から上に移動して、データ最終行を取得します。

「End(xlUp)」で、最終行から上に移動して、データ最終行を取得します

データが存在するする、「5」行目を取得できます。

データが存在するする、「5」行目を取得できます

次に、テーブルが存在する行である、「2」行目を取得します。

テーブルが存在する行である、「2」行目を取得します

「5-2+1=4行」で、データ行数を計算します。

「5-2+1=4行」で、データ行数を取得することができます

「5-2+1=4行」で、データ行数を取得することができました。

という感じで、データ行数を取得できます。

空白行があるテーブル

空白行があるテーブルで、データ行数を取得してみます。

「空白行があるテーブル」でデータ行数を取得

最終行から上に、移動して、テーブルが存在する行を差し引きます。

空白行があるテーブルで、データ行数を取得してみます

実行すると、データ行数を取得できます。

結果は、「4」となって、データ行数を取得できました

結果は、「4」となって、データ行数を取得できました。

「データで埋まっているテーブル」ではできない

データで埋まっているテーブルの場合は、一番上まで移動してしまい、うまくデータ行数を取得できません

データで埋まっているテーブルの場合は、一番上まで移動してしまい、うまくデータ行数を取得できません

データ行数は「4」ですけど、「1」となってしまいます。

データ行数は「4」ですけど、「1」となってしまいました

テーブルがデータで埋まっている場合は、条件を分岐する必要があります。

データで埋まっているテーブルに対応する

データで埋まっているテーブルに対応するように、VBAコードを条件分岐します。

データで埋まっているテーブルに対応する

最終行に値が入力されている場合は、「.Range.Rows.Count」で、テーブルの行数を使います。

最終行に値が入力されている場合は、「.Range.Rows.Count」で、テーブルの行数を使います

VBAコードは次のようになります。

Sub TEST5()
    
    Dim A
    With ActiveSheet.ListObjects("テーブル1").Range
        'テーブルの最終行にデータがある場合
        If .Cells(.Rows.Count, 1) <> "" Then
            'テーブルの行数がデータ最終行
            A = .Rows.Count
        'データがない場合
        Else
            'テーブルの最終行から、「Ctrl + ↑」を使う
            A = .Cells(.Rows.Count, 1).End(xlUp).Row - .Row + 1
        End If
    End With
    
    Debug.Print A
    
End Sub

実行すると、データで埋まったテーブルでも、データ行数を取得することができます。

データ行数を取得することができました

データ行数を取得することができました。

空のテーブル

テーブルにデータがない場合は、「1」となります。

空テーブルのデータ行数を取得する

テーブルにデータがない場合は、「1」となります

実行してみます。

「1」行を取得できた

データ行数を取得できました

結果は、「1」行となって、データ行数を取得できました。

こんな感じで、「End(xlUp)」を使って、データ行数を取得できます。

「Find」を使ってテーブルのデータ行数を取得する

「Find」を使ってテーブルの「データ行数」を取得してみます。

「Find」を使った方法が一番簡単です。

「Find」で最終行を取得してデータ行数を取得

では、「Find」で最終行を取得して、「データ行数」を取得してみます。

VBAコードは、次のようになります。

Sub TEST6()
    
    Dim A
    With ActiveSheet.ListObjects("テーブル1").Range
        '「Find」でデータ最終行を取得する
        A = .Find("*", , , , 1, 2).Row - .Row + 1
    End With
    
    Debug.Print A
    
End Sub

手順は、次のようになります。

  • テーブル内のデータ最終行を取得
  • テーブルが存在する行を取得
  • 「5-2+1=4行」で、データ行数を取得

という感じです。

手順

「Find」を使って、データ最終行を取得します。

「Find」を使って、データ最終行を取得します

データ最終行は、「5」行目になります。

テーブルが存在する行を取得します。

テーブルが存在する行を取得します

テーブルが存在する行は、「2」行目になります。

「5-2+1=4行」と計算して、データ行数を計算します。

「5-2+1=4行」と計算して、データ行数を取得することができます

「5-2+1=4行」と計算して、データ行数を取得することができました。

次のテーブルで実行してみます。

  • 空白行があるテーブル
  • データで埋まったテーブル
  • 空テーブル

では、やってみます。

空白行があるテーブル

空白行があるテーブルで、データ行数を取得してみます。

「空白行があるテーブル」でデータ行数を取得

空白行があるテーブルで、データ行数を取得してみます

データ行数である「4」行を取得できます。

「4」行を取得できた

データ行数である「4」行を取得できました

データ行数である「4」行を取得できました。

データで埋まっているテーブル

データで埋まっているテーブルで、データ行数を取得してみます。

「データで埋まっているテーブル」でデータ行数を取得

データで埋まっているテーブルで、データ行数を取得してみます

実行すると、データ行数である「4」行を取得できます。

「4」行を取得できた

データ行数である「3」行を取得できました

データ行数である「4」行を取得できました。

空のテーブル

次は、空テーブルで、データ行数を取得してみます。

「空テーブル」のデータ行数を取得

空テーブルで、データ行数を取得してみます

データが存在しないので、データ行数は「1」となります。

「1」行を取得できた

データが存在しないので、データ行数は「1」となります

データ行数を取得できました。

テーブルのデータ行数を取得したい場合は、「Find」が簡単です。

全列でのデータ行数を取得できる

「Find」を使うと、全列でのデータ行数を取得することができます。

全列でのデータ行数を取得できる

全列でのデータ行数を取得することができます

実行すると、一番大きい2列目のデータ行数を取得できます。

全列でデータ行数を取得できた

全列で一番大きいデータ行数を取得できました

結果は、「3」行となって、全列でデータ行数を取得できました。

「Find」、便利です。

おわりに

この記事では、テーブルの行数とデータ行数を取得する方法について、ご紹介しました。

テーブルの行数を取得したい場合は、「.Rows.Count」を使うことでできます。

テーブルのデータ行数を取得したい場合は、次の方法があります。

  • テーブルの最終行からループする
  • 「End(xlUp)」を使う
  • 「Find」を使う ←簡単

一番簡単なのは、「Find」を使う方法です。

テーブルに空白行があったり、空テーブルだとしても、正しくデータ行数を取得できるので、便利です。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す