• ベストアンサー

行を削除しても関数の参照範囲がずれないようにしたい

エクセル2010を使っている者です。 関数式の参照範囲のことで伺います。 たとえば、 IF(SUMPRODUCT((A$5:A$1000=I5)*(J$5:J$1000<=K5+1))>1,"○","")) という式を組み、500行以降を削除した場合、行数に絶対参照をつけていても、 参照範囲が5行目から499行目に自動的に修正されてしまいます。 行を削除しても、範囲の参照が修正されないようにする方法はありますか? よろしくお願いいたします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 回答No.1様が回答されたもの以外の方法として、 =IF(SUMPRODUCT((A$5:INDEX(A:A,1000)=I5)*(J$5:INDEX(J:J,1000)<=K5+1))>1,"○","") とする方法もあります。  因みに、回答No.1様が仰っておられる >OFFSET関数なども利用 という方法は次の様なものです。 =IF(SUMPRODUCT((OFFSET(A$5,,,996)=I5)*(OFFSET(J$5,,,996)<=K5+1))>1,"○","")  尚、Excelbookの中にINDIRECT関数やOFFSET関数が使用されているセルが存在していた場合、Excelのウィンドウを閉じる際に、例え入力値を何も変更していなくとも、一々、「変更を保存しますか?」と尋ねて来るという現象が発生します。 【参考URL】  インストラクターのネタ帳 > Excel(エクセル)の関数・数式の使い方 > 変更してないのに保存確認メッセージが表示される   http://www.relief.jp/itnote/archives/001519.php  別にそのまま[保存]ボタンを押して保存すれば良いだけの話なので、大して問題視する様な話でもないのですが、人によっては、その事を煩わしく思うのか、これらの関数を使用する事を嫌う人も一部には居るようです。

qazxcvfr4
質問者

お礼

遅くなりましたが、ご回答ありがとうございます。 すぐに拝見したのですが、大変助かりました。 >=IF(SUMPRODUCT((A$5:INDEX(A:A,1000)=I5)*(J$5:INDEX(J:J,1000)<=K5+1))>1,"○","") こういった書き方があるのですね。 しかし、INDEX関数での範囲指定の仕方がよくわからなかったので、教えていただけると幸いです。 INDEXの書き方を調べてみると、「=INDEX(範囲,行位置,列位置 [,領域番号]」と書いてありました。 「A$5:INDEX(A:A,1000)=I5」とは、A列の5行目から1000行目までの間にI5があるかを調べていると思うのですが、なぜ「INDEX(A:A,1000)」でA列の1000行目までを意味することができるのでしょうか。「A:A」とは何を意味するのでしょうか。 よろしくお願いいたします。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

>私の最初に組んでいた質問文にある関数と同じようには動きません 具体的な各セルの内容も,計算結果がどうちがうのかの具体的な状況もナイショのままなので,あくまで一例としてですが。計算してるセルに「空っぽのセル」が混じっていると,結果が異なるかもしれません。他の原因なのかも?しれません。例えばご相談で掲示されてる数式からして,実際のエクセルと実は違ってるのかもしれません。 何が「正しい」のかは,今のエクセルの実際のデータを精査して「どうあるべきか」ご自分で判断なさって下さい。 ご相談の内容は「行削除しても参照が修正されない」ためにはで,その回答としてINDIRECTを使いますと回答しています。 検討がめんどくさいなら,今のあなたの計算方法そのまま IF(SUMPRODUCT((INDIRECT("A$5:A$1000")=I5)*(INDIRECT("J$5:J$1000")<=K5+1))>1,"○","")) としてください。 余計なことを回答して混乱させたようで,ごめんなさい。

qazxcvfr4
質問者

お礼

おっしゃるとおり空白セルがあったのでそれを削除して最初に書いていただいた式を入れたのですが、#VALUE!のエラーになってしまいます。 また、今回の回答で書いていただいたとおりに =IF(SUMPRODUCT(INDIRECT("I$5:I$1000")=I5)*(INDIRECT("J$5:J$1000")<=K5+1)*(INDIRECT("K$5:K$1000")>=J5-1))>1,"○","")) と式を入れたのですが、エラーになってしまいます。 いずれにしろ、丁寧に答えていただきありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

>ANo2さんのご回答のように「セル:INDEX関数」方式の数式も >>一々、「変更を保存しますか?」と尋ねて来るという現象が発生します。 >という点では同じなので、誤解無いようお願いします。  失礼致しました。  「尚、Excelbookの中にINDEX関数やOFFSET関数が使用されているセルが存在していた場合、Excelのウィンドウを閉じる際に、例え入力値を何も変更していなくとも、一々、『変更を保存しますか?』と尋ねて来るという現象が発生します。」 と書こうとした際に、「INDEX関数」と書くところを間違えて、「INDIRECT関数」と書いてしまっておりました。  尤も、INDIRECT関数の場合も同じ現象が発生する様です。

qazxcvfr4
質問者

お礼

ご親切にありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

ん? 一応ご参考までに ANo2さんのご回答のように「セル:INDEX関数」方式の数式も >一々、「変更を保存しますか?」と尋ねて来るという現象が発生します。 という点では同じなので、誤解無いようお願いします。 #当方、他の方の回答とかやり取りに、横から口を挟むようなマネは通常はしないんですが。

qazxcvfr4
質問者

お礼

ご親切に、ありがとうございます。 しかし、私のファイルではindex関数をすでに使っているのですが、そういったメッセージがでません。 出るときもあるということなのか、条件によっては出なくなるということなんでしょうか。 いずれにしろ、ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>行を削除しても、範囲の参照が修正されないようにする方法はありますか? #ご相談の作文は500とか1000とかだいぶごっちゃになってますが、そこは触れない事にして たとえば =IF(COUNTIFS(INDIRECT("A5:A1000"),I5,INDIRECT("J5:J1000"),"<="&(K5+1))>1,"○","") などのように、INDIRECT関数を使って出来ます。 状況に依ってはOFFSET関数なども利用できます。 もっとも、 =IF(COUNTIFS(A:A,I5,J:J,"<="&K5+1)>1,"○","") のようでは何故いけないのか、そもそも500行までとホントに範囲限定する必要があるのか(SUMPRODUCT関数じゃ確かに問題ありですけどね)検討してみるのも、一つの解決策です。

qazxcvfr4
質問者

お礼

ありがとうございます。 >=IF(COUNTIFS(INDIRECT("A5:A1000"),I5,INDIRECT("J5:J1000"),"<="&(K5+1))>1,"○","") などのように、INDIRECT関数を使って出来ます。 とのことですが、私の最初に組んでいた質問文にある関数と同じようには動きませんでした。 なぜでしょうか。。

関連するQ&A

  • Excel 参照行の削除でも可変しない関数

    Excel 参照行の削除でも可変しない関数 同じ形式で、数シートにわたり入力された文字をまとめた表を別のシート(シート1)に作成しています。 シート2以降の参照元データーは一定のルールで入力されていますが、削除や追加が頻繁に行われます。削除や追加の度にシート1B列・C列の関数が参照する行数が追随して可変しないようにしたいのですが可能でしょうか。 具体的には、シート2において6行目から9行目を削除した際に、シート1では「B2=みかん」/「C2=イチゴ」と繰り上がり、B行・C行は常に指定した行を参照するようにしたいと思っています。 <シート1>  A B     C 1 タイトル りんご  ばなな (← 3行目) 2 タイトル かき   なし   (← 8行目) 3 タイトル みかん イチゴ (←13行目) ・B列:「=IF(ISERROR('Sheet2'!$B3:$B3),"",'Sheet2'!$B3:$B3)」 ・C列:「=IF(ISERROR('Sheet2'!$D3:$D3),"",'Sheet2'!$D3:$D3)」 <シート2、3…> 参照したいセルは、B列とD列の3行目、8行目、13行目…と一定の間隔で入力されており、全てのシートにおいて同じ箇所に入力されています。 シートごとにカテゴリーの個数は(図A1:E4までを1カテゴリーと考えています)異なり、作業の度にカテゴリーの追加や削除が頻繁にあります。 うまく説明できているか不安ですが、良い方法を教えてください。

  • エクセル IF関数 条件を満たす行に印をつける

    A1:J30までにランダムな数値が入力されている表があります。M1:N4には検索値を入力できる箇所があり、条件に該当する行があればK列に○を付ける、ということがしたいです。その条件は、 (1)M1かN1に該当する (2)M2かN2に該当する (3)M3かN3かM4かN4に該当する この3条件のすべてを満たす行があればK列に○です。 いろいろ調べて、IF関数とsumproductを組み合わせてやってみたのですが、正しい結果にならずお手上げ状態です。(ちなみにこれ↓長すぎなのもネック。。。) =IF(AND(SUMPRODUCT((A1:J1=$M$1)+(A1:J1=$N$1))>=0,SUMPRODUCT((A1:J1=$M$2)+(A1:J1=$N$2))>=0,SUMPRODUCT((A1:J1=$M$3)+(A1:J1=$N$3)+(A1:J1=$M$4)+(A1:J1=$N$4)>=0)),"○","") IF関数でなくてもできれば何でも良いので、教えてください。 よろしくお願いいたします。

  • Excel関数について,参照データの範囲が変わる時

    Excelの関数について教えてください。 まずExcelで、”Sheet1とSheet2があり、Sheet2には、Sheet1のデータをもとに情報が入力されるように関数{IF(Sheet1!A1="","",Sheet1!A1)}を200行目まで入力されている”ものがあるとします。 それを使って以下のような作業を行います。 1. 職場のシステムからExcelデータを抽出する 2. 抽出したデータをエクセル(sheet1)に貼り付ける。 3. Sheet2にSheet1をもとにした計算結果が表示される 以上が現在、行っている作業です。 ただ問題があり、毎回、sheet1に貼り付けるデータの範囲(行数)が異なるため、sheet2のどこまでに数式を設定しておけばいいのかわかりません。今は適当に200行目まで数式を入力してあります。 『質問』Sheet1に貼り付けるデータの範囲(行数)と同じ範囲(行数)分だけ、Sheet2にも数式が表示されるようにしたい。(例)sheet1に2345行あるデータが貼り付けられた→それをもとに、Sheet2に関数を2345行目まで、自動で入力する。 大変お手数ですが、分かる方教えて頂けますか?よろしくお願いします。

  • エクセル 参照範囲の固定方法について

    エクセル 参照範囲の固定方法について エクセルで、SUMIF関数を使用して、ある範囲のセルを参照しています。 参照先のセルを行ごと削除しても関数の参照範囲を変化させたくないのですが、 実際には、削除した列の分だけ参照範囲少なくなってしまいます。 列を削除しても、参照範囲を固定する方法はないでしょうか? どうか宜しくお願いします。 例)(1)参照先:A1:A100   (2)A1~A30を削除   (3)(問題)関数の参照範囲がA1:A70となってしまう。⇒(希望)A1:A100のままにしたい。

  • 1行置き数値の合計値を求めるエクセル関数の意味を教えてください。

    1行置き数値の合計値を求めるエクセル関数の意味を教えてください。 J97=SUMPRODUCT(J3:J96,ROW(J3:J96)-ODD(ROW(J3:J96))+1) J98=SUMPRODUCT(J3:J96,ROW(J3:J96)-EVEN(ROW(J3:J96))+1) データ範囲J3:J96の数値を1行おきに求める 前任者(すでに退職)から引き継いだエクセル表に入力されていた関数です。 1行おきの数値を合計する式で正しい答えも出ているのですが、 導き出し方がどうしてもわかりません。分解して考えても、つなげると…?? 以前、1行置きの合計を求める質問をした際には、あがってこなかった式です。 初心者のため、少し詳しく教えていただきたく、よろしくお願いします。

  • エクセルで行を挿入すると式が・・・

    シートを2枚使っています。 シート2にIF関数を使用して、 @IF(Sheet1:A1=”A”,”OK”,””)という式を入力しています。 ここで、シート1の1行目を挿入すると、 式も自動的にA2に変更されてしまいます。 行を挿入しても必ず1行目のA1を参照してほしいのですが、どうすればよいのでしょうか? 新しく入力するときは、行を挿入してシート1のA1に入力します。 絶対セルや範囲名を設定してもうまくいきませんでした・・・。 よろしくお願いします。

  • 参照データの量が毎回決まっていない計算式について

    関数に不慣れなためお伺いできればと存じます。 したいことは以下の通りです。 (1)収支(2)勝率(3)損益比率を出したいと思っています。 その際、参照のために呼び込むデータの行数は毎回決まっていないため、 最終行を指定せずに計算できる式を探しています。 ※参照データを呼び込んだら、予め仕込んである関数によってそのときの最終行までの計算を行ってくれる式 ひとまず、添付画像にあるように 【I列】回収額をもとに(1)収支を出す計算 【J列】収支をもとに(2)勝率を出す計算 【J列】収支をもとに(3)損益比率を出す計算 の関数を作ってみたのですが、(参照する回収額の行数が毎回、決まっていないため) 収支、勝率、損益比率の式をその都度、変化する最終行までのデータをもとに計算を行うようにするにはどのように関数を変えればよいでしょうか。 なお、勝率については収支が0のときは勝ちに含めないため">1"としています。 それぞれ、式が成り立たないためとりあえずの範囲(3行目とか8行目とか)を入力しています。 【I列】 回収 【J列】 収支=I3-H3 【K列】勝率=COUNTIF(J$3:J3,">1")/COUNTA(J$3:J3)*100 ※0は勝ちに含めません 【L列】損益比率 =AVERAGEIF(J$3:J8,">0")/-AVERAGEIF(J$3:J8,"<0") ご査収いただけますと幸いです。

  • SUMPRODUCT関数 行が増えても自動で

    SUMPRODUCT関数 行が増えても自動で最終行を取得するには? エクセル2003です。 名前   サイズ みかん   S みかん   M りんご   S このような表があったら、 =SUMPRODUCT((A1:A4="みかん")*(B1:B4="S")) で、複数条件の個数が取得できますが、 行がどんどん増えていったときに、手動で A4・B4の部分を変更していくしかないのですか? それとも大体の行を見越して、 =SUMPRODUCT((A1:A100="みかん")*(B1:B100="S")) のようにするべきなのでしょうか? =SUMPRODUCT((A:A="みかん")*(B:B="S")) にしたらエラーになりました。 自動で最終行を取得したいのですが、できますか?

  • エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてくだ

    エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてください。 sheet1を印刷用ページ、sheet2をデータ用ページとしています。 sheet2は頻繁に追加や削除をするのですが、単純な =sheet1!A1 ですと、 sheet2に追加してもsheet1に追加されたデータが反映されない。 sheet2の行を1つでも削除するとsheet1のその行は#REF!というエラーに。 という状態です。下記内容に対応できる関数はあるでしょうか。 sheet2がこのような時 行  A あ B い C う D え sheet2Dに「お」を挿入すると sheet1がこのようになるように。 行  A あ B い C う D お E え また、B行を削除したらsheet1が 行  A あ B う C え となるように。 そして、可能ならばコピーのドラッグで複製できるようにしたいのですが・・・ 条件が色々ありますが、よろしくお願いします。

  • VLOOKUP関数:別シートにある参照範囲が変動する場合

    スポーツクラブで学童会員の名簿を作成しています。 【目的】 VLOOKUP関数を利用して、シート1「名簿」のA列に会員番号を 手入力すると B列に学年、C列に氏名が各々自動入力されるようにしたい。 【設定】 ・シート1を「名簿」とし、  A列を会員番号、B列を学年、C列とD列を結合して氏名としました。 ・シート2を「参照データ」とし、  A列を会員番号、B列を学年、C列とD列(結合を解除)を氏名と  しました。 ・シート2の1行目はタイトル行とし、データが入力されているのは  2行目からです。 ・別シートのデータを参照するため、シート2のデータが入力されて  いる範囲に「参照範囲1」という範囲名をつけました。 【状況】 現在設定している数式は B2=VLOOKUP(A2,参照範囲1,2,FALSE) なのですが、以下の場合は「参照範囲1」で設定した範囲とは 異なる範囲のデータを参照しなければなりません。 ・入会者がいる場合:データを追加するため、行が増える ・退会者がいる場合:データを削除しブランクを解消するため、  行が減る 【質問】 上記状況の場合、VLOOKUP関数に加えてどのような関数を使用すれば 別シートにある参照範囲の変動に対応できるのでしょうか? 会員が増減するたびに、新たに参照範囲を設定し範囲名をつけ直す という作業は避けたいのですが・・・ ご教示いただけますよう、何卒宜しくお願い申し上げます。

専門家に質問してみよう