【最大10000ポイント】当たる!!質問投稿キャンペーン!

エクセル初心者です。
よろしくお願いいたします。
エクセルでこのような表を作っています。

  A  B  C
1 10 15
2 20
3    10
4    15
5 10
6 10 10



この時、データの入っている行数をカウントしたいのです。
上の例では 「6」 です。
途中に空白の行はありません。
A列、B列にはどちらにも数字が入る場合と、どちらかにしか
入らない場合があります。
なので COUNT は使えないですよね?

今まではデータを入力後、下の空白の行を削除し、C列で COUNTBLANK
として求めていたのですが、表の長さ(行数)が一定でないため、
体裁が悪くなってしまっていました。

希望としては。

最終行のC列に「終了」などと入れると、その文字列を判別
してくれて、それより上の行数をカウントしてくれる。

または

例えば OR を使って、A列B列どちらかにデータがある
場合のみ、カウントしてくれる。

こんなワガママなことができたら、と思っております。

補足が必要ならばいたします。
それと、遅くなるかもしれませんが、お礼は必ずさせていただきます。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

こういう関数もあり?



=sum(if((a1:a50<>"")+(b1:b50<>""),1,""))

と入力して、ShiftとCtrlを押しながら、Enterを押す。
このような関数を配列関数 と いいます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
配列関数、というのもまだまだ私の知らない世界で・・・
ヘルプを読んで少し勉強してみました。
まだ?の部分が多いですが、この教えていただいた数式は、
わからないなりにも納得できる(?)ような気がします。

参考にさせていただきます。ありがとうございました。

お礼日時:2007/11/09 19:37

こんばんは。


#5の回答者です。

>教えていただいた数式は私には複雑すぎて・・・
>初めて見る関数ばかりでした・・・
>コピペしてみたところ、行数は正しく示してくれましたが。
>おいおい勉強して行きたいと思います。

私が、掲示板に書き出した数年前には、#5の書き方はなかったです。こういうのは、日進月歩で進化しているのです。世界中の人が、掲示板の中で書いていて、一人の人の思いつきが世界中に広まるわけですね。私の書き方は、Excel Ver.4 の書き方からヒントを得たもので、自分が最初に使ったとは思ってはいても、いつの間にか広まって、本当に、自分は最初だったのか分からなくなっているものがありますね。

VBAやマクロで覚えて、再び、ワークシート関数に戻ってくると、また、違った姿に見えてきます。数式は、おぼろげながらイメージは、最初にはあっても、いじっているうちに出来上がるものであって、組み立てていくものではないようです。それが、マクロなどと比較する難しいものなのです。
    • good
    • 0
この回答へのお礼

たびたびの回答ありがとうございます。

私にはこのようなサイトを除けば、エクセルに関して周りに質問できる人も、
教えてくれる人もおらず、独学、といえば聞こえはいいですが、
本当に我流で今現在もやっております。

思えば自営業をやっている主人の、経理の手助けになれば、と
Windowsのエクセルを初めて起動してみたのがきっかけでした。
そんな私が初めて作ったワークシートは、なんとSUM関数もなく(知らず)、
+や-をズラズラとつなげただけの、なんともお粗末なものでした(笑)

それでも、エクセルに興味を持ったのは間違いなく、徐々に
それこそカメの歩みのごとく、関数もひとつまたひとつと覚えて
いっています。

教えていただいた数式が、理解できる日が来るよう、これからも
マイペースでやっていきたいと思います。
また、こちらでお世話になることがあると思いますが、
どうぞよろしくお願いいたします。

お礼日時:2007/11/17 07:26

例データA1:B6


A列   B列
1015
20
ー10
ー   15
10
1010
ーー
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」ということで、わかるのですが。

申し訳ありません、配列数式については、こちらで回答を
いただくまでまるで知らなかったので、にわか勉強では
とても理解できず、どこが間違っているのかも自分では
わかりません。

補足日時:2007/11/10 07:21
    • good
    • 0

こんばんは。



>最終行の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側の変更はしないでください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>C列の「終了」の後の数字の行はカウントしません。
>これは、A~C列には置けません。(循環参照エラーが発生します)

はい、この循環参照についてはわかります。
ですが、教えていただいた数式は私には複雑すぎて・・・
初めて見る関数ばかりでした・・・
コピペしてみたところ、行数は正しく示してくれましたが。
おいおい勉強して行きたいと思います。
複雑な数式を教えていただき、ありがとうございました

お礼日時:2007/11/09 19:35

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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
「なるほど」と思ってしまいました。
「累計」ですね、考えてもみませんでした。
教えていただいた方法で、C列を非表示にして、任意のセルで
「C列の最大値」を返すようにすれば、私のしたいことが
できると思います。
参考にさせていただきます。ありがとうございました。

お礼日時:2007/11/09 07:33

=MAX(MATCH(10^10,A:A),MATCH(10^10,B:B))



で、A列またはB列の中で数値が入っている最終行を返します(10^10以上の数値は入っていないものとします)。

=MATCH("終了",A:A,0)

で、A列の中で「終了」と入力されている行を返します。

詳しくはヘルプを参照してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

恥ずかしながら MATCH についてまだ何も知らなかった私なので、
ちょっとだけですが、ヘルプを見て勉強してみました。

C列最終行にはできれば「終了」をいれたく、
そして行数を返したいセルは、任意の位置にしたいので、
そこに

=MATCH("終了",A:A,0)

というのがシンプルで私にもわかりやすいようです。
参考にさせていただきます。ありがとうございました。

お礼日時:2007/11/09 07:31

すみません#1です、訂正です。



誤:D9(じゃなくても適当なセル)で=SUM(D1:D8)=列数が返ります。
正:C9(じゃなくても適当なセル)で=SUM(C1:C8)=列数が返ります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>C欄に空白以外のセルの個数を数える
COUNTA(値1,値2,...)を使ってはいかがでしょうか。

私が最初に思いついたのがこの方法でした。
ですが、エラーが出たりして数式がうまく作れず、苦心しておりました。

>=IF(COUNTA(A1,B1)>=1,1,0)
>=SUM(C1:C8)

で、C列を表示しないようにすればすっきりしますね。
私のしたいことがばっちりできました。
参考にさせていただきます。ありがとうございました。

お礼日時:2007/11/09 07:28

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
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル マウスで選択した範囲の行数をカウントする方法

マウスで選択した範囲の行数をカウントする方法を教えてください。

関数とかを使わずに、マウス(の右ボタンか左ボタンかは忘れました)で選択した範囲、
例えば、A10~A20をかこうとします。この範囲の行数は11行になりますよね。
この11という数字ですが、範囲選択している時に、エクセルの中で目で見れる方法があったと思います。
他の人がやっていたのを見ていたのですが忘れてしまいました。
何かエクセルの表示メニューの操作とかが必要でしょうか。

教えてください。お願いします。

Aベストアンサー

>他の人がやっていたのを見ていたのですが
もしかしてこんな事

一番下のステータスバーがありますが・・・
(コマンドと表示されていると思います)

ステータスバーで 右クリック データの個数を選択
これでステータスバーの真ん中にデータ数が表示されます


ステータスバーが表示されていない場合は
表示 ステータスバー にチェック

但し、行数又は列数ではなく 選択された範囲にあるデータ数です
違いましたら失礼

QエクセルのCOUNTIFが正しくカウントされない原因について

この度はよろしくお願いします
エクセルのCOUNTIFで、例えば列Aに0~9までの数がランダムに入っているとします。それをカウントすると0~4まではきちんとカウントするのですが、5~9までのカウント数が0になってしまいます。実際には5~9までの数も含まれているのですが、このようになってしまう原因は何でしょうか?
よろしくお願いします。

Aベストアンサー

同じ半角の5に見えていても、数値扱いと文字扱いになっている場合があります
COUNTIFを使う前に、VALUEで数値に統一してみて下さい

Qエクセル・・色の着いたセルの個数を数える関数はある?

エクセルの表内で塗りつぶしされているセルだけを数える様な関数はありますか?
セルには文字や数値は入力されておらず、塗りつぶしているだけです。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもしれませんね。

なお、以下は、引数のインデックスに0を入れると、配列出力するようにしてあります。

'------------------------------------
Function ColorCellCount(範囲 As Range, Optional インデックス As Integer = 1, Optional パターン As Integer = 0)
  Dim myRng As Range
  Dim myIndex As Integer
  Dim myPattern As Integer
  Dim myColor() As Integer
  Dim Ret() As Double
  Dim c As Range
  Dim i As Long
  Dim j As Long
  Set myRng = 範囲
  myIndex = インデックス
  myPattern = パターン
For Each c In myRng
   On Error Resume Next
   If myPattern = 0 Then
     i = WorksheetFunction.Match(c.Interior.ColorIndex, myColor, 0)
   Else
     i = WorksheetFunction.Match(c.Font.ColorIndex, myColor, 0)
   End If
   If i = 0 Then
     ReDim Preserve myColor(j)
     ReDim Preserve Ret(j)
      If myPattern = 0 Then
       myColor(j) = c.Interior.ColorIndex
      Else
       myColor(j) = c.Font.ColorIndex
      End If
      Ret(j) = 1
     j = j + 1
     On Error GoTo 0
     Else
      Ret(i - 1) = Ret(i - 1) + 1
   End If
  Next
  If myIndex <= 0 Then
   ColorCellCount = Ret()
  ElseIf myIndex > UBound(Ret) + 1 Then
   ColorCellCount = Ret(UBound(Ret()))
   Else
   ColorCellCount = Ret(myIndex - 1)
  End If
  Set myRng = Nothing
End Function

ワークシート上での使い方は、

A列
色付き
色なし
色なし
色付き
色付き

=ColorCellCount(A1:A5, 1 )

とすれば、上から数えて、1番目の色のセルの数が出ます。

=ColorCellCount(A1:A5, 2 )
を入れれば、色なしのセルの数が出ます。

=SUMPRODUCT(ColorCellCount(A1:A5, 0 ))

とすれば、全部の合計が出ます。

なお、
=ColorCellCount(A1:A5,1,1)

とすれば、文字の色を数えます。

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもし...続きを読む

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QWordで、1ページを丸ごと削除するには?

1ページしか必要ないのに、真っ白な2ページ目がその下に表示されてしまった場合、この余分な2ページ目を一括削除(消去)する為に、何かいい方法があるでしょうか?

Aベストアンサー

<表示されてしまった場合>
これはそれなりに理由があるわけで、改ページや改行によって、次のページにまで入力が及んでいる時にそうなります。
特に罫線で表を作成し、ページの下一杯まで罫線を引いたときなどには、よくなる現象です。

さて、メニューの「表示」で段落記号にチェックが入っていないと、改行や改ページなどの入力情報が見えず、白紙のページを全て選択→削除してもそのままということが良くあります。
1 改行マークが白紙のページの先頭に入っていれば、それをBackSpaceで消してやる。
2 罫線を使っている場合は、それでも効果がない場合がありますが、その時は行数を増やしてやる。
などの方法があります。

Qエクセルで特定の行を削除したいのですが。

エクセルで特定の行を一発で削除したいのですが、やり方がわかりません。
どなたか詳しい方お教えいただけませんでしょうか?

やりたいことは、B列に、特定の文字が有れば、その行全部を削除して上方向にシフトしていきたいのですが、マクロとかを使うのでしょうか?
宜しくお願いいたします。

Aベストアンサー

マクロを使う別の方法です。
XXXの部分を特定の文字に置きかえて実行してください。
また、「特定の文字があれば」というのが、その文字列を含む、というのでなくセルの値がその文字列ならば、というのであれば、LookAt:=xlPart の部分を LookAt:=xlWhole に書き換えてください。

Sub DelLines()
  Dim R As Range
  Do
    Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)
    If R Is Nothing Then Exit Sub
    R.EntireRow.Delete
  Loop
End Sub

Q「以降」ってその日も含めますか

10以上だったら10も含める。10未満だったら10は含めない。では10以降は10を含めるのでしょうか?含めないのでしょうか?例えば10日以降にお越しくださいという文があるとします。これは10日も含めるのか、もしくは11日目からのどちらをさしているんでしょうか?自分は10日も含めると思い、今までずっとそのような意味で使ってきましたが実際はどうなんでしょうか?辞書を引いてものってないので疑問に思ってしまいました。

Aベストアンサー

「以」がつけば、以上でも以降でもその時も含みます。

しかし!間違えている人もいるので、きちんと確認したほうがいいです。これって小学校の時に習い以後の教育で多々使われているんすが、小学校以後の勉強をちゃんとしていない人がそのまま勘違いしている場合があります。あ、今の「以後」も当然小学校の時のことも含まれています。

私もにた様な経験があります。美容師さんに「木曜以降でしたらいつでも」といわれたので、じゃあ木曜に。といったら「だから、木曜以降って!聞いてました?木曜は駄目なんですよぉ(怒)。と言われたことがあります。しつこく言いますが、念のため、確認したほうがいいですよ。

「以上以下」と「以外」の説明について他の方が質問していたので、ご覧ください。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=643134

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


人気Q&Aランキング