Excel VBA 質問スレッド No.748 (解決済)

カウントイフについて

投稿者 : 三次     投稿日時 : 2022/05/24(Tue) 14:41:00     OS : Windows 10     EXCEL : Excel 2003
教示ください

124 ※
315
531
132
213
156
125 ※
162
154
124 ※
125 ※
124 ※
このような表から124ならば前二桁12を含むセルはいくつあるか
カウントする方法をどのようにするのか
この表の結果だと5
Sub カウント()

Dim cnt As Integer

' 3桁の数字から12であるセルをカウント
          ’ここにどのように書くのでしょうか↓
cnt = WorksheetFunction.CountIf(Range("F5:F16"), “ ”)

Range("C2").Value = cnt

End Sub

[返信 1] Re : カウントイフについて
投稿者 : 甲樹     投稿日時 : 2022/05/24(Tue) 16:56:23
=SUMPRODUCT((LEFT(A5:A16,2)="12")*1)

[返信 2] Re : カウントイフについて
投稿者 : てらてら     投稿日時 : 2022/05/24(Tue) 20:57:54
cnt = WorksheetFunction.CountIf(Range("F5:F16"), "12*")

[返信 3] Re : カウントイフについて
投稿者 : ピロリ     投稿日時 : 2022/05/24(Tue) 21:06:22
■[返信 1] 甲樹さん を真似て。 セル関数を使用するなら下記でも良いかも。

=SUM((LEFT(A5:A16,2)="12")*1)

もし、マクロ,CountIf にこだわるのなら、120~129で CountIf する必要があると思います。
ワイルドカード「*」が使えれば楽なのでしょうけど。

その他に、関数を作ってしまうって手も有ります。(関数サンプルも記載しておきます)

Sub カウント()

Dim cnt As Integer
Dim i As Integer '★追加

' 3桁の数字から12であるセルをカウント
' 'ここにどのように書くのでしょうか↓
'cnt = WorksheetFunction.CountIf(Range("F5:F16"), " ")

'★追加↓
For i = 0 To 9
'F5~F16内の 120~129の数字をカウント
cnt = cnt + WorksheetFunction.CountIf(Range("F5:F16"), "12" & i)
Next i
'★追加↑

Range("C2").value = cnt

End Sub

Function cnt_if(target As Range, num As String) As Integer
Dim wk As Range
Dim i As Integer
Dim flg As Boolean

cnt_if = 0
For Each wk In target
flg = True
For i = 1 To Len(num)
If Mid(num, i, 1) <> "*" Then
If Mid(num, i, 1) <> Mid(wk, i, 1) Then
flg = False
Exit For
End If
End If
Next i
If flg = True Then cnt_if = cnt_if + 1
Next

' C2セルに =cnt_if(F5:F16,"12*") の式を入力して下さい。
' "12*"のみでなく "*24""*5*"などもカウントします。

End Function

[返信 4] Re : カウントイフについて
投稿者 : ピロリ     投稿日時 : 2022/05/24(Tue) 21:14:57
ご免なさい。 セル関数は、A5:A16 ではなく F5:F16 なので、下記ですね。

=SUM((LEFT(F5:F16,2)="12")*1)

[返信 5] Re : カウントイフについて
投稿者 : 三次     投稿日時 : 2022/05/25(Wed) 15:20:55
ありがとうございます。
 > =SUMPRODUCT((LEFT(A5:A16,2)="12")*1)
ワークシート関数ではできるのですね。

> cnt = WorksheetFunction.CountIf(Range("F5:F16"), "12*")
これはただ張り付けてはできませんでした。
自分のやり方がいけないのかな、わかりませんでした。

> Sub カウント()
これが一番わかりやすかったです。

> Function cnt_if(target As Range, num As String) As Integer
これもできましたが、中身がよくわからずこれからの課題となります。
 
皆さんありがとうございました。

[返信 6] Re : カウントイフについて
投稿者 : ピロリ     投稿日時 : 2022/05/25(Wed) 20:17:16
解決済となっていますが、一応ご連絡まで。

■[返信 5] 三次さん(2022-05-25 15:20:55)の記事

> > cnt = WorksheetFunction.CountIf(Range("F5:F16"), "12*")
> これはただ張り付けてはできませんでした。
> 自分のやり方がいけないのかな、わかりませんでした。


これは、Range("F5:F16") のデータが文字列でないと機能しません。
三次さんのシートでは、数値になっていると思うので、多分 cnt = 0 の結果のはずです。

CountIf において、ワイルドカード「*」でカウントできるのは、文字列のみです。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2022-07-07 14:02:26 )

Page
Top