例文を使って繰り返し業務を時短

【マクロ・VBA】行数や列数をカウントする

エクセル、マクロ、VBAで行数や列数をカウントする方法 VBA

Count関数で列数を取得する

Sub 選択されている列数を取得()
  MsgBox Selection.Columns.Count
End Sub

Count関数で列数を取得する Part2

Sub GetColumnCount()

    ' 列数を取得
    Dim columnCount As Integer
    columnCount = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
    
    ' 列数を表示
    MsgBox "列数は " & columnCount & " です。"

End Sub

このコードでは、ActiveSheet.Cells(1, Columns.Count)で、アクティブなワークシートの最大列を取得しています。そして、End(xlToLeft)で最大列から左に向かって検索を行い、最初に見つかったセルを返します。最後に、Columnでそのセルの列番号を取得しています。

この方法は、ワークシートにデータが存在する場合にのみ機能します。空のワークシートでこのコードを実行すると、エラーが発生します。したがって、UsedRangeを使用して使用されている範囲を取得する方法の方が安全で信頼性が高いと言えます。

UsedRangeで列数を取得する

UsedRangeは、ワークシート上で使用されているセル範囲を返します。これに対して、Columnsプロパティを使用することで、列数を取得することができます。

Sub GetColumnCount()

    ' ワークシートの使用範囲を取得
    Dim usedRange As Range
    Set usedRange = ActiveSheet.UsedRange
    
    ' 列数を取得
    Dim columnCount As Integer
    columnCount = usedRange.Columns.Count
    
    ' 列数を表示
    MsgBox "列数は " & columnCount & " です。"

End Sub

上記のコードでは、ActiveSheet.UsedRangeでアクティブなワークシートの使用範囲を取得しています。次に、取得した使用範囲の列数を、usedRange.Columns.Countで取得しています。最後に、列数をメッセージボックスで表示しています。

アクティブシートの最終行と最終列をメッセージボックスに表示

Sub カウント_最終行_最終列()

Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.ActiveSheet
Dim LastRow1 As Long
LastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Dim LastCol1 As Long
LastCol1 = ws1.Cells(2, Columns.Count).End(xlToLeft).Column
Dim MyCell As Range
Set MyCell = ws1.Range("A1", Cells(LastRow1, LastCol1))

Dim tmp As Variant
tmp = Split(Cells(1, LastCol1 + LastCol2).Address(True, False), "$")

MsgBox "完了" & vbLf & vbLf & "最終行" & LastRow1 & vbLf & "最終列" & LastCol1 & "_" & tmp(0)
End Sub

列のカウント

*アクティブシートの行数/入力済のセルの個数/空欄セルの個数/数値セルの個数/合計
 を調べてメッセージボックスに表示

Sub 列のカウント()

Dim cnt1 As Long
Dim cnt2 As Long
Dim cnt3 As Long
Dim cnt4 As Long

Dim myrange As Range
Dim LastRow1 As Long
LastRow1 = ThisWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set myrange = ThisWorkbook.ActiveSheet.Range("A2:A" & LastRow1)

cnt1 = WorksheetFunction.Count(myrange)                           '数値のセルの個数
cnt2 = WorksheetFunction.CountA(myrange)                         '入力済みのセルの個数
cnt3 = WorksheetFunction.CountBlank(myrange)                    'ブランクセルの個数
cnt4 = WorksheetFunction.Subtotal(9, ThisWorkbook.ActiveSheet.Range("A:A"))

MsgBox "【カウント】" & vbCrLf & vbCrLf & _
"・行数(A2~)                       : " & LastRow1 - 1 & vbCrLf & _
"・入力済セルの個数(A2~)       : " & cnt2 & vbCrLf & _
"・ブランクセルの個数(A2~): " & cnt3 & vbCrLf & _
"・数値セルの個数(A2~)       : " & cnt1 & vbCrLf & _
"・合計(A2~)                     : " & cnt4 & vbCrLf

MsgBox "完了"
End Sub

アクティブシートと右隣のシートカウントを別シートに転記

このVBAコードは、Excelのアクティブなワークシートとその隣のワークシートに対して、行数、列数、入力済みセル、空白セル、数値セルなどの情報を取得し、新しいワークシートを作成して、それらの情報を表示します。

Sub シート作成_別ウィンドウ_カウント()

Dim wb1 As Workbook
    Set wb1 = ThisWorkbook
Dim ws1 As Worksheet
    Set ws1 = wb1.ActiveSheet
Dim LastRow1 As Long
    LastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Dim LastCol1 As Long
    LastCol1 = ws1.Cells(1, Columns.Count).End(xlToLeft).Column
Dim MyRange1 As Range
    Set MyRange1 = ws1.Range("A2:A" & LastRow1)

Dim wb2 As Workbook
    Set wb2 = ThisWorkbook
Dim ws2 As Worksheet
    Set ws2 = wb2.ActiveSheet.Next
Dim LastRow2 As Long
    LastRow2 = ws2.Cells(Rows.Count, 2).End(xlUp).Row
Dim LastCol2 As Long
    LastCol2 = ws2.Cells(2, Columns.Count).End(xlToLeft).Column
Dim MyRange2 As Range
    Set MyRange2 = ws2.Range("A2:A" & LastRow2)

Worksheets.Add(After:=ActiveSheet).Name = "カウント" & "_" & VBA.Format(Now(), "h時mm分ss秒")

ThisWorkbook.ActiveSheet.Range("A2") = "行数(A2~)"
ThisWorkbook.ActiveSheet.Range("A3") = "列数"
ThisWorkbook.ActiveSheet.Range("A4") = "入力済セルの個数(A2~)"
ThisWorkbook.ActiveSheet.Range("A5") = "ブランクセルの個数(A2~)"
ThisWorkbook.ActiveSheet.Range("A6") = "数値セルの個数(A2~)"
ThisWorkbook.ActiveSheet.Range("A7") = "合計(A2~)"

ThisWorkbook.ActiveSheet.Range("B1") = "左のシート(アクティブシート)"
ThisWorkbook.ActiveSheet.Range("B2") = LastRow1
ThisWorkbook.ActiveSheet.Range("B3") = LastCol1
ThisWorkbook.ActiveSheet.Range("B4") = WorksheetFunction.CountA(MyRange1)
ThisWorkbook.ActiveSheet.Range("B5") = WorksheetFunction.CountBlank(MyRange1)
ThisWorkbook.ActiveSheet.Range("B6") = WorksheetFunction.Count(MyRange1)
ThisWorkbook.ActiveSheet.Range("B7") = WorksheetFunction.Subtotal(9, ws1.Range("B:B"))

ThisWorkbook.ActiveSheet.Range("C1") = "右のシート"
ThisWorkbook.ActiveSheet.Range("C2") = LastRow2
ThisWorkbook.ActiveSheet.Range("C3") = LastCol2
ThisWorkbook.ActiveSheet.Range("C4") = WorksheetFunction.CountA(MyRange2)
ThisWorkbook.ActiveSheet.Range("C5") = WorksheetFunction.CountBlank(MyRange2)
ThisWorkbook.ActiveSheet.Range("C6") = WorksheetFunction.Count(MyRange2)
ThisWorkbook.ActiveSheet.Range("C7") = WorksheetFunction.Subtotal(9, ws2.Range("B:B"))

With ActiveWorkbook
    .NewWindow
    Windows.Arrange ArrangeStyle:=xlArrangeStyleCascade
    ActiveWindow.WindowState = xlNormal
    ActiveWindow.Width = 300
    ActiveWindow.Height = 500
    ActiveWindow.EnableResize = False
End With

MsgBox "完了"
End Sub
  • ArrangeStyle:=xlArrangeStyleCascade:重ねて表示
    ⇒.Windows.Arrange xlArrangeStyleTiled:横に並べる
  • Windows.Arrange xlArrangeStyleTiled:横に並べる
  • ActiveWindow.WindowState = xlNormal:通常表示に設定
  • ActiveWindow.Width = 300:ウィンドウ幅を300に設定
  • ActiveWindow.Height = 500:ウィンドウの高さを500に設定
  • ActiveWindow.EnableResize = False:ウィンドウサイズを固定

解説

1行目から9行目: データを取得するために必要な変数の宣言を行います。このコードでは、現在アクティブなブック、アクティブなシート、およびそのシートの最終行、最終列、およびセル範囲を保存するための変数を宣言しています。

11行目から14行目: 右側のシートからデータを取得するための変数を宣言します。ここで、wb2とws2は、wb1およびws1と同様に、現在アクティブなブックとシートを参照するために使用されます。

16行目から19行目: アクティブなワークシートからデータを取得するための変数を宣言します。LastRow1、LastCol1、およびMyRange1は、アクティブなワークシートからデータを取得するために使用されます。

21行目から27行目: カウントワークシートに情報を表示するために必要な各セルのラベルと値を設定します。

29行目から37行目: データをカウントし、それをカウントワークシートに表示します。CountA関数、CountBlank関数、およびCount関数を使用して、セル範囲内のそれぞれの種類のセルの数をカウントします。また、Subtotal関数を使用して、数値セルの合計を計算します。

39行目から47行目: ウィンドウを新しく作成して、カウントワークシートを表示します。NewWindowメソッドを使用して、新しいウィンドウを作成し、Windows.Arrangeメソッドを使用して、新しいウィンドウを現在のウィンドウの右下隅に配置します。ウィンドウのサイズと位置は、後続のコードで設定されます。

49行目: 完了メッセージを表示します。このメッセージは、コードの処理が完了したことをユーザーに通知するために使用されます。

コメント

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