- ベストアンサー
エクセル、行数をカウントしたい。
エクセル初心者です。 よろしくお願いいたします。 エクセルでこのような表を作っています。 A B C 1 10 15 2 20 3 10 4 15 5 10 6 10 10 7 8 この時、データの入っている行数をカウントしたいのです。 上の例では 「6」 です。 途中に空白の行はありません。 A列、B列にはどちらにも数字が入る場合と、どちらかにしか 入らない場合があります。 なので COUNT は使えないですよね? 今まではデータを入力後、下の空白の行を削除し、C列で COUNTBLANK として求めていたのですが、表の長さ(行数)が一定でないため、 体裁が悪くなってしまっていました。 希望としては。 最終行のC列に「終了」などと入れると、その文字列を判別 してくれて、それより上の行数をカウントしてくれる。 または 例えば OR を使って、A列B列どちらかにデータがある 場合のみ、カウントしてくれる。 こんなワガママなことができたら、と思っております。 補足が必要ならばいたします。 それと、遅くなるかもしれませんが、お礼は必ずさせていただきます。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
こういう関数もあり? =sum(if((a1:a50<>"")+(b1:b50<>""),1,"")) と入力して、ShiftとCtrlを押しながら、Enterを押す。 このような関数を配列関数 と いいます。
その他の回答 (7)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #5の回答者です。 >教えていただいた数式は私には複雑すぎて・・・ >初めて見る関数ばかりでした・・・ >コピペしてみたところ、行数は正しく示してくれましたが。 >おいおい勉強して行きたいと思います。 私が、掲示板に書き出した数年前には、#5の書き方はなかったです。こういうのは、日進月歩で進化しているのです。世界中の人が、掲示板の中で書いていて、一人の人の思いつきが世界中に広まるわけですね。私の書き方は、Excel Ver.4 の書き方からヒントを得たもので、自分が最初に使ったとは思ってはいても、いつの間にか広まって、本当に、自分は最初だったのか分からなくなっているものがありますね。 VBAやマクロで覚えて、再び、ワークシート関数に戻ってくると、また、違った姿に見えてきます。数式は、おぼろげながらイメージは、最初にはあっても、いじっているうちに出来上がるものであって、組み立てていくものではないようです。それが、マクロなどと比較する難しいものなのです。
お礼
たびたびの回答ありがとうございます。 私にはこのようなサイトを除けば、エクセルに関して周りに質問できる人も、 教えてくれる人もおらず、独学、といえば聞こえはいいですが、 本当に我流で今現在もやっております。 思えば自営業をやっている主人の、経理の手助けになれば、と Windowsのエクセルを初めて起動してみたのがきっかけでした。 そんな私が初めて作ったワークシートは、なんとSUM関数もなく(知らず)、 +や-をズラズラとつなげただけの、なんともお粗末なものでした(笑) それでも、エクセルに興味を持ったのは間違いなく、徐々に それこそカメの歩みのごとく、関数もひとつまたひとつと覚えて いっています。 教えていただいた数式が、理解できる日が来るよう、これからも マイペースでやっていきたいと思います。 また、こちらでお世話になることがあると思いますが、 どうぞよろしくお願いいたします。
- imogasi
- ベストアンサー率27% (4737/17069)
例データA1:B6 A列 B列 10 15 20 ー 10 ー 15 10 10 10 ーー A,Bとも空白の行を除く行数 =SUMPRODUCT(((A1:A6="")+(B1:B6=""))*1) または =SUM(IF(((A1:A6="")+(B1:B6="")),1,0)) と入れて、SHIFT,CTRL,ENTERの3つのキーを同時押しする。 (配列数式) ーー A,Bとそろって空白で無い行 =SUMPRODUCT((A1:A6<>"")*(B1:B6<>"")*1) =SUM(IF(((A1:A6="")*(B1:B6="")),1,0)) と入れて、SHIFT,CTRL,ENTERの3つのキーを同時押しする。 (配列数式)
補足
回答ありがとうございます。 教えていただいたまま、コピペしてみましたが、 =SUM(IF(((A1:A6="")+(B1:B6="")),1,0)) だと「4」が返ってしまいます。 また、 =SUM(IF(((A1:A6="")*(B1:B6="")),1,0)) ですが、これだと「0」が返るので、 「空白の行が0」ということで、わかるのですが。 申し訳ありません、配列数式については、こちらで回答を いただくまでまるで知らなかったので、にわか勉強では とても理解できず、どこが間違っているのかも自分では わかりません。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >最終行のC列に「終了」などと入れると、その文字列を判別してくれて、それより上の行数をカウントしてくれる。 言い換えると、C列の「終了」の後の数字の行はカウントしません。 これは、A~C列には置けません。(循環参照エラーが発生します) =IF(ISERROR(MATCH("終了",C:C,0)),"",MAX(INDEX(ISNUMBER(INDIRECT("A1:B" &MATCH("終了",C:C,0)))*ROW(INDIRECT("A1:B"&MATCH("終了",C:C,0))),,))) なお、A1 から始まらない場合は、 ISNUMBER(INDIRECT("A1:B" の側のみの変更をしてください。ROW側の変更はしないでください。
お礼
回答ありがとうございます。 >C列の「終了」の後の数字の行はカウントしません。 >これは、A~C列には置けません。(循環参照エラーが発生します) はい、この循環参照についてはわかります。 ですが、教えていただいた数式は私には複雑すぎて・・・ 初めて見る関数ばかりでした・・・ コピペしてみたところ、行数は正しく示してくれましたが。 おいおい勉強して行きたいと思います。 複雑な数式を教えていただき、ありがとうございました
- hiro-ss16
- ベストアンサー率42% (18/42)
C列にはデータが有る行の累計を表示しておいて、その最大値(この場合は"6")を見れば良いのではと思いますが、それではダメでしょうか。 C2 には次の式を入れ、下にコピーします。 =IF(COUNT(A2:B2)>0,C1+1,0) 1 A B C 2 10 15 1 3 20 2 4 10 3 5 15 4 6 10 5 7 10 10 6 8 0 9 0 10 10 1 11 15 2
お礼
回答ありがとうございます。 「なるほど」と思ってしまいました。 「累計」ですね、考えてもみませんでした。 教えていただいた方法で、C列を非表示にして、任意のセルで 「C列の最大値」を返すようにすれば、私のしたいことが できると思います。 参考にさせていただきます。ありがとうございました。
- cafe_au_lait
- ベストアンサー率51% (143/276)
=MAX(MATCH(10^10,A:A),MATCH(10^10,B:B)) で、A列またはB列の中で数値が入っている最終行を返します(10^10以上の数値は入っていないものとします)。 =MATCH("終了",A:A,0) で、A列の中で「終了」と入力されている行を返します。 詳しくはヘルプを参照してください。
お礼
回答ありがとうございます。 恥ずかしながら MATCH についてまだ何も知らなかった私なので、 ちょっとだけですが、ヘルプを見て勉強してみました。 C列最終行にはできれば「終了」をいれたく、 そして行数を返したいセルは、任意の位置にしたいので、 そこに =MATCH("終了",A:A,0) というのがシンプルで私にもわかりやすいようです。 参考にさせていただきます。ありがとうございました。
- koikoi1123
- ベストアンサー率42% (3/7)
すみません#1です、訂正です。 誤:D9(じゃなくても適当なセル)で=SUM(D1:D8)=列数が返ります。 正:C9(じゃなくても適当なセル)で=SUM(C1:C8)=列数が返ります。
お礼
回答ありがとうございます。 >C欄に空白以外のセルの個数を数える COUNTA(値1,値2,...)を使ってはいかがでしょうか。 私が最初に思いついたのがこの方法でした。 ですが、エラーが出たりして数式がうまく作れず、苦心しておりました。 >=IF(COUNTA(A1,B1)>=1,1,0) >=SUM(C1:C8) で、C列を表示しないようにすればすっきりしますね。 私のしたいことがばっちりできました。 参考にさせていただきます。ありがとうございました。
- koikoi1123
- ベストアンサー率42% (3/7)
C欄に空白以外のセルの個数を数える COUNTA(値1,値2,...)を使ってはいかがでしょうか。 複合式になりますが C1には=IF(COUNTA(A1,B1)>=1,1,0)を代入します。 D9(じゃなくても適当なセル)で=SUM(D1:D8)=列数が返ります。 もっとスマートな方法があればよいのですが。 A B C 1 10 15 1 2 20 1 3 10 1 4 15 1 5 10 1 6 10 10 1 7 0 8 0 9 6
お礼
回答ありがとうございます。 配列関数、というのもまだまだ私の知らない世界で・・・ ヘルプを読んで少し勉強してみました。 まだ?の部分が多いですが、この教えていただいた数式は、 わからないなりにも納得できる(?)ような気がします。 参考にさせていただきます。ありがとうございました。