• ベストアンサー

関数の意味(HLOOKUPとROW関数)

先週より新しい職場で働いております。 下記のような関数が使われている表があるのですが、どういう意味になるのでしょうか。 =HLOOKUP(A1,$1:$30,ROW()-8,FALSE) この関数は実際の関数ではありません。 確かこんな関数だったなあと思い出しながら書いているので、もしかしたら変かもしれません。 ポイントは、 範囲=セル番地指定ではない(行範囲指定?) 行番号=数値ではなくROW関数で指定 になっているところです。 お手数をおかけしますが、宜しくお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! まず HLOOKUP関数の意味ですが HLOOKUP(検索値,範囲,行番号,検索の型) というコトになりますので、 お示しの数式だと 検索値=A1 範囲 =$1:$30(列番号がなく、1~30行の範囲) 行番号=ROW()-8 ← 範囲指定した1行目が検索値ですので、2以上の行番号を返すのが普通 すなわち10行目以降のみ有効な数式というコトになります。 おそらくオートフィルで下へコピーするためだと思われます。 検索の型=そのままFALSE型 というコトになります。 ↓の画像の場合、B10セルに =HLOOKUP(A10,D$1:G$5,ROW()-8,0) という数式を入れオートフィルで下へコピーしています。 ※ 範囲指定が5行分だけしかしていませんのでオートフィルをした場合 4行分だけ有効データがかえってきます。 お示しの数式の場合は10行目に数式を入れ 29行分はオートフィルしても有効データが返る(範囲指定内)というコトです。 ※ 通常数式内に ROWもしくはCOLUMNを使用する場合オートフィルコトが多いと思います。 こんなんで参考になりますかね?m(_ _)m

hy0423
質問者

お礼

tom04さん、ありがとうございます。 画像までつけて説明してくださり、大変わかりやすかったです。 オートフィルで下までコピーしたい場合にrowなどは使うことがあるのですね。 勉強になりました。 ありがとうございます。

その他の回答 (2)

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

記憶で書いている数式ということで、その式はそのままでは意味のない数式ですが、とりあえずそれは置いておいて。 >質問1 1行目から30行目までの範囲の全部のセルを対象に計算します。全く問題ありません。 例: =MAX(A:A)  ’A列の全部のセルの中の最大値 =MIN(1:2)  ’1行目と2行目の全部の中の最小値 >質問2 まずHLOOKUP関数について。 HLOOKUP関数は対象範囲の先頭行で、検索値を探します。 いまは1行目から30行目までを対象にしているので、1行目が検索値を探す範囲です。 そこで一致するセルを見つけたら、そのセルから下がって「指定行数目」のセルを取ってきます。 数式では、ROW()-8の部分です。 次にROW()関数について。 その形式では、ROW()関数は数式が置かれているセルの行番号を計算する関数です。 仮にHLOOKUP関数(の中のROW()関数)が10行目のセルに書いてあれば10、20行目にあれば20になります。 ポイントは、そのHLOOKUP関数の式を「下向けにコピーする」と、ROW()-8の部分の結果が順繰り1ずつ増えていきます。 10行目に最初の数式があれば「ROW()-8」は2になります 11行目にその数式があれば「ROW()-8」は3になります 12行目に数式があれば「ROW()-8」は4になります HLOOKUP関数でヒットしたセルの、縦ヒトカタマリをまとめて持ってきたいといった時に、そういう使い方をよくします。

hy0423
質問者

お礼

keithinさん、ありがとうございます。 ちゃんとした式でなくてすみません。 しかし、よくわかりました。 ありがとうございます。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.1

>範囲=セル番地指定ではない(行範囲指定?) その行の左端から右端まで、すべてを指定していることになります。 >行番号=数値ではなくROW関数で指定 ROW()は、現在の(その式が書かれている)セルがある行番号を返す関数です。ROW()-8なので、現在の行より8行上の行になります。 したがって、関数全体は  第1行の左端から右端まで検索してA1と同じ値を探し、  それと同じ列にあって、現在の行より8行上の行のデータを得る という意味になります。

hy0423
質問者

お礼

foomufoomuさん、ありがとうございます。 Row関数がよくわからなかったのです。 自分でも調べてみたのですが、本当にそれで合っているのか疑問でした。 教えていただき、大変助かりました。

専門家に質問してみよう