プロが教えるわが家の防犯対策術!

よろしくお願します。Excel2013である特定の数字を含むものをカウントするにはどうしたらいいでしょうか。

具体的には

1
”1”
【1】

と記載されているものを

「1が3つある」

という風にカウントしたいのです。

countif 分では正確にカウントしません。

coutnif分を使う前にデータクリーニングをしたほうが良いかとも思いますが、
『1』"1"なd、色々な回答の仕方をしてきているようで、置換を行うのもかえって時間がかかります。

【】や""で囲まれても、その中の数字をカウントする方法はないでしょうか。

皆さまならどのようにしますか。

よろしくお願いいたします。

A 回答 (5件)

再投稿です


前回の回答の結果は、文字列の中の数字のみを文字として抜きだしましたが

もし、数字を数字として扱いたいのであれば、
=MAX(TEXT(MID(A1,{1,2,3,4,5},{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}),"標準;;0;!0")*1)
    • good
    • 0

>皆さまならどのようにしますか。


ということですので、私なら正規表現で解決!
使えるか使えないかよりも、以下は便利だと思います。

以下はかなりの汎用性があります。一般の関数には、以下のような能力はありません。正規表現の入れ方が必要なので、例をいろいろ上げてみました。
全角も数字として数えてしまいます。


A列
11
”12”
【1】
13

=reCOUNTIF(A1:A4,"\d+","=1")
答えは、1

範囲は、A1:A4,
\d+ は、とにかく数字を集める
その中で、
=1 だけを選ぶのです。

----------------
1文字以上のワイルドカード
=reCOUNTIF(A1:A4,"\d+",">10")
なら、集めた数字で、10以上はいくつかで、
3 となります。
---------------
文字の検索も可能です

=reCOUNTIF(A1:A4,"【.】")
括弧の中に、「.」半角コンマ1つはいっています。1文字ワイルドカード

【1】は勘定には入れますが、
【12】は、勘定には入れません。
答えは 1
---------------------------
A列
11
”12”
【1】【1】
13

正規表現グローバル

=reCOUNTIF(A1:A4,"\d+","=1")
これは、一回しか数字は拾いませんので、1個

グローバルモードになると
=reCOUNTIF(A1:A4,"\d+","=1",TRUE)
とすると、同じ行でも、何回か拾いますので、2個

また、文章の句読点の数さえ数えられます。
=reCOUNTIF(A1:A26,"[、。]",,TRUE)


'//標準モジュールのみです。

Function reCOUNTIF(範囲, 検索値, Optional 条件 = "=", Optional bGlobal As Boolean = False)
''引数の意味:reCOUNTIF(範囲, 検索値, [条件],[グローバル])
 Dim Rng As Range
 Dim d_text As String
 Dim expr As String
 Dim RegEx As Object
 Dim Ms, m, buf, c, t, cnt As Long, j As Long
 '言い換え
 
 expr = 条件
 Set Rng = 範囲
 d_text = 検索値
 expr = 条件
 
 Set RegEx = CreateObject("VBScript.RegExp")
 With RegEx
  .Global = bGlobal: .IgnoreCase = False
  .Pattern = "(" & d_text & ")"
 End With
 For Each c In Rng
  If IsNumeric(c) Then
   buf = StrConv(c.Value, vbNarrow)
   Else
   buf = c.Value
  End If
  Set Ms = RegEx.Execute(buf)
  If Ms.Count > 0 Then
   For Each m In Ms
    t = Ms(0).SubMatches(0)
    If expr <> "" And expr <> "=" Then
     j = Application.Evaluate(m & expr)
     If j Then j = 1
     Else
     j = j + 1
    End If
    If j <> 0 Then
     cnt = cnt + 1
     j = 0
    End If
   Next
  End If
 Next c
 reCOUNTIF = cnt
End Function
    • good
    • 0

除外したい物が全て分かっているなら、その一覧を作り、一文字目がそれに一致する記号であれば、前後一文字ずつ除外したものを表示させる。


その除外した一覧に対してCOUNTIFを使う。
かな
    • good
    • 0

A1セルに【1】があり


B1セルに
=MID(A1,MATCH(0,INDEX(ISERR(-MID(A1&0,COLUMN(1:1),1))
+0,0),),COUNT(INDEX(-MID(A1,COLUMN(1:1),1),0)))
そうすれば、1 のみ抽出できる。
但し、これは文字列の中から数字のみを抽出するので
A1セルが【123】だと、B1セルは 123 となります。
    • good
    • 0

212のような場合はどうしますか?


これも1が1つ含まれているとカウントするのでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

212のような場合はカウントしないようにしたいです。

1という数字が『』や【】、””などで囲まれている場合だけ、1としてカウントしたいです。

お礼日時:2017/02/13 16:23

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