• ベストアンサー

Excelで、セル範囲(自分の1行下:空白セルの上)、を求めることできますか?

Excelで、セル範囲(自分の1行下:空白セルの上)、を求めることできますか? A列 ────── 2004年   3 ← =sum(A2:A3) 2004/11  1 2004/12  2        ← 空行 2005年  5 ← =sum(A6:A8) 2005/1  3 2005/2  2 2005/3  0        ← 空行 sum()の引数(合計範囲)を求めることできますか? 手作業で"A6:A8"等入力していかないとできないのでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 #3 のWendy02 です。お目に止まり、どうもありがとうございます。 今、どうして出来ないのか分りません。 最初の質問で、私は読み違えましたが、 ---------------------- A列 ────── 2004年   3 ← =sum(A2:A3) → SUM(B2:B3) 2004/11  1 2004/12  2        ← 空行 2005年  5 ← =sum(A6:A8)  → SUM(B6:B8) 2005/1  3 2005/2  2 2005/3  0        ← 空行 ---------------------- ということにしていましたが、それは正しいのですか? 2004年の右隣の合計を出すセル「3」がB1 の式だとします。 B1: =SUM(OFFSET(A1,1,1,MATCH(TRUE,INDEX(A1:A10="",,),0)-2)) SUM(OFFSET(A1,...             ↑       起点になるセル    次の  1 は、2行目、   その次の 1 は、2列目   つまり、B2 を指しています。 ここで、   MATCH(TRUE, は、TRUE の行を探すということです。   INDEX(A1:A10="",,) というのは、="" つまり、空白かどうかということです。     もし、ここで、="" でないとしたら、この式は成立しません。   マスウで、INDEX(A1:A10="",,) の範囲を取って、F9 を押すと、その内訳が分ります。 ●ここがポイント   空行は、どんなのが入っているか、数字でないとか、文字でないとか、いくつかの条件から引っ張りだしてこなくてはなりません。全角空白が入っている場合は、 INDEX(A1:A10=" ",,)         ↑      全角空白が入っていますが、なるべく、空行は何も入れないようにするほうがよいです。   A1:A10="" こういう書き方を、「配列数式」といいます。   A1:FALSE, A2:FALSE, A3:FALSE, A4:TRUE ... と続きますが、そのままではエラーになります。それで、INDEX を使うことによって、MATCH で読み取れる引数に変換しているわけです。 ※まとめ  要点は、最初の修正部分だけを気をつければよいです。 =SUM(OFFSET(A1,1,1,MATCH(TRUE,INDEX(A1:A10="",,),0)-2))  左隣の起点が、A1 だったら、A1。A2だったら、A2 です。  1,1 は、一つ下がって、一つ右に行くということです。  A1:A10 は、最初の部分が、文字か数字がある起点になる場所で、そこから最大範囲を作ってあげます。  検索値は、空白行(空なら、="" となります)  -2 というのは、  MATCHで、範囲が空白行までカウントしてしまっているので、まず、それが、-1  それと、SUMで出す行の部分をカウントしてしまっていますから、それも、-1  あわせて、「-2」となります。 全てのバージョンで調べていませんので、今のところ、Excel2003 などでは分りません。もしも、うまくいかないようでしたら、 =SUM(OFFSET(A1,1,1,MATCH(TRUE,A1:A10="",0)-2)) と入力して、数式として、一旦式を入力したら、F2を押して、『ShiftとCtrlを押しながらEnterキー』を押して、再確定すれば、同様の結果になるはずです。

morishita
質問者

お礼

Wendy02さんありがとうございます!完璧あっさり成功しました!! ×=sum(A2:A3) ○→ SUM(B2:B3) ×=sum(A6:A8) ○→ SUM(B6:B8) そのとおりです。皆さん申し訳ありませんでした。 テストエラーの原因 申し訳ありません。完全に私のアホ過ぎミスです。 sumセルの左隣(A1等)を空セルのまま実行してました。 その結果、INDEX(A1:A10="",,)が最初でTrueを返す→offset(A1,1,1,1-2) となってしまっていました。 >F9 を押すと、その内訳が分ります。 これでミスを発見できました。素晴らしい方法ありがとうございます! 2時間近く格闘してました(TT) 大変丁寧な解説ありがとうございます。 ヘルプやどんな他のページよりも良く理解できました。 大変感謝しております。本当にありがとうございました! &すみませんでした。

その他の回答 (4)

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

この質問には、関数式で実現するには、関数式の、「原理的な面から根拠付けて」無理があると言えます。 という理由は、関数式を入れる場所(合計を入れる場所)は、関数が探して そこへ、関数式を埋め込まないといけないのですが、それはできません。関数式は、(A)人間がセル場所を決めて入れるか、(B)複写で規則的に、連続的に!入れるしかありません。 (B)はデータ部に連続した行に複写した式を入れると、データが壊れます。 飛び飛びのセルに式を複写することは、手作業以外ではできません。 一方VBAの場合は条件に合ったセルに、好きな関数式を設定できます。 これは#2、#3のご回答のようなのと、矛盾するものではありません。 別列などを使えば、答えだけは求められます。そこから、B列第4行に、正しい値は入れられても、式の=SUM(A2:A3)のようなのはは入れられないでしょう。

morishita
質問者

お礼

皆さんありがとうございます! 非常に難しくて、理解に時間が掛かっております。 以上、中間報告

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 この式なら、空白行の手前までの範囲を求めます。 B1: =SUM(OFFSET(A1,1,1,MATCH(TRUE,INDEX(A1:A10="",,),0)-2)) ただし、 INDEX(A1:A10="",,)    ↑    ここは、計算行の必要最大行です。 だから、最大行が100行あるのでしたら、A1:A100="" となります。 =SUM(OFFSET(A1,1,1,MATCH(TRUE,INDEX(A1:A100="",,),0)-2)) 注:絶対参照式ではなく、相対参照式です。 ですから、B5: に貼り付ける場合は、以下のようになります。単にコピー&ペーストするだけですから、変更する必要はありませんが、下のセルに向かって検索します。 =SUM(OFFSET(A5,1,1,MATCH(TRUE,INDEX(A5:A14="",,),0)-2))

morishita
質問者

お礼

できればWendy02さんの方法でいきたいのですが、成功しません。 教えていただいた式を貼り付けると、B2セル1行だけの合計となります。 色々変えて試しましたが、どうしても成功しません。 offset関数の高さー2というのを変更すると、エラーになります。(-2の場合しか、sum結果が出ません。-2の場合はB2セル1行だけがsum計算対象となります。=sum(offset(a1,1,1,1-2)) と同等) index関数の結果が「空白行の手前までの範囲」を表していないのではないでしょうか? ヘルプ等を見たのですが、 (A1:A100=””,,)の A100=”” という書き方が載ってなくて、修正できずにいます。 どなたか、補足いただければ幸いです。

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.2

B列に「合計したいデータ」が入っているとします。C列に補助的な列を設けます。 (C列が邪魔なら、別の列でもいいし、別のシートでも可能です。ただし、以下の式は変わります) C1に、=IF(ISBLANK(B2),0,C2+1) これを、C2から下へ必要なだけ(データの行数+1まで)コピーします。この式は、空白セルから上にあるセルの数を数えます。 次に、B列の合計を入れたいところ(たとえばB1)にOFFSET関数を使って範囲を書きます。 B1に、=SUM(OFFSET(B1,1,0,C1,1)) この式は、B1の1つ下から、C1に示される行数の範囲の合計を求めるものです。 あとは、この式を、B列の必要箇所にコピーするだけです。

morishita
質問者

お礼

ありがとうございます。この方法でもできそうです。

回答No.1

質問の意味がよく理解できていないのですが、オートSUM機能を使えばいいのではないですか? メニューバーの「Σ」マークにカーソルを合わせると「オートSUM」と出てくるところがあります。  セルを指定する →オートSUMをクリック →合計したいセル範囲をドラッグ →ENTER  でいいのでは? ちょうど、質問したばかりで目に留まったので。 誤解してたら、ごめんなさい。

morishita
質問者

補足

すみません。手作業ではなくて、計算式が無いのかなと思っております。 行数はそれぞれ変化するので、いちいち手作業しなければできないのかな?と 2,3個だったらいいのですが

関連するQ&A

専門家に質問してみよう