• ベストアンサー

CountIf で","(カンマ)の数が取得できな

お世話になります。 VBAで質問させてください。 A1~A3にデータが入っております。 A1:aaa A2:bbb,ccc A3:ddd そこで、 合計数=CountIf("A1:A3",",") を実行しても0と出るのです。 処理がおかしいのかなと思ったのですが、 合計数=CountIf("A1:A3","aaa") を実行すると1の値が入ります。 底辺お手数ですが、カンマの数が取得できるVBAを教えて頂きたく 思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

=SUMPRODUCT(LEN(A1:A3))-SUMPRODUCT(LEN(SUBSTITUTE(A1:A3,",",""))) ですが、VBAでは、これをそのまま写すのは、マクロらしくないというか変則的で、VBAとしては上手くありませんので、以下のようにします。 Sub TestCount()  Dim rng As Range  Dim cnt As Long  Dim c As Variant  Set rng = Range("A1", Cells(Rows.Count, 1).End(xlUp))  For Each c In rng   cnt = cnt + Len(c) - Len(Replace(c, ",", ""))  Next  MsgBox cnt  Set rng = Nothing End Sub (あくまでもサンプルコードです。)

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

例えば、 A4セルに「ddd,eee,fff」とかあるとこのセルだけで「2」ですか?。 A4セルに「ddd,eee,fff」とかあるとこのセルだけで「1」ですか?。 作業を砕いていくと、 B列にはinstr関数でカンマがあるかないかの表記、 C列にはカンマがあったときのカンマの数をVBAで求め、その結果を表記 D1にはそのC列の総数 こんなことでも解決になりそう。 単にカンマを意味する記載の仕方を、というのなら、 chr(44) もその1つ。 "aaa" & chr(44) & "bbb" は "aaa,bbb" です。 「ddd,eee,fff」にカンマがいくつあるか、なんてのは 文字数(=11)分「x文字目1文字はカンマですか?」を繰り返し、でもできます。 11回繰り返せば4文字目と8文字目にカウントした「2」が求まる。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

この質問は何ですか。ワークシートの関数の質問かVBAの質問か。 後者なら合計数=CountIf("A1:A3",",")  なんてありえないのでは? Sub test01() For i = 1 To 3 MsgBox Application.WorksheetFunction.CountIf(Cells(i, "A"), "*,*") Next i End Sub のようなものだろう。 ーーー 質問者は セルの値と セルの値(文字列)の中の含まれる文字数と 混同している野ではないか。 ーー 関数のCOUNTIFは1セルの文字列全体がどうか(正確に)一致して一件とカウント。 bbb,cccに対し、カンマ1つを比べて該当1件にはならないでしょう。 そこではカンマが何個含まれているか言う発想に、質問者の頭の中で、変化しているようだ。 ーー これカンマの数のような、セルの文字列に含まれるある文字(列)の数をカウントしたいなら、カンマをReplaceで空白に置き換えて、文字列の長さの減った文字数を計算するのが定石だ。もちろんInstr関数で文字列最後までカンマを数える方法もあるが、前者がすっきりした方法でしょう。 ーー ワイルドカードで"*,*"とすればbbb,cccと*,*は等価と看做してくれるのでA2セルでは1件になる。

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

セルの値が , ではなく カンマを含むという事なら =COUNTIF(A1:A3,"*,*") こうではないのかな?

すると、全ての回答が全文表示されます。

関連するQ&A