• ベストアンサー

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/17068)
回答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

  • カンマをデリミタとするレコードを取得したい

    お世話になっております。 現在直面している問題に助言を頂けたらと思い質問をさせて頂きました。 もし、ご存じの方がいらっしゃいましたらご回答を宜しくお願い致します。 MySQLにて テーブルA カラム1  カラム2 1 AAA,BBB,CCC       2 BBB,DDD 3 CCC,DDD,EEE,FFF のようなレコードが入っているとします。 これをカラム2のカンマをデリミタとして分割した文字列でgroup byをしたような結果が欲しいと思っております。 希望結果 文字列 出現回数 AAA   1個 BBB   2個 CCC   2個 DDD  1個 EEE  1個 カンマで分けられている文字列の数に規則性はなく、何が入っているかわからない状態、 また、何個の文字列がカンマによって分割されているかわからない状態です。 AA,BB と2つの文字列がカンマ区切りで入っていることもあれば AA,BBB,CCCC,・・・・ と1000個の文字列がカンマ区切りで入っている状態です。 私が未熟なためか私の調べた限りではこのように取得する方法が見当たりませんした。 DBの構造に関しましては既に動いているサービス内のものですので変更することはできません。 以上、お手隙の際にご回答を宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SUMPRODUCT関数の使い方

    A列 aaa aaa bbb bbb ccc ccc と入力して、 「aaa」の個数と「bbb」の個数の合計を求める式を教えてください。 見た限りの答えは、「aaa」が2個、「bbb」が2個で4なのですが B1に 「=SUMPRODUCT(A:A="aaa",A:A="bbb")」 としたのですが、「0」が返ってきてしまいます。 B2に 「=SUMPRODUCT(COUNTIF(A:A,"aaa"),COUNTIF(A:A,"bbb"))」 だと、 4が返ってきますが A列を aaa aaa bbb にすると「3」が返ってきてほしいのに、2になってしまいます。 個数の合計を返す関数式をご教授ください。

  • エクセルでの計算方法をおしえてください

    えくせるで例えば、エクセルで黒字のAは1とし赤字のAは0.5として足し算する方法は無いでしょうか     AAA  AAA(赤字)     BBB  BBB     CCC  CCC     DDD  DDD 合計  4   3.5

  • 別シートの値を検索して一致したものを合計する

    excelvba初心者です。 お手数おかけします。 難問なのかどうかもよく分からず。。困っています。 シート1       シート2   シート3 AAA 100     AAA 50      BBB 20 BBB 200   CCC 150   CCC 30 DDD 300   QQQ 250   DDD 10 EEE 400     WWW 350  RRR 40 上記の値を決められた順番に別シートに集計したい(その時に、値を1/10にしたい) シート4 AAA 150 BBB 220 CCC 180 DDD 310 EEE 400 FFF 0 GGG 0 www 350 findでAAAを検索し見つかった値を ifにて条件分岐させるものをつくったものの プロシャーシーが大きすぎと言われてできません。 どなたか教えていただけないでしょうか。

  • Excelで同一のデータを抽出して横並びに

    A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  ccc     4 bbb      12  ddd     6 ccc     10  aaa     22 ddd     6   eee     10 eee     5   bbb     7 fff       8 kkk 9 kkk 7 lll 4 上記のようなデータを 以下のように同じ商品コードを横並びに表示させたいのですが どういったcountifとかで試したのですが上手くいかず、どのような関数を使えば可能でしょうか? A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  aaa     22 bbb      12  bbb     7 ccc     10  ccc     4 ddd     6   ddd     6 eee     5   eee     10 fff       8 kkk 7 kkk 9 lll 4 宜しくお願い致します。

  • エクセルの文字処理

    以前に同じ様な質問があったかも知れませんが、探しきれなかったので教えてください。 A1~A4の4つのセルに以下のスペースが入った文字列が入っていた場合 A1|AAA A2|AAA BBB A3|AAA BBB CCC A4|AAA BBB CCC DDD    A   B   C   D  1|    AAA 2|AAA BBB 3|AAA BBB CCC 4|AAA BBB CCC DDD という具合にしたいのです。 条件は  ・セル内にスペースで区切られない文字列があった場合には、B列に入れる  ・それ以外はスペースで区切って、A列B列C列D列に入れる  ・文字数は3文字固定ではなく全角半角が混在 以上です。すいません宜しく願いします。

  • Excel VBA サブディレクトリの取得について

    Excel VBA についての質問です。 私は、VBAの初心者です。 フォルダ選択ダイアログを開き、あるフォルダを選択させます。 選択したフォルダ配下のファイルとサブフォルダにあるファイル一覧とそのファイルのパス取得したいです。 【例】D:\TEMP\AAA フォルダを選択 D:\TEMP\AAA  D:\TEMP\AAA\BBB\CCC.txt D:\TEMP\AAA\BBB\DDD\EEE.txt D:\TEMP\AAA\BBB\DDD\FFF.txt GGG.txt が存在する。 まず、フォルダAAAまで選択されたら、 以下の結果がエクセルに出力したいです。 BBB         CCC.txt BBB\DDD        EEE.txt BBB\DDD        FFF.txt               GGG.txt うまく伝えないかもしれないですが、ご教授お願いいたします。

  • 正規表現で一つ目の区切り文字で区切りたいのですが・・・

    aaa/bbb/ccc/ddd aaa/bbb/ccc/ddd/eee aaa/ccc/ddd $a=~/(.*)\/(.*)/; $1はそれぞれ aaa/bbb/ccc aaa/bbb/ccc/ddd aaa/ccc と成ってしまいます。 このように 「最後の/」で分けられてしまいます。 一つ目の/で分けるにはどうしたらよいでしょうか。

    • ベストアンサー
    • Perl
  • 抽出して並べ替えたい

    初めまして 非常に悩んでいます。 エクセルシートの列に下記のようにデータが並んでいます。(文字列) AAA bbb ccc (空白) BBB ddd eee (空白) AAA bbb ccc (空白) AAA eee ggg 並べ替え後 AAA AAA BBB bbb eee ddd ccc ggg eee 尚、列上でセル位置は任意で、空白行も任意です。(1つ以上です) できれば関数でお願いします。 VBAの場合、使用したことがないので詳しくお願いします。

  • EXCELで複数行の検索

    初心者です。 Aファイルのaaa、bbbなどをキーに Bファイルを検索してできるだけ簡単にマクロ等使わずに 下記のような抽出をする方法があれば教えてください。 よろしくお願いします。 Aファイル aaa bbb ccc Bファイル(例えば「ddd」と「あ」は別セルです) ddd あ eee い aaa う fff え bbb お ggg か ccc き 結果 Aファイル aaa う bbb お ccc き