[[20040322154541]] 『@やAなどの○つき文字のカウント』(りんご) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『@やAなどの○つき文字のカウント』(りんご)

 教えてください。
 一つのセルにAltで改行した文章が入っています。
 それぞれの行の頭には@やAやSが入っています。
 その数をカウントしたいのですが、数式でできるでしょうか。
 何人かの人が同じファイルに書き込み、それを集計しています。
 今は、いちいち目でみて全てをハンド入力していますので時間がかかります。
 質問を検索してみましたが、見当たらないように思いました。
 どなたか教えていただけますか。お願いします。

 1つのセルにだと、難しいのではないでしょうか?
セルを分けて入力した方が得策かとおもいます。(ケン)


 集計する側はそうなんですが、入力する側は決められたフォーマットに誰彼となく次々と書き込んでいきます。
 多分、そのたびに各個人で行を挿入していくのは時間のロスになるので上記のようになっているのだと思います。
 そういう関数がなければ現在の要領で時間をかけて集計します。
 出来るのか出来ないかを知りたかっただけですので。
 ありがとうございました。(りんご)

 A1に入力された@をカウントするとして、
=LEN(A1)-LEN(SUBSTITUTE(A1,"@",""))
こんな意味でしょうか?
(Yosh!) OS:WinXP Excel:2000

 そう言う意味か〜。箇条書きになっていると言うことで勘違い?してました。
Yosh!さん、有難う御座います。(ケン)

 すみません(T_T)
 箇条書きなんです(泣)
 (りんご)

 もう一度、説明をお願いします。@の数を知りたいのですか?
 @10
 A5
 @15
 B15
 @10
となっていて35を求めたいのですか?(ケン)

 @あいうえお・・・
 Aかきくけこ・・・
 Bさしすせそ・・・

 となっているセルがあるとして、求めたいのは「3」
 @から始まってSのときには、求めたいのは「20」
 ということです。すみません(りんご)

 やはり、私のレベルでは、難しいです。
ユーザー関数なら出来るかなぁ?(ケン)

 無理やりですが、
@、Aなどが必ずセル内改行されている場合、
改行個数をカウントするという発想ではダメでしょうか。
Yosh!さんの式をちょっとぱっくんして

=LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1

 (KAMIYA) 

 私が勘違いしていましたね^^;
ケンさん、KAMIYAさん ありがとうございます。(Yosh!)

 お〜改行の数が数えれるのですね。(ケン)

 うーん、今気が付いたんですが、私の式も
項目数よりもセル内改行のほうが多いと正確な答え出てこないんですよね。
却下、かな?
 (KAMIYA) 

 試しに作成してさせていただきましたが、改行は、各1個で文頭と改行の次にかならず、
 該当記号があり、また、最後の改行の次には、100文字以内ということが条件なのです。

 =IF(A1="","",
 IF(COUNTIF(A1,"*"&CHAR(10)&"*")=0,LEFT(A1),
 VLOOKUP("*",IF(LEFT(RIGHT(A1,ROW(2:101)))=CHAR(10),LEFT(RIGHT(A1,ROW(1:100)))),1,)))
 として、Ctrl+Shift+Enter。です。               (LOOKUP)

 実用性には、乏しいものですので恐縮ですが、こちらは、改行には影響を受けません。

 =IF(A1="","",
 CHAR(LOOKUP(9^9,
 IF((CODE(MID(A1,COLUMN(1:1),1))>11552)*(CODE(MID(A1,COLUMN(1:1),1))<11573),
 CODE(MID(A1,COLUMN(1:1),1))))))
 として、Ctrl+Shift+Enter。です。               (LOOKUP)

 色々と方法が有るのですね。精進精進っと。(ケン)

 抽出するものが、記号ではなく、数値ということですと、各、このようになります。

 =IF(A1="","",
 IF(COUNTIF(A1,"*"&CHAR(10)&"*")=0,CODE(A1)-11552,
 MAX(IF(LEFT(RIGHT(A1,ROW(2:101)))=CHAR(10),CODE(RIGHT(A1,ROW(1:100)))-11552)))) 
 として、Ctrl+Shift+Enter。こちらは、A1内の記号の最大値。

 =IF(A1="","",
 LOOKUP(9^9,
 IF((CODE(MID(A1,COLUMN(1:1),1))>11552)*(CODE(MID(A1,COLUMN(1:1),1))<11573),
 CODE(MID(A1,COLUMN(1:1),1))-11552)))
 として、Ctrl+Shift+Enter。こちらは、A1内の記号で、一番奥に書かれたものの意味です。(LOOKUP)


 単に丸数字の数を数えます。

 @あああ
 Aいいい
 Bううう
 のときはもちろん3ですが、

 @あああ
 Aいいい
 Cえええ
 のときも3です。

 @あああ
 Aいいい
 Aいいい
 Bううう
 のときは4です(汗)。

 @あああ
 Aいいい
 Bは@とAを利用してする
 は5です(汗)。

 番号が重複&飛んでたりしたときにどうするかによりますけど、
 ケンさんのスーパーグレートウルトラユーザー関数に期待(笑)。
 (ramrun)

 {=COUNT(IF((ABS(CODE(MID(A1,ROW(1:9999),1))-11562))<11,1,""))}

 スーパーグレートウルトラ・・・と言われると出すのが、恥ずかしいのですが
折角作ったので
 Function mymax(data)
    For i = 1 To Len(data)
        mydata = Mid(data, i, 1)
        mydata_1 = AscW(mydata)
        If mydata_1 >= 9312 And 9331 >= mydata_1 Then
            If mydata_1 > mydata_2 Then
                mydata_2 = mydata_1
                mydata_3 = mydata
            End If
        End If
    Next
    mymax = mydata_3
 End Function
(ケン)ramrunさんのスーパーウルトラグレートも見てみたいなぁ〜


 うわ。。。!
 び、びっくりしました!
 ものすごい式が、しかもパーフェクト(^O^)/
 見ても式の意味が解らないのが残念ですが、これをセル番地だけ変えてコピーさせて頂きますm(__)m

 皆さま、いつも拝見してます豪華メンバーと言いますか、オールスター花の競演でとってもとっても嬉しい一日です!
 本当にありがとうございました(*^^*)
 式の意味がわかるように頑張ります!(りんご)


 教えて下さい。私も同じような集計をするので試してみたのですが、○数字の順番が
 @BD・・・
 AC・・・
 のような時がありますが、この時に私の欲しい結果は「5」です。
 lookup様の式ですと、この場合4が返されてしまいますので、ramrun様の式で試してみましたが、そうしますと下方へフィルした時に正しい結果が返されません。
 カウントしたいセルがB3からB7まであるとして、式の中のどこを変更したらよいのでしょうか。
 それとも、どこかを絶対参照にしなければならないのでしょうか。
 ご教示宜しくお願い致します。
 (綾波)

 ひとつのセルの中の丸文字の数を単に数えるのでしたら、A1:A20に下のものを
 ここからコピーし貼り付けたのち、C3などに=SUMPRODUCT(COUNTIF(B3,A$1:A$20))
 として、B7までフィルドラッグされたらどうでしょう?  
 文字化けしますので、こちらでお願いします。           (LOOKUP)

 A
="*@*"
="*A*"
="*B*"
="*C*"
="*D*"
="*E*"
="*F*"
="*G*"
="*H*"
="*I*"
="*J*"
="*K*"
="*L*"
="*M*"
="*N*"
="*O*"
="*P*"
="*Q*"
="*R*"
="*S*"

 補足です。この数式は、丸文字の数ではなく、丸文字の種類です。
 同じ物が複数ある場合には、それぞれ、一個と数えられるものです。 

 フィルすることを考慮していないので、ROWの数値がずれてしまいます。
 絶対参照にしてください。

 あとは重複や歯抜けなどチェックしたいとなると、
 ケンさんがハイパーユーザー関数を作成してくれると思います。
 私はもう脳ミソが出来上がっていて、ありきたりの
 プログラムしか組めませんので、ケンさんの柔軟な発想に期待しています。

 (ramrun)22時まで仕事〜

 {=COUNT(IF((ABS(CODE(MID(B3,ROW($1:$9999),1))-11562))<11,1,""))}

 え〜。また、宿題が出てる〜。
(ケン)がんばってみるか〜っと


 なるほど、COUNTIFをそのように使えば式が動くのですね。有難うございます。>LOOKUP様
 ramrun様、お仕事お疲れさまでした。絶対参照で正しく反映されました。m(__)m
 ケン様、ユーザー関数ってマクロですか?
 色んな方法で表現できるExcelって、楽しいですね。
 (綾波)

 LOOKUP様、教えて頂いた式「=SUMPRODUCT(COUNTIF(B3,A$1:A$20))」を利用させて頂いておりますが、
 一つのセルに文字が沢山入りますと、○付数字が途中までしか認識できないようです。
 Rまであるのに10と返されたり、Pまであるのに11と返されたり。
 文字数制限を問わない式というのは、やはり難しいのでしょうか。
 なお、配列数式はセル結合しておりますので使用できません。
 お手すきの時にでもお返事いただけたらと思います。
 宜しくお願い致します。(綾波)

 こちらでテストしますと、このようになります。
 この数式は、先におことわりしていますように、丸文字の種類を数えるものです。

   B                                C
 3 *@*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S* 20

 3 =@=@=@=@=@=@=@=@=@=@=@=@=@=@=@=@=@=@=@=@= 1 

    (LOOKUP)

 はい、存じております。種類は間を飛ばすものは一つもございません。
 種類が17あっても、文字数が多くなりますと17と返さず、11と返すのです。
 当然ですが、文字数とは、○付数字以外の文字列のことです。
 @の跡に「あ」とか「い」の文字をズラズラズラと入力してテストして頂ければ
 私の質問の意図をご理解いただけると思います。
 (綾波)

 確かにおっしゃる現象が発生します。=COUNTIF()の仕様は、推測の及ばないところもありますので、
 A1:A20に下のように配置し、数式を=SUMPRODUCT(LEN(B3)-LEN(SUBSTITUTE(B3,A$1:A$20,)))
 としてご覧下さい。 これは、セル内の丸文字の数を単に数えるものです。

  A
 ="@"
 ="A"
 ="B"
 ="C"
 ="D"
 ="E"
 ="F"
 ="G"
 ="H"
 ="I"
 ="J"
 ="K"
 ="L"
 ="M"
 ="N"
 ="O"
 ="P"
 ="Q"
 ="R"
 ="S"
       (LOOKUP)

 早々にご回答いただき有難うございます。
 なるほど、必要なものを抜き出し、それ以外の文字を減算することによって
 必要なものだけが残る、という訳ですね。上記式でうまく処理できました!
 有難うございました。
 (綾波)

 すみません、教えていただけますでしょうか。
 21.や22)等の1字でない数字は、="21."などにしてもカウントしてくれませんが、
 1文字でなければ認識しないということでしょうか。
 宜しくお願いいたします。
 (ましゅまろ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.