- ベストアンサー
至急★★エクセル・COOUNTIFで計算セルの指定方法を教えてください
こんにちは。いろいろ調べましたが、わからないので教えてください。 該当データーを数えるCOOUNTIFを使って集計しているのですが、どうしてもうまくいきません。 計算セルですが、ここからここまで(A1:A30)という、つながっている範囲ではなく、 こことこことここのセルから(A1,A5,A7,A15・・・)という指定がしたいのですが、どうしたら良いのでしょうか? A列の中の「C]という文字を数えたい場合、範囲の場合は =COUNTIF(A1:A10,"C") で、できるのですが セル指定の場合は =COUNTIF(A1,A5,A7,A15,A22,"C")や =COUNTIF((A1,A5,A7,A15,A22),"C") などと入力してみてもダメでした。 これができないと、仕事がぜんぜん先に進まないので、すみませんが、お願いします~!!!!
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >同じようなことをA列だけではなく、B列からもしたいのですが(全部で50列ほどあります)、数式をコピーすると、すべてA列の計算となってしまいます。 すみません。なかなか、思い切りが出来ないもので、つい、安易な方法に頼って墓穴を掘ってしまいました。(^^; 今度は、検索値と検査範囲の順番が逆になります。 前回のは、無視してください。たぶん、ExcelのVersion にも左右されないかと思います。 Function PCOUNTIF(ByVal 検索値, ParamArray 範囲()) Dim c As Variant, k As Variant, cnt As Long Application.Volatile For Each c In 範囲 If c.Count > 1 Then For Each k In c If k.Value Like 検索値 & "*" Then cnt = cnt + 1 End If Next Else If c.Value Like 検索値 & "*" Then cnt = cnt + 1 End If End If Next PCOUNTIF = cnt End Function なお、つまらない話ですが、PCOUNTIFは、パラメータのPのCOUNTIF という意味です。 使用法: =PCOUNTIF("C",A1,A5,A10, A15,A22) ドラッグ・コピーが可能になりました。 もちろん、こういう方法もアリです。 =PCOUNTIF("C",A1:A5,A10, A15,A22) なお、Like 検索値 & "*" という検索方法は、Excelの全般的な検索方法に従い、例えば、ABC が検索値ですと、検索されるデータ側が、ABCD も ABCDE もそのカウントに入れるという考え方に基づいています。したがって、そういう方法がよけいなおせっかいということでしたら、 Like 検査値 Then と書き換えてください。ぴったり同じものを数に入れます。 今回は、出来栄えはよいと思います。
その他の回答 (8)
- imogasi
- ベストアンサー率27% (4737/17069)
各列のカウントする勘定に1,5,7,15・・行が共通なら、ワーク列(たとえば使っていないW列とする)の 1,5,7,15、・・にしるし(1など)を入力し A列がCでW列が1というカウントをすればよいと思うが、この方法は使えませんか。 A1:D11に A列 B列 D列(上記ではW列といっていたもの) a 1 s 2 c 3 1 d 4 f 5 g 6 c 7 s 8 w 9 e 3 c 4 1 B列の計数合計なら 式=SUMPRODUCT((A1:A11="c")*(D1:D11=1)*(B1:B11)) 結果は7です。 件数を出すのであれば、=SUMPRODUCT((A1:A11="c")*(D1:D11=1)*1)です。 B列的な列が沢山あれば、式が複写できるように式を入れる場所を工夫してください。
- mshr1962
- ベストアンサー率39% (7417/18945)
1,5,7,15行目だけに共通の項目はありますか? 例えばC列に"A"が入力されているとすれば =SUMPRODUCT((A1:A30="C")*(C1:C30="A")) とすれば計算できます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >=COUNTIF((A1,A5,A7,A15,A22),"C") これ自体は、どうやっても無理ですね。 ユーザー定義関数を考えてみました。 Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、このコードを貼り付けて、 再び、Alt + F11 で、画面を閉じます。 Function FCOUNTIF(文字列の範囲, 検索文字 As String) As Long Dim myArray As Variant, rng As Variant, myRng As Range Dim cnt As Long Application.Volatile If VarType(文字列の範囲) = 8204 Then FCOUNTIF = Application.WorksheetFunction.CountIf(文字列の範囲, 検索文字) Exit Function End If If InStr(文字列の範囲, ",") > 0 Then myArray = Split(文字列の範囲, ",") For Each rng In myArray If myRng Is Nothing Then Set myRng = Range(rng) Else Set myRng = Union(myRng, Range(rng)) End If Next rng For Each c In myRng If c.Value Like 検索文字 & "*" Then cnt = cnt + 1 End If Next End If FCOUNTIF = cnt End Function 使い方は、一般の関数と同じですが、引数を「" "(クォーテーションマーク)」で囲みます。 このようにします。 =FCOUNTIF("A1,A5,A7,A15,A22","C") また、以下のように、範囲を間に含めることも可能です。 =FCOUNTIF("A1:A5,A7,A15,A22","C") また、通常のCOUNTIF のように使うことも可能です。 その場合は、引数に「" "」は、つけないでください。 =FCOUNTIF(A1:A5,"C")
お礼
詳しいご説明ありがとうございます。 さっそくやってみたのですが(コピーして・・・)うまくいきました。 ただ、同じようなことをA列だけではなく、B列からもしたいのですが(全部で50列ほどあります)、数式をコピーすると、すべてA列の計算となってしまいます。 これは、列を変えるたびにいちいち入力するしかないのでしょうか? とてもたくさんあるので、できればコピーしたいのですが、何か良い方法があれば教えてください。 引き続き、甘えて申し訳ありませんが、よろしくお願い致します。
- ttyp03
- ベストアンサー率28% (277/960)
こんな数式はどうでしょう? =(A1="C")+(A5="C")+(A7="C")+(A15="C")+(A22="C") ちょっと面倒ですかね。
- tessyu
- ベストアンサー率53% (59/110)
#3です。 すみません、間違えました。
- tessyu
- ベストアンサー率53% (59/110)
=COUNTIF((A1):(A5):(A15),"C") で、どうですか?
なぜ検索範囲が連続していないのかがよく分からないのですが、その検索範囲に規則性はありますか?
- OsieteG00
- ベストアンサー率35% (777/2173)
=COUNTIF(A1,"C")+COUNTIF(A5,"C")+~ ではダメですか?
お礼
ご回答くださった皆様、ありがとうございます。 私が入力したものでは、まったくダメだったんですね・・・。 ご親切に教えてくださってありがとうございました。 なんとか目的どうり、作ることができました。 ありがとうございました。