• ベストアンサー

Excelの数式の簡素化について

=if(isna(VLOOKUP(R1C1,SOMERANGE,2,false)), "", VLOOKUP(R1C1,SOMERANGE,2,false)) =if(sum(SOMERANGE), sum(SOMERANGE), sum(OTHERRANGE)) のように、同じ式を数箇所に含む場合、無駄だなあと思いつつ、いつも仕方なく使ってますが、 もっと式を簡単にする方法はないでしょうか。 これらの式に対する具体例でも構いませんが、一般的にどんな方法が考えられますよ、 というアドバイスをいただけるととてもありがたいです。

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

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

私は、いままで掲示板等で書いてきた経験で言わせていただきます。Excelを始め、既存のアプリケーションの基本的な仕様に関わる部分に対してのご要望・ご質問(いわゆる個々のプリファレンス)というのは、99%不可能だと言って過言ではないと思います。 =IF(ISERROR(VLOOKUP(A1,$G$2:$J$30,3,False)),"",IS()) IFの条件による結果は、並列処理ですから、IF(条件,真,偽)のそれぞれの引数は、それぞれ独立したもので、それを使うためには、#2の misatoannaさんの方式しかありません。それをダメ出しする理由など、私には考えられません。 私の古い資料を出してみましたが、今から、約20年前のMS社の表計算を、日本のアスキー社を通して紹介したときから、その関数の使い方など、考え方はずっと変わっていないものです。 それと、もう1つ。関数は、エラーに対して特殊なエラーコードを吐くようにできています。このエラーコードは、すべての関数の戻り値に優先するようにできています。もしも、文字列のエラー値を出力するようにできれば、おっしゃる問題は解決するかもしれません。しかし、それができるのは、ユーザー定義関数として、自分で作る以外ありません。そのためには、VBAの勉強が必要になります。 同じ繰り返しがダメなら、以下のようにするしかありません。 =IF(COUNTIF(R1C5:R17C5,R1C1),VLOOKUP(R1C1,R1C5:R17C6,2,FALSE),"") 単に、パターンが変わっただけです。しかし、英語の文章を書いているわけではありませんから、こういうパターンを避けるロジックは、関数上では存在しないと思います。 =IF(ISNA(VLOOKUP(R1C1,MYRANGE,2,FALSE)), "", VLOOKUP(R1C1,MYRANGE,2,FALSE)) これで、なんの問題もありません。 もちろん、これだけに関してなら、このような逃げ方はあります。 例: =INDEX(R1C5:R11C6,COUNTIF(R1C5:R11C5,R1C1)*MATCH(R1C1,R1C5:R11C5,1),2)  5  6 列番号 ----------  0  □ ←空白値を入れる  1  A  3  B  5  C  7  D  9  E  11  F  13  G  15  H  17  I  19  J それで良いか悪いのか、なんとも言えませんが、あえてする必要があるのでしょうか? なお、EXCELの基本的な使い方のひとつに、分かち書きしたり、名前を利用したりする方法があります。 6.名前の活用 7.配列数式 [XL] メモリを節約するワークシートの作成方法

参考URL:
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/401/7/04.asp
masaboo
質問者

お礼

ご丁寧にありがとうございました。 今まで無駄だと思っていましたが、これで安心して式を書くことができます。

その他の回答 (3)

回答No.3

私が以前に同じ質問をしています。 URLを参考にしてください。

参考URL:
http://security.okweb.jp/kotaeru.php3?q=909023
masaboo
質問者

お礼

ありがとうございました。 知りたいことはまさにこれでした。 やはりみんな同じこと考えるんですね。

回答No.2

シート内でいくつも同じ数式を使われるのでしたら、数式に名前を つけられたらいかがでしょうか。 [挿入]-[名前]-[定義]から、例えば   名   前: QQQ   参照範囲: =VLOOKUP(A1,$G$2:$J$30,3,False) のようにしておいて、数式では   =IF(ISERROR(QQQ),"",QQQ) のように使います。

masaboo
質問者

お礼

ありがとうございます。書き忘れてしまいましたが、別のセルは使わないでいい方法がないだろうか、と考えています。マクロもなしです。 言葉で説明するのも難しいのですが、下のようなイメージです。 =IF(ISERROR(VLOOKUP(A1,$G$2:$J$30,3,False)),"",IS()) IS()は、IS系関数で最後に評価された式の結果を取得する関数のつもりです(VLOOKUPの結果が返る)。このような仕組みがあれば便利だなーと思っているのですが。

  • helonpa
  • ベストアンサー率38% (108/278)
回答No.1

計算結果を別セルに格納しておくことですかね。例えば 「VLOOKUP(R1C1,SOMERANGE,2,false」をR1C2においとくとか。

masaboo
質問者

お礼

早速のご回答ありがとうございます。書き忘れてしまいましたが、別のセルは使用しない前提で悩んでいます。

関連するQ&A

  • 売上を平日、土日、祝 重複を避けたい

    いつもお世話になります。 WIN7 EXCELL2010 です。 問題点は(例えば)、 F19のセルに「1,000」を入力した時、 この日は祝日で月曜日です。 この「1,000」の値が(参照図の赤枠) R13 に又、R6 の両方に加算されます。 この例で言うと「祝 R13」のみに加算させたいのですが是非ご指導いただけませんでしょうか。 参考に A6 =IF(ISNA(VLOOKUP(B6,祭日!$A$6:$D$53,4,FALSE)),"",VLOOKUP(B6,祭日!$A$6:$D$53,4,FALSE)) B6 =TEXT($D6,"yyyymmdd") C6 =IF(ISNA(VLOOKUP(B6,祭日!$A$6:$C$53,3,FALSE)),"",VLOOKUP(B6,祭日!$A$6:$C$53,3,FALSE)) D6 =IF(ROW(A1)>DAY(EOMONTH(A$1,0)),"",$A$1+ROW(A1)-1) E6 =MID("日月火水木金土",WEEKDAY(D6),1) J6 =IF(A6="○",F6,"") R6 =SUMIF($S$6:$S$36,WEEKDAY($Q6),$F$6:$F$36) S6 =WEEKDAY(D6)

  • エクセルの関数VLOOKUPについて教えて下さい。

    エクセルの関数VLOOKUPについて教えて下さい。 範囲にあたるデーター部分が3つのかたまりに分かれている時どのような数式で表すことができますか? 具体的には、HIJ KLM OPQの列位置にある3つの表の中から検索したいのです。 作った数式は1つの表から検索するもので =IF(C9="","",IF(ISNA(VLOOKUP(C9,材料一覧!$H$5:$J$54,2,FALSE)),"未登録",VLOOKUP(C9,材料一覧!$H$5:$J$54,2,FALSE))) です。(C9,材料一覧!$H$5:$J$54,2,FALSE)の後に&(同じ数式で列文字を入れ替えて)で繋げてみました。列範囲KLMの表は上手くいったのですが、3つ目のOPQの表は上手くいきませんでした。 原因と正しい数式を教えて下さい。 よろしくお願いいたします。

  • エクセルでオ-トフィルと

    いつも御世話になります Cells(t + 1, 5)のセルに FormulaR1C1 = "=IF(RC[-4]="""","""",VLOOKUP(RC[-4],漁師名!R2C3:R300C4,2,FALSE))" VLOOKUPが入ってます セルから50行コピ-する時は Selection.AutoFillか Copy Paste か、手動でやると一緒のように 思うのですが一般的にはどちらがいいのですか 初心者なのでわかりやすくお願いいたします いつもすみません

  • Excel VBA VLOOKUP の書き方

    次の関数をVBAで書くにはどのように記述すればよいでしょうか? =IF(ISNA(VLOOKUP(B2,Sheet2!A2:B9,2,FALSE)),"",VLOOKUP(B2,Sheet2!A2:B9,2FALSE)) よろしくお願いします。

  • エクセル VLOOKUP関数のエラー非表示について

    次のような式がありますが答えが#DIV/0!になり困っています。 =IF($B28="","",($F28*2)/IF(ISNA(VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE)),"",VLOOKUP($B28,形態!$B$5:$Z$200,7,FALSE))) データ範囲のシートは分かれいます。 データ範囲の形態!B5:Z200の中に空白がある場合#DIV/0!になります。 #DIV/0!を非表示する方法を教えてください。

  • EXCELの#VALUE!について

    エクセルに関して知識が乏しいので質問します。 =IF($A10="","",IF(ISNA(VLOOKUP($A10,ITEMマスター!$A:$I,5,FALSE)),"",VLOOKUP($A10,ITEMマスター!$A:$I,5,FALSE)))*E10 A10が空欄だと、#VALUE!と表示されます。 空欄でも#VALUE!を表示させない方法を教えてください。

  • =IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

    いつもお世話になってます。 以下の関数式について、お時間がありましたらどうぞご教示ください。 =IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE)) 「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」 純粋になんでこのような構文になるのかが解りません。 1.ISNAってそもそもなんでしょう? 2.同じ式を繰り返すのはなぜ? (模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。) ・参考となる他所のページがあれば教えて下さい。 ・素人です。お手柔らかにお願いします。 (エクセル2003)

  • エクセル2003VLOOKUP 検索値が数式の場合

    検索値が数式(表示形式がパーセンテージ)になっているものを IFとVlookupで処理しようとしたところ、エラーがでてしまいます。(#N/A) 例:C2が検索値。結果下記式の結果をD2に表示。100%以上の場合はすべて100%と表示。 A2  B2  C2      D2 50  40  B2/A2(%で表示) =IF(C2>=100%,100%,VLOOKUP(C2,他のシートの表の範囲,2,FALSE)) 100%の部分については問題なく表示されますが、 VLOOKUPで検索するデータが(100%以下)が表示されません。 検索値(C2)を値で貼り付けすると、問題なく表示されますが、 数式はそのままのこしてD2に表示することは可能なのでしょうか。 ちなみにD2も%表示です。 どなたかお分かりの方がいらっしゃれば教えていただけますと幸いです!

  • マクロをまとめられますか?

    エクセルについて、教えてください。 今はこんな感じになっています。 C3:C10のセル =IF(R1C[1]="""","""",VLOOKUP(RC[13]&R1C[1],main!C1:C30,6,FALSE))" D3:D10のセル =IF(R1C[1]="""","""",VLOOKUP(RC[14]&R1C[1],main!C1:C30,7,FALSE))" E3:E10のセル =IF(R1C[1]="""","""",VLOOKUP(RC[15]&R1C[1],main!C1:C30,8,FALSE))" で作っています。 これをE列よりも先にも作りたいのですが、一個ずつ作ると式ばかりになりますので こういうのをまとめて書くやり方はあるのでしょうか? もし、まとめるような書き方があればアドバイスでも構いませんのでお願いしたいと思います。

  • エクセル VLOOKUPについて教えてください

    宜しくお願いします。 エクセルの関数で結果が空白の時『0』と表示させ、次のシートの計算に反映させたいのですが、空白の為計算できないようです。よい方法を教えてください。 セルに入っている式は IF(ISNA(VLOOKUP(A1,○○!$A$1:$F$50,5,0)),"0",(VLOOKUP(A1,○○!$A$1:$F$50,5,0)) この式が一行に3箇所入っており、一つに数字が入ると残りの2つのセルは空白になってしまいます。 一つのセルに数字がはいったら、残りのセルに『0』と表示させたいのです。 どうぞ宜しくお願い致します。

専門家に質問してみよう