• ベストアンサー

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/17068)
回答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

  • マクロを使って最終行を取得して、範囲内の空白セルに

    マクロを使って最終行を取得して、範囲内の空白セルに指定の文字列を表示させたいです。 お世話になります。 要件としてはタイトルの通りです。 Excel2013を利用しています。 A列を参照して最終行を取得し、 B列の1~最終行までの空白セルに対して「未入力」という文字列を入力したいです。 この場合、考え方はいろいろあるのでしょうが どのようにコードを組めば良いでしょうか? 自分では、まったく書けていないというのが正直なところです。 そこで御手数ですが、ご協力をお願いいたします。

  • 【エクセル】セル範囲に名前をつけたら

    エクセルについての質問です。 例えば。 (1)セルE4、G4、H4に「範囲A」という名前をつけます。 (2)セルJ4に「範囲A」の合計額を求めるために、=sum(範囲A)と入力しました。 そこで、 セルJ5には、セルE5、G5、H5の合計額が表示されるようにしたいのです。セルJ4に入力した =sum(範囲A)をそのまま下へドラッグすると、セルJ5には上行の合計額が入ってしまいます。 こういった場合はどのようにすればよいのでしょうか?

  • エクセル 空白行にSUM関数を入力するには

    下記の様な、データ行数の決まっていない各空白行に自動でSUM関数を入力するにはどうすれば良いでしょうか。        A列   B列   C列 1行     123    酒    100 2行     123    酒    100 3行(空白)            (SUM)   4行     215   ビール   200 5行     215   ビール   200 6行     215   ビール   200 7行(空白)            (SUM) 8行     324    ワイン  300 9行     324    ワイン  300 10行     324    ワイン  300 11行     324    ワイン  300 12行(空白)           (SUM) (SUM)表記のセルにそれぞれのデータのSUM関数を自動で入れたいのですが。 実際のデータは3千行ほどあります。よろしくお願いいたします。

  • EXCEL VBA 指定範囲内で特定の列に空白セルを含む行を非表示

    初めて質問します。 A列に日付、B~H列にデータが入っています。 A列の日付が本日までの範囲で(明日以降の空行はそのまま残して)、B列に空白がある行だけ非表示にしたいのですが、何かいい方法はないでしょうか? 。

  • エクセルでA列セルが空白の時その行に罫線を引くには

    エクセルでA列セルが空白の時、その行の下側のみに2重罫線を引くマクロを教えて下さい。 色々試しましたがうまくいきません。例えば下記の様な表で3行目、7行目、12行目の各下側にのみ2重罫線を引くマクロです。行数と空白行は、日々取り込んでいるデータによって変わります。知恵をお貸し下さい。(A列空白セルのC列にはSUM関数を入れております。うまく表記が出来ませんので念のため)        A列   B列   C列 1行     123    酒    100 2行     123    酒    100 3行  ========================  4行     215   ビール   200 5行     215   ビール   200 6行     215   ビール   200 7行 =========================   8行     324    ワイン  300 9行     324    ワイン  300 10行     324    ワイン  300 11行     324    ワイン  300 12行 ========================                 

  • エクセルの空白セルの選択

    こんにちは いつもお世話になっています。  エクセルの空白セルの選択について教えてください。 A列、B列にデータがあります。それぞれの列で空白セルがありますが、同じ行で両列ともに空白のセルだけを選択する方法を教えてください。  単に「ジャンプ」から空白セルを選択すると片方にデータがある行のセルも選択してしまいます。片方にデータのある行は残し、両列ともに空白の行を削除したのです。  よろしくお願いします。

  • エクセル~空白のセルのある行を非表示に。

    エクセルで。 例えば、100行の表があって、1行目から順番にデータを入れていくんですが、 データが50行までで終わってしまった場合に、51行目からを、非表示にしたいのです。 Aドライブからのデータの読み込みは、マクロをつかっているので、できればそのあとに文章をくっつけて、1つのマクロで作業を完了したいのです。 具体的に言いますと・・・ A列には1~100までの数字が入力してあります。 B~E列には取り込んだデータ(数字)をVLOOK関数で文字に変換するようになってます。 それ以降は、固定した単位(m3)や、データの数字がそのまま入る・・・という感じです。 そして、101行目はそれぞれの列の合計を出すようにしてます。 つまり、データを読み込んだあと、例えば50行しかデータが無かったら(B50やC50などが空白だったら)、51行目から100行目までをいわゆる『表示しない』にしたいのです。 だいぶ考えましたが・・・・。 よろしくお願いします。

  • エクセルで空白行を挿入するには

    一つの列に200ほどデータがあるとします。 そこで1行おきに空白行を挿入していきたいのですが手でいちいち空白行を挿入していてはらちがあきません。 関数等も含めて、なにか良い方法はないでしょうか。 例 セルA1   セルA2   セルA3 以下続く    ↓   セルA1   空白行(セル)   セルA2   空白行(セル)   セルA3   空白行(セル) 以下続く   といった具合です。

  • 入力されるまで合計セルを空白にしたいのですが

    A5:A120にデータ入力し、A121に「Sum」で合計を だしています。B列からM列も同様になっています。 列のデータは1~0の数字だけです。 当該列のセルが未入力だと当然合計欄は「0」に表示 されています。 この場合、「0」が目障りなので、いずれかのセルにデータ が入力されない限り、空白表示にしておきたいのです。 どんな関数をどう使えば良いのでしょうか?

  • エクセルで空白セルを寄せたい

    エクセル2002使用です VBAは使わずに関数だけで空白セルがあるセルを詰めて表示したいのですが・・・   A|B|C|D|E|F|G 1 あ い う え お か き 2 ○   ○ ○   ○ の表を   A|B|C|D|E|F|G 1 あ う え か  2 ○ ○ ○ ○ のように表を書き換えたいのです。 1行目には必ず文字が入力されています。 2行目には入力されているセルと空白セルが不定期に入力されています。 2行目のセルが空白ならば、1行目のセルも削除して左へ詰めて 表を転記したいのです。 よろしくお願いします。

専門家に質問してみよう