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

【マクロ・VBA】特定の文字を含むデータをカウントする

エクセル、マクロ、VBAで特定のデータを含むセルをカウントする方法 VBA

特定の文字を含むカウント

このVBAコードは、指定した範囲内のセルに特定の文字列が含まれる回数をカウントするためのサンプルコードです。

Sub 特定の文字を含むカウント()
  Dim intForwardMatch As Integer  '前方一致
  Dim intBackwardMatch As Integer '後方一致
  Dim intForwBackMatch As Integer '前方後方
  Dim intPerfectMatch As Integer  '完全一致
  
  intForwardMatch = WorksheetFunction.CountIf(Range("A1:A6"), "*東京店") '前方一致数
  intBackwardMatch = WorksheetFunction.CountIf(Range("A1:A6"), "東京店*") '後方一致数
  intForwBackMatch = WorksheetFunction.CountIf(Range("A1:A6"), "*東京店*") '前方後方一致数
  intPerfectMatch = WorksheetFunction.CountIf(Range("A1:A6"), "東京店")
  
  Dim n As Long  '空白以外
  n = WorksheetFunction.CountIf(Range("A1:A10"), "<>")
  MsgBox n
  
  MsgBox "前方一致数:" & intForwardMatch & vbCrLf & _
         "後方一致数:" & intBackwardMatch & vbCrLf & _
         "前方後方一致数:" & intForwBackMatch & vbCrLf & _
         "完全一致数:" & intPerfectMatch
 MsgBox "完了"
End Sub

最初に、前方一致、後方一致、前方後方一致、完全一致の各種類のカウントを行うための変数を定義し、それぞれのカウント結果を算出します。

次に、空白でないセルの数をカウントするための変数も定義し、範囲内に含まれる空白以外のセルの数を算出しています。

最後に、メッセージボックスを表示して、各種類のカウント結果を表示します。

このコードでは、CountIf関数を使用して特定の文字列を含むセルの数をカウントしています。CountIf関数は、指定した範囲内で条件に合致するセルの数をカウントする関数で、第1引数に範囲、第2引数に条件を指定します。条件には、アスタリスク(*)を使ってワイルドカード検索を行うことができます。

また、MsgBox関数を使用して、メッセージボックスを表示しています。MsgBox関数は、指定した文字列を表示するメッセージボックスを表示する関数です。複数の文字列を表示する場合は、”& vbCrLf &”を挟んで改行を行うことができます。

カウント数を集計して新規シートに結果を転記

このコードは、Excelシートにあるデータのカウント数を集計し、新規シートに結果を転記するVBAマクロです。

Sub カウント数を集計して新規シートに結果を転記()

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

Dim lastRow1 As Long, lastRow2 As Long
Dim i As Long, j As Long, myCnt As Long
  
With ActiveSheet.Next
    .Range("A1") = ActiveSheet.Range("A1").Value
    .Range("B1") = "カウント"
    lastRow1 = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
            
        For i = 2 To lastRow1

            myCnt = 0
            
            lastRow2 = .Cells(Rows.Count, 1).End(xlUp).Row
            For j = 1 To lastRow2
                    
                If .Cells(j, 1).Value = ActiveSheet.Cells(i, 1).Value Then
                    Exit For
                Else
                    myCnt = myCnt + 1
                End If
            
            Next j
                
                If myCnt = lastRow2 Then
                    .Cells(lastRow2 + 1, 1).Value = ActiveSheet.Cells(i, 1).Value
                End If
            
        Next i
        
End With
        
'カウント
For i = 2 To ActiveSheet.Next.Cells(Rows.Count, "A").End(xlUp).Row

    With ActiveSheet.Next.Cells(i, "A")
        .Offset(0, 1) = WorksheetFunction.CountIf(ActiveSheet.Range("C:C"), .Value)
    End With
    
Next

'空欄以外の数
ActiveSheet.Next.Cells(Rows.Count, "A").End(xlUp).Offset(2, 0) = "空欄以外"
ActiveSheet.Next.Cells(Rows.Count, "B").End(xlUp).Offset(2, 0) = WorksheetFunction.CountIf(ActiveSheet.Range("C:C"), "<>")

'項目数
ActiveSheet.Next.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = "項目行数"
ActiveSheet.Next.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0) = 1

'合計数
ActiveSheet.Next.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = "最終行数"
ActiveSheet.Next.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0) = lastRow1

'空欄数
ActiveSheet.Next.Cells(Rows.Count, "A").End(xlUp).Offset(-3, 0) = "空欄"
ActiveSheet.Next.Cells(Rows.Count, "B").End(xlUp).Offset(-3, 0) = lastRow1 - WorksheetFunction.CountIf(ActiveSheet.Range("C:C"), "<>")


MsgBox "完了"
End Sub

1行目:マクロのサブルーチンの宣言

3行目:新しいシートを追加して名前を設定します。シート名は、”→カウント”と現在時刻で生成されます。

4行目:前のシートを選択します。

6-7行目:変数lastRow1を定義し、アクティブシートの最後の行番号を取得します。

9-28行目:次のシートを指定し、新しいシートにアクティブシートの列Aの値をコピーします。B列には”カウント”というラベルが追加されます。lastRow1で指定された範囲を処理して、カウント数を計算して新しいシートに追加します。

30-38行目:アクティブシートの空白以外の行数をカウントし、新しいシートに追加します。

40-42行目:新しいシートに、アクティブシートにある項目数、最終行数、空欄数を追加します。

44行目:メッセージボックスに「完了」と表示します。

指定した列の特定の文字をカウントする

このVBAコードは、指定した範囲内のカウントを実行し、その結果を新しい列に表示します

Sub カウント()

For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row

        With Cells(i, "C")
            .Offset(0, 2) = WorksheetFunction.CountIf(ActiveSheet.Range("C:C"), .Value)
        End With

Next

Cells(1, "C").Offset(0, 2) = "カウント"

Dim LastCell As Range
Set LastCell = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).End(xlToRight)

LastCell.AutoFilter Field:=3

MsgBox "完了"
End Sub

まず、Forループを使用して、列Cのすべての行に対してCountIf関数を実行し、指定された値が列C内で出現する回数をカウントします。その後、値がカウントされた回数を表示するために、各行に値を挿入します。

次に、最後のセルを検索するために、Endメソッドを使用して、列Aの最後の行を特定し、右方向に最後のセルを検索します。その後、AutoFilterメソッドを使用して、列Cのフィルタを作成します。

最後に、メッセージボックスが表示されます。

コメント

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