- ベストアンサー
(excel)indirectがよくわかりません
エクセルで、indirectという関数があると思いますが、ヘルプ を読んでもよくわかりません。 どういうときに使うのでしょうか? 知らない人が作ったエクセルファイルで、 「=RANK(E4,INDIRECT("E4:E"&MAX($B$4:$B$150)+3))」 と書いてありました。 1行目から3行目はタイトル等でデータはなく、4行目からデータ があるのですが、E列にある数値で順位付けをしたいのですが、 普通であれば「=rank(E4,E:E)」とかでもいいと思われます。 しかしながら、データはある有限個(データ数は不明)あり、 データ数を超えた行のE列には「#value!」となっており rank(E4,E:E)」が使えません。 そのため、上記のなんだかよくわからない式になっているのです。 (B列に、データの1個目からデータ数まで1ずつ増えていく 数字が入っています) 「=RANK(E4,INDIRECT("E4:E"&MAX($B$4:$B$150)+3))」 この意味教えてください。(「&」もわかりません)
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
文字列でセルのアドレスを指定出来るって事です。 例えば、 1)セルA1 に C1:C10 と入力 2)セルA2 に =SUM(INDIRECT(A1)) と入力 これで、セルC1:C10 の合計が出ます。 セルA1の文字を D1:D10 にすれば、合計するセルを D1:D10 に切り替えられます。 ご質問の環境では B4 以下に 1 から増加していく番号が入っているものと思います。 どこかのセルに =MAX($B$4:$B$150)+3 と入れるとB列の一番大きい数字が入った行番号が表示されるのでしょう。 そして、& は文字列を繋げるものです。 B列最終行が 30 だった場合、"E4:E" & MAX($B$4:$B$150)+3 は "E4:E30" という文字列になります。 出来上がった文字列を INDIRECT 関数で正式なセル参照にしてやるのです。 それによって =RANK(E4,E4:E30) という関数を入れているのと同じ事になります。 また、B列にデータを追加した場合は、=RANK(E4,E4:E31) のように自動的に参照を拡張出来るようにもなります。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >「=RANK(E4,INDIRECT("E4:E"&MAX($B$4:$B$150)+3))」 その数式は、ちょっとヘンですね。 MAX($B$4:$B$150)+3) が何を表すのか知りませんが、最大値をとってもしょうがないような気がします。 こうすればよいのでは? =IF(E4="","",RANK(E4,INDIRECT("E4:E"&COUNT(E:E)+3))) COUNT(E:E)+3 は、データがある最後の行数を表します。 INDIRECT("E4:E"&COUNT(E:E)+3) つまり、E4 から、データがある最後の行数までの範囲です。 INDIRECT の中は、文字列を引数としますので、「&」文字列をつなぐためです。 例えば、データが、120行まであれば、E4:E120 と中身はなっています。
- WWolf
- ベストアンサー率26% (51/192)
こんにちは。 関数のヘルプを読めば解ると思うのですが 単純に「指定される文字列への参照を返す」です。 よって、 「=RANK(E4,INDIRECT("E4:E"&MAX($B$4:$B$150)+3))」 は、「E列4行目~絶対参照B列絶対参照4行~絶対参照B列絶対参照150行の中で一番大きい値+3の範囲の中でE列4行目の値の順位を計算する。」です。 「=rank(E4,E:E)」 循環参照を引き起こします。
- koko88okok
- ベストアンサー率58% (3839/6543)
> 「=RANK(E4,INDIRECT("E4:E"&MAX($B$4:$B$150)+3))」の意味 Excel関数を勉強中の者で、自信はありませんが、・・・ RANK関数の書式は RANK(数値,範囲,[順序]) ですので、 INDIRECT("E4:E"&MAX($B$4:$B$150)+3) はデータ範囲を示す部分であることがわかります。 INDIRECT関数の書式は INDIRECT(参照文字列,参照形式)ですから、 セルE4 から E列のうちセル範囲「B4:B150」の最大値に3を足した行番号までのセル範囲の中で、セルE4 の降順の順位は? ということだと思います。(参照形式 省略) 「"E4:E"」の「" "」はINDIRECT関数の引数なので、文字列であることを示しています。 また、「&」は文字列と文字列を結合する演算子です。