- ベストアンサー
<excel 関数>行数をカウントしたい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどうでしょう。B2セルに↓ =IFERROR(MATCH("★*",A3:A$999,0)-1,COUNTA(A3:A$999)) 表が999行以上ある場合は999をもっと大きな数値にしてください。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
ボロが出そうなのだが書いてみます。 *は質問の星印の代替の文字(手抜き)。 下記の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でやります。
お礼
試してみました。確かに作業列を使えば分かりやすいですね。でも今回はできれば作業列無しの方法を探りたいと思います。別件でVBAの質問もしようと思っていますので、機会があればお願いいたします。 ありがとうございました。
- tsubu-yuki
- ベストアンサー率46% (179/386)
> なるべく簡単で理解しやすいものだと助かります とのことですので、作業列を設けて比較的単純な関数ひとつで(添付図参照)。 (例の場合)D列に作業列を設けます。 データがA2セルから開始されているようなので、 D2セル:=COUNTIF(A2:$A$2,"★*") として、必要行分フィル(コピー)します。 ※例に倣って、集計行は「★」から始まるものとしています。 「★サッカー」等。 これで、「自分の行までに"★"で始まるセル」が幾つあるか数えます。 件数をカウントするべきB2セルには B2セル:=COUNTIF(D:D,D2)-1 としてやります。-1している理由は、集計行自身を除いてやるためです。 これでアイテム数のカウントができているはずです。 ポイントがあるとすれば・・・ 「絶対参照と相対参照」の使い分けくらいでしょうか。
お礼
試してみました。確かに作業列を使えば分かりやすいですね。でも今回はできれば作業列無しの方法を探りたいと思います。 ありがとうございました。
- Nouble
- ベストアンサー率18% (330/1783)
関数では 色はなかなか 判断が、難しいですね ユーザー関数を、作れば 話は、代わります がね 星マークを元に カウントする間隔を、測って構わない なら 可能です、がね ある程度は、自らされる との、事 なので 先ずは、ヒントを 該当行に、必ず発現する記号を、決め、儲け、 特定列のみに、配置、 他には、発現させない と、言うルールにする (ユーザー書式で非表示にするとか、背景と文字色を同じにするとか、★等のアイキャッチ記号を、必ず配すとか、も可、 以降は、仮に$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) と、成ります 未確認なので、 此のままで上手く行く とは、限りませんが が、 ニュアンスは 伝わりました… よね? 其れで、先ずはともあれ の、ヒント 其れには、成った かと、思います 如何ですか?
お礼
MATCH(TRUE(),INDEX(NOT(ISERROR(FIND("★",$A3:$A$999))),,),0) 教えていただいた上記で試してみました(不要な記号やスペース消したら動きました) やりたい事にかなり近づきました。多少問題点ありますが、自分で解決できないか少し頑張ってみます。ありがとうございました。
お礼
IFERROR(MATCH("★*",$A3:A$999,0)-1,COUNTA($A3:A$999)) 教えていただいた式の「A3」を「$A3」し、該当箇所に貼付けていくことで求めていた結果が出ましたので、ベストアンサーとさせていただきます 皆さま大変参考になりました。 ありがとうございました!