- 締切済み
Excelの範囲内カウント方法について
Excelの指定した範囲内のセルに入力されている国語、数学、社会の個数をカウントしたい場合です。カウントイフの数式+でつなぐ方法しかないんですか?
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- msMike
- ベストアンサー率20% (368/1812)
[No.7]への補足へのコメント、 》 これはマクロですかね?? それが、“ベストアンサー率 34%”という超ベテランの、マクロ音痴の私への真面目なコメントとは到底信じられませぬッ! [数式バー]に示したように、「カウントイフの数式+でつな」がない、僅か1個を使用しただけの、チョー簡単な回答でした。 ちなみに、式中の Range は、赤地のセル A11 に白フォントで明記していたように、範囲 A1:F10 に付けた単なる範囲名なので、当該式は式が長くなるけど(だから、私は名前多用派の一匹狼です(*^_^*))、 =COUNTIF($A$1:$F$10,C13) と同じことです。 もう一つ、ちなみに、 範囲 A1:F10 を選択⇒マウスポインタを[名前ボックス]内に放り込み⇒そこに在った文字列“A1”を文字列“Range”に上書き⇒Enterを「エイヤッ!」と憎々し気に叩き付けて、名前 Range を作成した次第です。 諄くなった序でに、式 =COUNTIF($A$1:$F$10,C13) を入力したセル C14 は右方にオートフィルするだけぇ~、です。
- kkkkkm
- ベストアンサー率66% (1742/2617)
回答No.4の補足です。 回答No.4で =SUMPRODUCT((A1:A10=B1:D1)*1) B1:D1に空白があってA1:A10にも空白があるとそれも足してしまいました。 と回答しましたが B1:D1の空白になるセルにたとえばダミーとかA1:A10に出てこない文字列を入れておけば大丈夫です。 ただし、一列もしくは一行だけの対応になると思いますから 複数行だと =SUMPRODUCT((A1:A10={"国語","数学","社会"})*1)+SUMPRODUCT((B1:B10={"国語","数学","社会"})*1) 横方向一行でしたら =SUMPRODUCT((G11:N11=TRANSPOSE({"国語","数学","社会"}))*1) 複数行だと =SUMPRODUCT((G11:N11=TRANSPOSE({"国語","数学","社会"}))*1)+SUMPRODUCT((G12:N12=TRANSPOSE({"国語","数学","社会"}))*1) 複数行や列だと場合によってはCountifで繋げたほうがいいかもですね。 ちなみに強引な作戦の自作関数でしたら =mCountIF(A1:B10,"国語","数学","社会") で、範囲は複数行や複数列でも大丈夫です。
- NuboChan
- ベストアンサー率47% (799/1673)
例えば、 Excelの指定した範囲内のセルに入力されている国語、数学、社会の各文字列の個数をカウントするVBAのコード Sub CountSubjects() Dim rng As Range Dim countJapanese As Integer Dim countMath As Integer Dim countSocial As Integer Set rng = Range("A1:C10") '指定した範囲内のセルを選択 countJapanese = WorksheetFunction.CountIf(rng, "国語") '国語の個数をカウント countMath = WorksheetFunction.CountIf(rng, "数学") '数学の個数をカウント countSocial = WorksheetFunction.CountIf(rng, "社会") '社会の個数をカウント MsgBox "国語: " & countJapanese & vbCrLf & "数学: " & countMath & vbCrLf & "社会: " & countSocial 'メッセージボックスに表示 Set rng = Nothing End Sub
- imogasi
- ベストアンサー率27% (4737/17070)
#2です。補足に関連して。 (1)国語のセル何セル、数学のセル何セル、社会のセル何セルを3セルに入れる関数で出すのは簡単で=COUNTIF(A1:B5,"国語")とい関数で出来るのでは。 (2)国語のセル+数学のセル+社会のセル(科目で重複して出現はそのまま各々+1と数える) セル数 (3)国語のセル、数学のセル、社会のセルについて異なる科目は何種類か?2回目以降出現は数えない。 このうち、どのタイプの質問をしたのか? AND条件的な関数はあっても、OR条件的な関数は無いことが多い。各々の該当件数を+で足せば仕舞、とエクセルの設計者は考えたのではないかな。 それを嫌がったら、難しい関数やVBA利用だろう。 ーー (2)、(3)は意外に関数では難しい。VBAではやや簡単。 ーー (2)の質問と思ったが。 ユーザー関数なら、VBA関連だが、標準モジュールに下記を作っておく。 Function cf(rng As String, k1 As String, k2 As String, k3 As String) cnt = 0 For Each cl In Range(rng) If cl.Value = k1 Then cnt = cnt + 1 'MsgBox cl.Address End If If cl.Value = k2 Then cnt = cnt + 1 'MsgBox cl.Address End If If cl.Value = k3 Then cnt = cnt + 1 'MsgBox cl.Address End If Next cf = cnt End Function (もうすこし改良が出来る店があるかも。) そしてシートのセルに、関数の入れ方(例)データがA1:C6セル範囲内として)は =cf("A1:C6","国語","社会","数学") のように入れる。 A1:C6セル あ い う 国語 え うう さ さし すせ そ 数学 た な 国語 社会 社会 たた 国語 の例では、結果は6(セル)。
- kkkkkm
- ベストアンサー率66% (1742/2617)
> やっぱマクロですかね。 その後、ごぞごぞしてたら以下の方法でできました。 =SUMPRODUCT((A1:A10={"国語","数学","社会"})*1) 後半を範囲指定した場合 =SUMPRODUCT((A1:A10=B1:D1)*1) B1:D1に空白があってA1:A10にも空白があるとそれも足してしまいました。
- kkkkkm
- ベストアンサー率66% (1742/2617)
> 範囲指定で、その後に("国語”,"数学","社会")みたいにできるといいのですが… 回答No.2さんが紹介しているサイトの配列数式を利用するか、強引に自作関数とか… =mCountIF(A1:A10,"国語","数学","社会") 標準モジュールに以下を記載して上記の式で Function mCountIF(ByRef mRng As Range, ParamArray FStr() As Variant) As Long Dim mStr As Variant Dim mCount As Long mCount = 0 For Each mStr In FStr mCount = mCount + WorksheetFunction.CountIf(mRng, mStr) Next mCountIF = mCount End Function ただ VBAを記載したファイル限定か 個人用マクロブックに記載して =PERSONAL.XLSB!mCountIF(A1:A7,"国語","数学","社会") とかで個人用マクロブックが存在するPC限定とかになりますが…
お礼
- imogasi
- ベストアンサー率27% (4737/17070)
https://nyanto.jimdofree.com/%EF%BD%B4%EF%BD%B8%EF%BD%BE%EF%BE%99%E9%96%A2%E6%95%B0-%E8%AA%AC%E6%98%8E/countifs%E9%96%A2%E6%95%B0%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-%E8%A4%87%E6%95%B0%E6%9D%A1%E4%BB%B6%E4%B8%80%E8%87%B4%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E6%95%B0%E5%80%A4-%E6%97%A5%E4%BB%98%E7%AD%89/countifs%E9%96%A2%E6%95%B0%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E8%A4%87%E6%95%B0%E6%9D%A1%E4%BB%B6%E3%82%92%E3%81%BE%E3%81%9F%E3%81%AF-or%E6%9D%A1%E4%BB%B6-%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF/ COUNTIFS関数で複数条件をOR(または)でカウントする の後半にもう一つの解決法が載っている。 SUMPRODUCT関数を使った方法 です。 関数の質問などほとんどWEB記事で載っているよ。
お礼
補足
リンク先ありがとうございました。初めて聞く関数でした。私がやりたいのは、例えばA1:F10の範囲内にランダムに、国語、数学、社会とセルに入力されているのもをそれぞれ、国語何個というように出したいんです。リンク先のように1つ目の範囲、2つ目というものではないのですが、この関数も使えますかね??
お礼