アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
VBAで質問させてください。

A1~A3にデータが入っております。
A1:aaa
A2:bbb,ccc
A3:ddd

そこで、
合計数=CountIf("A1:A3",",")
を実行しても0と出るのです。

処理がおかしいのかなと思ったのですが、
合計数=CountIf("A1:A3","aaa")
を実行すると1の値が入ります。

底辺お手数ですが、カンマの数が取得できるVBAを教えて頂きたく
思います。

A 回答 (4件)

=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
(あくまでもサンプルコードです。)
    • good
    • 0

例えば、


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」が求まる。
    • good
    • 0

この質問は何ですか。

ワークシートの関数の質問か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件になる。
    • good
    • 0

セルの値が , ではなく


カンマを含むという事なら

=COUNTIF(A1:A3,"*,*")

こうではないのかな?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!