• ベストアンサー

<excel 関数>行数をカウントしたい

画像のような表があるとします(質問のために作ったものです) 黄色の部分がタイトル行みたいにお考えいただき、 その行のA列には、頭に★を付けてあるとします。 オレンジで塗ったセルにアイテム数(行数)を算出する関数を考えています。 ※画像では参考として数値を入力しています 大概の事はgoogle検索等で調べて何とかなるのですが、今回苦戦しています。 ※既出でしたら申し訳ありません 方法はいろいろありそうですが、なるべく簡単で理解しやすいものだと助かります。 詳しい方ご教授いただきたく、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

こんな感じでどうでしょう。B2セルに↓ =IFERROR(MATCH("★*",A3:A$999,0)-1,COUNTA(A3:A$999)) 表が999行以上ある場合は999をもっと大きな数値にしてください。

excel110
質問者

お礼

IFERROR(MATCH("★*",$A3:A$999,0)-1,COUNTA($A3:A$999)) 教えていただいた式の「A3」を「$A3」し、該当箇所に貼付けていくことで求めていた結果が出ましたので、ベストアンサーとさせていただきます 皆さま大変参考になりました。 ありがとうございました!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

ボロが出そうなのだが書いてみます。 *は質問の星印の代替の文字(手抜き)。 下記の1つの欠点は、式の複写をすべき飛び飛びセルを人間が判断して、式を複写貼り付けする点かな。 A-B-C-D列 A列の1,2,3は行番号 D列は大分類を全行に顕在化するための作業列。 サッカーなどの前の数字列が件数。 その下には価格に当たるデータがあるが、略。 1 元データ 商品名・件数 作業列 2 *サッカー  5  *サッカー 3 a11  *サッカー 4 a12     *サッカー 5 a13    *サッカー 6 a14    *サッカー 7 *バレー  6  *バレー 8 a21    *バレー 9 a22    *バレー 10 a23    *バレー 11 a24    *バレー 12 a25    *バレー 13 *野球   3 *野球 14 a31    *野球 15 a32    *野球 16 *スケート  4  *スケート 17 a41    *スケート 18 a42    *スケート 19 a43    *スケート 20 *バドミントン  6 *バドミントン 21 a51    *バドミントン 22 a52    *バドミントン 23 a53    *バドミントン 24 a54    *バドミントン 25 a55    *バドミントン A,B列は式なし。元データ。行番号は本来不要だが、説明のため設けた。 D2セル =IF(LEFT(B2)<>"*",D1,B2) この列は、データの全行(2-25行)に式複写する。 C2セルに、=COUNTIF($D$2:$D$100,B2) C2をコピーし、目視でC7.C13,C16,20セルに飛び飛びで張り付ける。 普通はこういうことは、あまりやらないが式の複写で元データ(価格)を壊さないため。 結果 上記例のC列。 ーー 本質問の課題は、私なら、VBAでやります。

excel110
質問者

お礼

試してみました。確かに作業列を使えば分かりやすいですね。でも今回はできれば作業列無しの方法を探りたいと思います。別件でVBAの質問もしようと思っていますので、機会があればお願いいたします。 ありがとうございました。

回答No.3

> なるべく簡単で理解しやすいものだと助かります とのことですので、作業列を設けて比較的単純な関数ひとつで(添付図参照)。 (例の場合)D列に作業列を設けます。 データがA2セルから開始されているようなので、   D2セル:=COUNTIF(A2:$A$2,"★*") として、必要行分フィル(コピー)します。  ※例に倣って、集計行は「★」から始まるものとしています。   「★サッカー」等。 これで、「自分の行までに"★"で始まるセル」が幾つあるか数えます。 件数をカウントするべきB2セルには   B2セル:=COUNTIF(D:D,D2)-1 としてやります。-1している理由は、集計行自身を除いてやるためです。 これでアイテム数のカウントができているはずです。 ポイントがあるとすれば・・・ 「絶対参照と相対参照」の使い分けくらいでしょうか。

excel110
質問者

お礼

試してみました。確かに作業列を使えば分かりやすいですね。でも今回はできれば作業列無しの方法を探りたいと思います。 ありがとうございました。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

関数では 色はなかなか 判断が、難しいですね ユーザー関数を、作れば 話は、代わります がね 星マークを元に カウントする間隔を、測って構わない なら 可能です、がね ある程度は、自らされる との、事 なので 先ずは、ヒントを 該当行に、必ず発現する記号を、決め、儲け、 特定列のみに、配置、 他には、発現させない と、言うルールにする (ユーザー書式で非表示にするとか、背景と文字色を同じにするとか、★等のアイキャッチ記号を、必ず配すとか、も可、 以降は、仮に$A$2:$A$999の、特定行に 記号★が記してあるもの と、する) で、ですね 例えば MIN((NOT(ISERROR(FIND("★".$A$2:$A$999)))*ROW($A$2:$A$999)>ROW())+ISERROR(FIND("★".特定列のセル範囲)))*2^25) 又は、単純に 例えば、C2に記入する場合 MATCH ( TRUE(),INDEX(NOT(ISERROR(FIND("★".$A3:$A$999))),,),0) と、記載 以降は、此をコピー すると、 例えば、C19では MATCH ( TRUE(),NOT(INDEX(ISERROR(FIND("★".$A20:$A$999)),,)),0) と、成ります 未確認なので、 此のままで上手く行く とは、限りませんが が、 ニュアンスは 伝わりました… よね? 其れで、先ずはともあれ の、ヒント 其れには、成った かと、思います 如何ですか?

excel110
質問者

お礼

MATCH(TRUE(),INDEX(NOT(ISERROR(FIND("★",$A3:$A$999))),,),0) 教えていただいた上記で試してみました(不要な記号やスペース消したら動きました) やりたい事にかなり近づきました。多少問題点ありますが、自分で解決できないか少し頑張ってみます。ありがとうございました。

関連するQ&A