エクセル計算での#REFエラーの解決方法とは?

このQ&Aのポイント
  • エクセル計算で#REFエラーが発生する原因は、数式の範囲を超えたデータを切り取る際に生じることがあります。
  • このエラーを回避するためには、切り取る範囲に数式が含まれている場合は、数式のコピー&貼り付けを行う必要があります。
  • 数式のオートフィルではなく、コピー&貼り付けを行うことで、正常にデータを切り取ることができます。
回答を見る
  • ベストアンサー

エクセル計算について

エクセル計算について A(施設種別)B(売上)C(コード) 施設種別 売上 施設種別コード 売店 2000 1 遊園地 3000 2 映画館 4000 3 エクセル2007で上記のような表を作りました。 C列欄には以下のような数式が入っています。 =IF(A2="売店",1,IF(A2="遊園地",2,IF(A2="映画館",3,))) A列欄の施設名を検索して、C列欄にコードがあらわれるようにしたのです。 そして、数式をC列欄のずいぶん下までオートフィルしました。 ところが、うまくできているかどうか確認したくて、売店から4000までのデータを A列の7行目くらいに「切り取り」して貼り付けると、#REFエラーがでました。 そして、数式にも以下のようなエラーが出ました。 =IF(#REF!="売店",1,IF(#REF!="遊園地",2,IF(#REF!="映画館",3,))) コピーだとうまくいっているので、なぜ切り取りだとうまくいかないのでしょうか。 初心者ですいません、お願いします。

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

  • ベストアンサー
回答No.2

オートフィルは、コピー元の上下の状態、データの状態を見て、勝手に中身を改編しながらコピーしてくれる機能。 切り取り>貼り付けは、そういう勝手に改編しながらのコピーはしてくれない機能。 機能の違いです。 切り取り>貼り付け(または、コピー>貼り付け)を使うならば、貼り付けた後で式をそのセルに合うように変更する必要があります。 このような場合、VLOOKUP関数などを使って、別表からデータを引用する形式にしておくのが一番間違いがなく、管理も簡単なんですが…。 例えば、こんな感じ。 E列 1行目 施設種別 2行目 映画館 3行目 遊園地 4行目 映画館 F列 1行目 コード 2行目 1 3行目 2 4行目 3 C列 2行目 =VLOOKUP(A2,$E$1:$F$4,2,TRUE) C列2行目に入れた式をオートフィルで下へコピーすればOK。 逆に、コードを入れれば施設種別が日本語で表示させることも可能です。 上記表の例だと、施設種別が100件だろうが何だろうが、自動的にコード番号を持ってきてくれるようになります。 IFのネスト(入れ子)だと限界がある処理ですし、何よりも一か所変わっただけでIF関数を全部見直す必要があるので、IFは使わないというのがこういう処理の方法のコツです。

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

例えばA2に売店となっているときにお示しの式がC2セルに入力されていればC2セルには1と表示されていますね。C列ではC2セルの式を下方にオートフィルドラッグしている状態にしておきます。 そこでC2セルと参照元との関係をみるためにC2セルを選択してから「数式」タブから「参照元のトレース」をクリックします。A2セルからC2セルに向かって矢印が表示されています。 次にA2セルを選択して「切り取り」を行い、例えばA5セルに貼り付けを行います。するとC5セルにはエラーが表示されますね。しかし、C2セルの値は1のままで変わりません。C2セルを選んで「参照先のトレース」を選択してください。コピーして貼り付けた先のA5セルからC2セルに向かって矢印が表示されます。 そのために切り取って貼り付けた後でもC2セルの値は1のままになっているのです。従来のA5セルは無くなってその場所にはA2セルが貼りつけられたと同じ状態になっているのです。 A2セルからB2セルを切り取って他の行でも正常な表示になるようにするためには次の式をC2セルに入力して下方にオートフィルドラッグすればよいでしょう。 =IF(INDEX(A:A,ROW(C2))="売店",1,IF(INDEX(A:A,ROW(C2))="遊園地",2,IF(INDEX(A:A,ROW(C2))="映画館",3,))) このような式では参照先のトレースを見ればわかるようにA2,B2セルなどは参照元はなっておらず切り取りや貼り付けに影響されない式となっているからです。 それにしてもなかなか気のつかないことをよくご質問くださいました。お陰さまで、こちらも勉強になりました。

aidorumary
質問者

お礼

ありがとうございました。 勉強中なのですが、がんばります。

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

質問を読んで感じるのが、IF分をネストして、名称からコードを割り出している点 VLOOKUP関数ぐらいエクセル関数の常識です。それをGoogleででも(VLOOKUP関数で)照会して、勉強し役立てること。 http://www.yoshikawa.co.jp/ybs/skilup/ybs0308.htm ほか腐るほどたくさんある。 ーー エクセルの式の複写(セルの貼り付け)の仕組みを勉強のこと。 エクセル関数理解の基礎の基礎。 エクセル関数は、 在るセルに式を入れると計算などしてくれること。 他(近接)セルには、改めて式を打ち込まなくても、オートフィルや貼り付け、Ctrl+ENTERで、引数セルを、決ったルールで変化させて、入れてくれること。 の2点が決定的に便利な点である。 ーー 後者の「決ったルール」を勉強すること。 近接セルとは、より下の行、より右の列で、上方向や、左方向に式を複写は要注意。 この質問の場合C列でA列(C列からして2列前)のデータを参照している式を、A列に貼り付けて持っていくと、A列の2列前に式を直そうと駿河、そんなものは構造上存在しないので、REFエラーにせざるを得ないわけ。(絶対番地に指定して無い場合)。 Googleで「エクセル 式の複写 番地の変化」などで照会し勉強すること。 別件だが http://www7.ocn.ne.jp/~nsuido/exce.htm コピーした計算式がうまく動作しない も参照。

  • P5Q
  • ベストアンサー率40% (86/210)
回答No.1

C列に入っている式で、指定されているセルが A2 なのに A列に張りつけると、3列分左を指定することになります。 なので、A2のA列より左の列が無いため #REF! のエラーになります。 式が正しく、エラーにしないためには、  =IF($A2="売店",1,IF($A2="遊園地",2,IF($A2="映画館",3,)))  A2の前に $ を付けつると良いです。

関連するQ&A

  • エクセルIF関数

    A列に鉄板と和食の種別 B 売上 A1が鉄板だった時、B1の売上を C1に表示する このような条件の場合、IF関数を使うのでしょうか? IF関数をネットで検索しましてもちょっとこのような数式は当てはまらないのかな と思っております。 もしどのような関数を使えばいいのか教えて下るかたがいらっしゃいましたら よろしくお願いします。 レストランの売上をエクセルでおこないたいと考えておるものです。

  • Excel97で、If文をなんとかしたい

    IF文でなんとかなりそうなんですが、IF文を使った事がなくて。 A列   B列   C列    任意の位置のセルD 数式  文字列   数式  文字列 数式  文字列 数式  文字列 こんな表で、Bの文字列の値と、Dのセルの値が一致した時、Aの数式の値(数字)をCの列に表示させ、BとDの文字が一致しない時は、”エラー”を表示させたいんですが、どういう風にすればいいのでしょうか? IF文を使えばいいのでしょうか? どういう風に、数式を立てればいいのかわかりません。 どなたか詳しい方、教えていただけませんか?

  • エクセルの計算

    質問させていただきます。 Aの列に飛び飛びでランダムの日付があり、Bの列に曜日が縦に並んでいます。 A列の日付を入力したら曜日が自動で出るようにB列に以下を入れました。 =IF(A1<>"",MID("日月火水木金土",WEEKDAY(A1),1),"") このとき、土曜は青、日曜は赤と条件をつけました。 そしてC列に人数、D列に合計金額の欄があり、人数×単価をDに入れました。 このとき、条件として土曜日曜はプラス1,000円となります。 IFとORで対処し、一日の計算はどうにかできました。 1期間の合計(平日は平日の欄、土日は土日の欄)を下に入れるのですが、上記に書いたとおり、日付はカレンダーではなくランダムで入っているので、土日だけの計算は手作業で計算させています。 これを土日は土日、平日は平日で計算させる方法はありませんでしょうか? たとえば土か日と記入されているものだけを集めて計算させるとか。 説明に不足があればどんどんご指摘下さい。

  • excel 計算式を教えてください

    Excel初心者です。Excel2007を使用してます。 下記のような条件で合計計算できる計算式があったら教えてください。 A    B      C     D     10   ABC100   1     1 200  ABC100   1     1 200  ABC200   1     2 200  DEF50    1     2 420  AAA     3     0 420  CCC     2     0 200  DEF200   1     5 ・ ・ ・ 上記のように A列 場所のコード B列 商品名 C列 個数 D列 工場のコード が入ってます。 D列の工場のコードごとに、A列の200のみ・C列の個数合計を出したいです。 例)上記の表だと D列 0 = 表示しない、もしくは 0 D列 1 = 1 D列 2 = 2 D列 5 = 1 という感じで、工場のコードごとに合計計算できる式があったら教えてください。

  • EXCELで入力された式の値を求めて自動計算

    A B C D E 1|データNO |数値1| 数値2| 数値3| 2| 1| 0.3 | 0.2 | 0.5 | 3| 2| 0.3 | 0.2 | 0.5 | 4| 3| 0.3 | 0.2 | 0.5 | -------------------------------------------- 10| 2/1| 数式1| 数式2 | 数式3 | 11| 3/2| 数式4| 数式5 | 数式6 | 12| 【求めたい値】 数式1には=C3/C2、数式2には=D3/D2、数式3には=E3/E2 数式4には=C4/C3、数式2には=D4/D3、数式3には=E4/E3 B列の2/1というのをそのまま式にしたいです。 2/1、3/2などは規則性はありません。その都度変わります。 C列の式ではC列の値を、D列の式ではD列の値を用います。 関数で=MATCH(LEFT(D34,SEARCH("/",D34,1)-1),D1:D23,0))と入れ、C3の値を求めようと思いましたが この時点でエラーになりました。=MATCH(2,D1:D23,0)だと大丈夫なのですが・・・。 関数でやるととても式が長くなりそうなので、VBAの方が良いかとも思っています。 どのようにコード、もしくは式を書けば希望の値が得られるでしょうか? VBAの場合は2/1などの数値を入れた時点で自動計算できれば嬉しいです。 よろしくお願いします。

  • エクセル IF関数 初心者です。。

    A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 2  9:30 Cさん 11:00 3  10:00 Dさん 12:00 4  10:30 Eさん 9:00  1  9:00 A列氏名 B列時間 C列 B列IF関数 9:00からは1、10時からは2、 11からは3・・・ D列はC列のVLOOKUP関数 1=9:00、2=9:30、3=10:00・・・ そこでお聞きしたいのですが・・ A    B   C  D Aさん 9:00  1  9:00 Bさん 10:00 3  10:00 Cさん 11:00 4  10:30 Dさん 12:00 5  11:00 Eさん 9:00  2  9:30 IF関数を用いて IF(B1>=0.375),1,if(B1>=0.416666666666667),2,IF(B1>=0.458333333333333),3・・・ Eさんが2になるような数式がわかりません。 よろしくお願いします。。

  • エクセル:セルを参照して計算

    お世話になります。 A列にコード番号が、B列に数値が入っています。 A列のコード番号は順不同で重複もあります。 C列にはコード番号の一覧が入っています。(重複なし) C列と一致するコード番号をA列から探し、対応するB列の合計をD列に表示する。 A列に一致するコード番号がないときは0と表示させる。 この場合、D列にはどのような計算式を入力されておけばよいのでしょうか。 例) A1にA、A2にB、A3にC、A4にA、A5にB、A6にD B1に10、B2に20、B3に30、B4に15、B5に20、B6に50 C1にA、C2にB、C3にC、C4にD、C5にE・・・・ この場合 D1には10+15なので25、D2には20+20なので40、D3には30、D4には50、 D5には0を入力する。 よろしくお願いします。

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • Excelの計算式

    同一のファイル内で↓の事をしたのですが、ご意見をいただけませんか? Sheet1; (A列) (B列) (C列) (D列) 1 fileA 10K   ● 対象外 2 fileB 20K ▲ 3 fileC 30K  ×  対象外 4 fileD 40K  ■ . . Sheet2; (A列) (B列) (C列) (D列) 1 fileA 10K   0 n/a 2 fileB 20K   1 ▲ 3 fileC 30K   0  n/a 4 fileD 40K   1   ■  . . 1. (Sheet2)D列の作成です。 Sheet1, Sheet2共に行の並びは例のように順序正しくなくランダムです。 (Sheet1)A列を検索して、同一ファイルが存在すれば、ヒットした行番号の(Sheet1)C列の記号をコピーします。 ただし、(Sheet1)D列が「対象外」のときは、「n/a」をコピーします。 セル(D, 1)の定義ですがエラーになります。 =IF(Sheet2!A1 = Sheet1!A:A, IF(Sheet1!D:D = "", Sheet2!C:C, "n/a") ) 2. (Sheet2)C列の作成です。 今後、(Sheet2)D列と同じデータ項目の列がE,F,G..と増えます。 記号が存在すればカウントして、「n/a」はカウントしません。 汎用的に最終列を検索して、合計を求める方法はございますか? セル(C, 1)の定義はどのようになりますか? 以上 宜しくお願い致します。

  • Excelで参照をして計算式を作る方法

    こんにちは。 Excelの数式で困っていますので、教えて下さい。 下のようなExcelの表で、 A2~D2、A3~D3、A4~D4の【数】にはゼロを含む何らかの数字が入ってて、 【空】は空欄です。    A列 B列 C列 D列 E列 1   1   2   3   4 2   数  数  数  数 3   空  数  数  数 4   空  空  数  数  E2、E3、E4に数式を入れたいのですが、2~4行目の数字が入っているか 入っていないかを1行目の数字に対応させて、 A2、A3、A4に数字が入っていれば、A1の数字を計算に入れて、空欄であれば 計算にいれない。 E2には1+2+3+4で【10】 E3には2+3+4で【9】 E4は3+4で【7】 というふうに数字が入っている欄だけを1行目の数字を絶対参照して合計を求めたいのです。 SUMIFという関数を使って、E2にSUMIF(A2:D2,▲,$A$1:$D$4)という式を入れてみたのですが、▲には半角スペース・*(アスタリスク)・?(クエスチョンマーク)などを入れてみたのですが、エラーで計算が成り立ちません。 ▲のところに【空欄】という意味のものを入れたいのですが、それがあるのかないのかわかりません。 もしくは、この数式を使うのではなく、他の数式を利用するのでしょうか? 説明が分かりにくいかもしれませんが、よろしくお願いします。

専門家に質問してみよう