• ベストアンサー
  • すぐに回答を!

EXCEL関数使用で結果が理解できません

OS:WindowsXP EXCEL2000 以下の表が既に作成されています。 行 :O(英文字オーです) ------------------ 列 6 | 96 7 |216 8 |216 9 |185 10 |(空欄) 11 |(空欄) ここで、セルR6に以下の式が入力されています。 =INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE) セルR6には185が表示されているため、空欄でない最後の行の数値を 出力させる式のようなのですが、よく理解できません。 ISNUMBER(O6:O11)は全部数値だった場合にTrueになるのですか? ROW(O6:O11)は6でした。 IF(ISNUMBER(O6:O11),ROW(O6:O11))はFALSEです。 MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))は0です。 COLUMN(O6:O11)は15です。 どなたか知恵をお貸しください。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数73
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.1
  • mshr1962
  • ベストアンサー率39% (7416/18946)

数式がどのように展開されるかというと {=INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE)} =INDIRECT("R"&MAX(IF({True,True,True,True,False,False},{6,7,8,9,10,11}))&"C15"),FALSE) =INDIRECT("R"&MAX({6,7,8,9,0,0})&"C15"),FALSE) =INDIRECT("R"&9&"C15",FALSE) =INDIRECT("R9C15") =INDIRECT("O9") =185 配列数式を使わないで同じ解を得る数式として =INDIRECT("O"&MATCH(MAX(O6:O11)+1,O6:O11,0)+5) または =INDEX(O6:O11,MATCH(MAX(O6:O11)+1,O6:O11,0))

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 助かります。

関連するQ&A

  • マクロ記録実行で実行時エラー'1004'発生

    excel2010 B2セルに文字列が入っています。 文字と数値の混載です。 数値の位置は不定です。 L2のセルで、下記判定をします。 B2セルの文字列(約20文字程度)の左から4番目がドだったら、数値を抽出、ド以外だったら空白。 WEBで計算式があったので、それをそのままマクロの記録としました。 Range("L2").Select ActiveCell.FormulaR1C1 = _ "=IF(RIGHT(LEFT(RC[-10],4),1)=""ド"",MID(RC[-10],1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(RC[-10]))),)),MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))*ROW(INDIRECT(""1:""&LEN(RC[-10]))),))-1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(R" & _ "),))+1)*1,"""")" Range("L3").Select で記録されます。 上記を、マクロの実行すると実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と表示されます。 何がおかしいのでしょうか? シートで、マクロでなく、L2セルでF2リターンとする分には、数値が表示されます。 下記は、L2の中身です =IF(RIGHT(LEFT(B2,4),1)="ド",MID(B2,1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),)),MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))*ROW(INDIRECT("1:"&LEN(B2))),))-1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),))+1)*1,"")

  • エクセル2000の機能について質問

    エクセル2000を使っているのですが、聞きたい事があって投稿しました。 質問の説明が上手く出来ないのですが、例えば… A1:3 B1: C1:6 D1:5 E1:  のように、セルに数値があります。 これを左から読み取り、最終的に一番右端に入力されている数値だけを抜き取り、別のセル(例えばG1)に表示させるみたいなことって出来るんですか? 補足として入力されていなければ読み込まない。 知り合いに聞いたら、 >結果を表示したいセルに >=INDIRECT("R"&MAX(IF(ISNUMBER(セル番号:セル番号),ROW(セル番号:セル番号)))&"C"&COLUMN( セル番号,セル番号),FALSE)と入力し >{Ctrl}+{Shift}+{Enter}で確定し配列数式とする。 >確定後、数式は、{ }でくくられ、配列数式となる。 >手動で{ }を入力してはダメ。 >セル番号のとこは計算したい選択範囲を入力。 >A1からA5のあいだ入力された右端の数値をA7に出したいばあいA7に >=INDIRECT("R"&MAX(IF(ISNUMBER(A1:A5),ROW(A1:A5)))&"C"&COLUMN(A1:A5),FALSE) >を入力 って言われました。 やってみたけど、出来ませんでした。 誰か教えてくれませんか? お願いします。

  • Excelの条件付き書式の設定がうまくいきません

    Excel2011(Mac)です。 ある列において、数値が50以上のセルのみ着色したいのですが、条件付き書式のルール設定で数式を利用して =INDIRECT(ADDRESS(ROW(),COLUMN()))>=50 とすると、50以上はすべて着色するのですが、空欄まで着色されてしまいます。 ためしに、 =INDIRECT(ADDRESS(ROW(),COLUMN()))<>"" としてみたら、空欄以外の数値が入っているところがすべて着色されます。 それでは、と思い、 =AND(INDIRECT(ADDRESS(ROW(),COLUMN()))<>"",INDIRECT(ADDRESS(ROW(),COLUMN()))>=50) としてみたら、今度はすべてのセルが着色されません(不思議で仕方ありません)。 どういう数式を書けば、空欄と50未満のところは着色されず、50以上のセルだけ着色されるのでしょうか。

その他の回答 (1)

  • 回答No.2
  • f272
  • ベストアンサー率45% (5084/11296)

セルR6には185が表示されているというのなら、入力されているのは =INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE) ではなくて {=INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE)} でしょう。 これは配列数式と言われているものです。普通の数式とは違って複数の結果を返すことができます。 例えばISNUMBER(O6:O11)の部分を選択した状態でF9を押すと、その部分を評価した結果が見えます。(もとに戻るときはESCを押す) > ISNUMBER(O6:O11)は全部数値だった場合にTrueになるのですか? 違います。{TRUE;TRUE;TRUE;TRUE;FALSE;FALSE}というように6つの結果をすべて返すのです。 そして IF(ISNUMBER(O6:O11),ROW(O6:O11))は{6;7;8;9;FALSE;FALSE}となって、それのMAXは{9}になるのです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 助かります。

関連するQ&A

  • エクセル関数の読み方を教えてください。

    よわい70歳弱のもうろくジジーです 教えてください 郵便番号付き住所とついてない住所の列から郵便番号を取りだす式を調べているうちに次のような式が見つかりました。 =IF(ISNUMBER(LEFT(A1,1)*1),LEFT(A1,8),"") このうち、 ISNUMBER(LEFT(A1,1)*1)の意味を教えてください。 ISNUMBER関数は、対象の文字列が数値の場合にTRUEを返し、それ以外の時はFALSEを返すと言うことまではわかったのですが 左に数値?(郵便番号は数値か?)を含むセルから数値を判定する時に 引数として「LEFT(A1,1)*1」すなわち「A1セルの左から1文字」に「1」を乗じると「TRUE」を返し、乗じない場合「FALSE」を返すのかを教えてください。 説明不十分の場合補足しますよろしく御願いします

  • R1C1形式。別シート参照時について

    題名が意味不明ですが申し訳ありません。 下記のような数式があります。 こちらのサイトで教えていただいた関数であり、すごく難しくて私もはっきり理解できてはおりませんが、R1C1形式で、セルを参照するようになっているのかな&#65374;というところまで、理解できました。 =IF(AND(ISNUMBER(INDEX($D:$D,ROW())),INDEX($D:$D,ROW()+1)=""),SUM(INDIRECT("R"&MATCH("゛",OFFSET(INDIRECT("R1C"&COLUMN($B:$B),FALSE),,,ROW()),-1)&"C"&COLUMN($D:$D)&":R"&ROW()&"C"&COLUMN($D:$D),FALSE)),"") この数式は、’同じシート’の、D列なり、特定のセルなり、、を参照しておりますが、この数式を別のシートのセルに入力して、そこから、このシートを参照させようと思います。 つまり、このシートはもともと’入力用’という名前のシートなのですが、別のシートから、この’入力用’シートの列なりセルなりを参照して値を求めたいのです。 この場合、入力用!というような文字を入れればいいのは知っているのですが、式が複雑すぎるため、どこにどう記入してよいのかがわかりません。自分なりにいろいろやってはみたのですが、REF#となってしまいました。 どこにシート名を入れればうまくいくのか教えていただけないでしょうか。 何卒お願いいたします。

  • max関数で#N/A

    k1,o1,r1にそれぞれ数式が入っています。 u1で =max(k1,o1,r1) と最大値を求めたいです。 すべてのセルが数値になっているときはもちろんu1も数値になりますが、 #N/Aがあると、u1は#N/A になります。 連続しているセルではないので、{=MAX(IF(ISNUMBER( … は使えません。 やり方をご教授ください。 エクセル2010を使ってます。 よろしくお願いします。

  • EXCEL関数について

    質問があります。 エクセルのA行に 定期点検 (月度検査) ラジオ修理 ボリューム つまみ 校正 視力検査 ボールペン 発注 替芯 購入 コピー用紙 経費 ポケットティッシュ配布用    ・    ・       ・  とあるのを、B行に下記の用に変換したいのですが、 検査 修理 検査 検査 購入 購入 購入 購入 その他 その他 その他    ・    ・       ・  下記のように関数をつくったのですが、うまく動きません =IF(A1="","",IF(ISNUMBER(FIND("点検",A1)),"検査",IF(ISNUMBER(FIND("修理",A1)),"修理",IF(ISNUMBER(FIND("校正",A1)),"検査",IF(ISNUMBER(FIND("検査",A1)),"検査",IF(ISNUMBER(FIND("発注",A1)),"購入",IF(ISNUMBER(FIND("購入",A1)),"購入",IF(ISNUMBER(FIND("経費",A1)),"購入,"IF(ISNUMBER(FIND("配布用",A1)),"購入","その他"))))) わかる方がいらっしゃいましたら、どうぞ教えて下さい。

  • エクセル IF式について、

    先日からこちらで=IFとisnumberの使い方を教えていただき、次のような式を作りました。 =IF(isnumber(C2),B2+C2+F2+G2+J2+K2,"") これで(C2)に数値がある時のみ計算結果を打ち返し、文字その他は空欄で、が出来ました。 次にやりたいことは、(C2)と(G2)と(K2)のいずれかに数値がある時に計算させる式はどのようにすればよろしいでしょうか? 以下の4つを試しましたがNGでした。 =IF(isnumber(C2,G2,K2),B2+C2+F2+G2+J2+K2,"") =IF(isnumber((C2)*(G2)*(K2)),B2+C2+F2+G2+J2+K2,"") =IF(isnumber((C2)OR(G2)OR(K2)),B2+C2+F2+G2+J2+K2,"") =IF(ISNUMBER((C2)*OR(G2)*OR(K2)),B2+C2+F2+G2+J2+K2,"") よろしくお願いします。

  • 入力した数値を元にその他の数値を効率よく求める方法

    お世話になります。 Excelの関数について質問させていただきます。 図を見て頂ければ早いかとは思いますが、元の量(A2&#65374;A5)を基準に、 現在ある量を入力する事でその他の量が自動で計算できる式を作りたいと思っています。 現時点で試しているのは IF関数を使い、数値の入っているセルを見つける →数値が入っていれば割合を求め数量を出す →数値がなければ次のセルに移動、以下繰り返し 具体的にD2のセルには以下のような計算式が入っています。 IF(ISNUMBER($C$2),$C$2/$A$2*A2,IF(ISNUMBER($C$3),$C$3/$A$3*A2, IF(ISNUMBER($C$4),$C$4/$A$4*A2,IF(ISNUMBER($C$5),$C$5/$A$5*A2, IF(ISNUMBER($C$6),$C$6*B2," "))))) 今は5行しか入っていないので動きますが、実際はもっとある為ネストの制限に引っかかりそうです。 なにより計算式が長くて修正するにも一苦労してしまいます。 ここまで来て行き詰ってしまいました。 既出でしたら申し訳ありません。知恵を貸して下さい。よろしくお願いします。

  • ISERROR関数を使用してもエラーが出る

    Excel2016でセルにUSDまたは、JPYの文字がある場合はエラーが出ないのですが、それ以外の文字の場合ISERROR関数を使用しても#VALUE!というエラーが出ます。 関数は以下の通りです。 =IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),100,VLOOKUP(CONCATENATE(MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3),"JPY"),$A$12:$B$18,2,FALSE))*$G5*$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))),0),"超過",ROUNDDOWN(IF(ISNUMBER($P5),-$P5,-$I5)*IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),100,VLOOKUP(CONCATENATE(MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3),"JPY"),$A$12:$B$18,2,FALSE))*$G5*$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))),0))) エラーが出ているのは以下の「【】」の部分のようです。 =IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(【NOT(ISERROR(SEARCH("JPY",$D5,1)))】&#65374; 数値を表示したいのですが解決方法を教えてください。 回答よろしくお願いします。

  • #260の補足です。四捨五入の方法教えて下さい。

    #5362 NO.#2にて、 IF(ISNUMBER(H2),IF(H2>1000,3000+6*700+6*(H2-1000),IF(H2>300,3000+7*(H2-300),"3000"))*65%,"")   の式を適用すれば、というご回答を頂きましたが、今度、この数式の結果の小数点以下を四捨五入させる必要が発生したため、 以下のように数式を変更しました。 =IF(ISNUMBER(H2),ROUND(IF(H2>1000,3000+6*700+6*(H2-1000),IF(H2>300,3000+7*(H2-300),"3000"))*65%,""),0) あるいは、 =ROUND(IF(ISNUMBER(H2),IF(H2>1000,3000+6*700+6*(H2-1000),IF(H2>300,3000+7*(H2-300),"3000"))*65%,""),0) すると四捨五入は出来るのですが、H2セルに数値を入れないと「#VALUE!」が再び出るようになりました。 どうすればいいでしょうか?

  • エクセルのセル内の「数式」の一括変更をVBAなどで行いたいです!

    エクセルのセル内の「数式」の一括変更をVBAなどで行いたいです! いま=O48*($E$8/100)となっている算式を、 =IF(ISNUMBER(O48*($E$8/100)),O48*($E$8/100),"N/A") としたいのです。 また、このような変換を行うべきセルが数百個あり、これをボタンひとつもしくは Ctl+aなどで行えるようにしたいのです。 式の返還は単純で、最初の式をxとすると、IF(ISNUMBER(x),x,"N/A") と置き換えるだけなので、たとえばxという変数に今のセル内の式を代入し、それから IF~の式の指定場所にxを入れる・・・というようなプログラミング処理ができるのでは とかんがえ、質問しました。 よいアイデアをください!!明日までにやる必要があり困っています・・・

  • Excelで配列数式を使わずにとびとびの集計をしたいのですが

     ご覧いただきありがとうございます。Excelで、下記のような条件で集計を行いたいと思っています。配列数式を使う方法は考えついたのですが、できれば配列数式を使わず、作業セルもマクロも使わずに普通の関数式で集計したいのです。どなたかおわかりになる方がいらっしゃいましたら、よろしくご教示をお願いいたします。 (条件)  ○4行一組のデータのそれぞれ1行目の数値を足し合わせる。  ○ただし、各組の1行目が空欄の場合は2行目の数値を使う。3行目・4行目は関係なし。  ○データの先頭はA4で、データ数は一定していない。 (考えついた式) {=SUM(IF(MOD(ROW(A4:INDIRECT("A"&ROW()-4)),4)=0,IF(A4:INDIRECT("A"&ROW()-4)>0,A4:INDIRECT("A"&ROW()-4),OFFSET(A4:INDIRECT("A"&ROW()-4),1,0))))}  よろしくお願いいたします。