アカウント名:
パスワード:
=VLOOKUP(検索値,IF({1,0},C1:C100,A1:A100),2,FALSE)とするとC列で検索してA列の値を返すことも可能。
挙動がわからなさすぎてググってしまった `IF({1,0}, , )` が検索用の列を作成する感じなのかhttp://dev-clips.com/clip/functions/reverse-vlookup/ [dev-clips.com]
# なんでIFがそんな挙動なのかは全然わからないが。。
第1引数が配列なので、IFの結果も配列になる。第1引数が要素2個の配列、第2、第3引数が100行1列の範囲なので、IFの結果は結果はこの直積である100行2列の2次元配列になる。第1引数の {1,0} は、IF関数的には1個目をTRUE、2個めをFALSEと解釈するので、結果の2次元配列には、1列目に第2引数であるC1:C100の値、2列目に第3引数であるA1:A100の値が格納される。これでVLOOKUP関数に渡せる形の配列になった。
…と、数式を見れば何をやっているのかは分かるが、これを独自に思いついた人は頭がいいね。まさにコロンブスの卵。
ううう、これがどうしてもわからない、挙動をもう少し詳しく教えてください!>第1引数の {1,0} は、IF関数的には1個目をTRUE、2個めをFALSEと解釈するので、結果の2次元配列には、1列目に第2引数であるC1:C100の値、2列目に第3引数であるA1:A100の値が格納される。
例えば、IF(TRUE,"hoge","fuga")って書いた場合、このIF関数は"hoge"を返すよね?IF関数の条件文にTRUE/FALSEを指定すると、直接第2引数と第3引数を入力したのと同じになる。
第1引数の{1,0}っていうのは配列定数で、1行2列の表と同じ意味になる。Excelでは1以上はTRUE、0はFALSEと見なすことができるので、{1,0}は、次のような表を指定したことになる。
|TRUE|FALSE|
で、TRUEは第2引数、FALSEは第3引数を返すので、IF({1,0},C1:C100,A1:A100)は、こうなる。
|C1:C100|A1:A100|
つまり、1列目に元の表のC列、2列目に元の表のA列を書いた表ができる。VLOOKUPはこの表を範囲とすることになるので、C列を検索してA列の値を返してくれるってことになる。
IF({1,0},C1:C100,A1:A100)の結果はIF(1,C1:C100,A1:A100)の結果(C1:C100)とIF(0,C1:C100,A1:A100)の結果(A1:A100)が{1,0}の順で並んだものになる。でわかるだろうか?
なお配列定数内({}内)では「,」が横方向、「;」が縦方向の項目の区切りになる。
二つとも同じかたの説明ですよね完全に理解でき、すごく感動しました。感謝!
Rっぽい感じはあるけど、割と変な仕様だ。(表計算の関数なんで、プログラミング言語と比較するのは微妙ではあるけど)
このテクニックは初めて見たかも。
よく使われるからこそ新関数としたのだろうけど、よく使ってる人達からは「わざわざ新関数にする必要ある?」と言われるパターン
vlookup使えない人たち、ますます居づらくなって自殺すんじゃね?xlookup使えないやつだとかってパワハラされそうじゃね?
方眼紙野郎を駆除できるなら大歓迎さ
再計算やマルチスレッド計算の挙動が変わるなら、新関数の価値はありそう。
100行と言わずMaxまで=VLOOKUP(検索値,IF({1,0},$C:$C,$A:$A),2,FALSE)
# 左見るときはINDEX使うもんだと思とったがこれもなかなか
=VLOOKUP(検索値,IF({1,0},C1:C100,A2:A101),2,FALSE)なんてするとC列で検索して1行下のA列の値を求められる。
これ、同じことGoogleのスプレッドシートでしようとしたらエラーになりました。で、次のようにすればいい=VLOOKUP(検索値,{C1:C100,A1:A100},2,FALSE)IF関数無しで、直接範囲を指定できるので、こちらのほうが簡潔ですね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
いちおう (スコア:5, 参考になる)
=VLOOKUP(検索値,IF({1,0},C1:C100,A1:A100),2,FALSE)
とするとC列で検索してA列の値を返すことも可能。
Re:いちおう (スコア:2, 興味深い)
挙動がわからなさすぎてググってしまった
`IF({1,0}, , )` が検索用の列を作成する感じなのか
http://dev-clips.com/clip/functions/reverse-vlookup/ [dev-clips.com]
# なんでIFがそんな挙動なのかは全然わからないが。。
Re:いちおう (スコア:3, 参考になる)
第1引数が配列なので、IFの結果も配列になる。
第1引数が要素2個の配列、第2、第3引数が100行1列の範囲なので、IFの結果は結果はこの直積である100行2列の2次元配列になる。
第1引数の {1,0} は、IF関数的には1個目をTRUE、2個めをFALSEと解釈するので、結果の2次元配列には、1列目に第2引数であるC1:C100の値、2列目に第3引数であるA1:A100の値が格納される。
これでVLOOKUP関数に渡せる形の配列になった。
…と、数式を見れば何をやっているのかは分かるが、これを独自に思いついた人は頭がいいね。まさにコロンブスの卵。
Re: (スコア:0)
ううう、これがどうしてもわからない、挙動をもう少し詳しく教えてください!
>第1引数の {1,0} は、IF関数的には1個目をTRUE、2個めをFALSEと解釈するので、結果の2次元配列には、1列目に第2引数であるC1:C100の値、2列目に第3引数であるA1:A100の値が格納される。
Re: (スコア:0)
例えば、IF(TRUE,"hoge","fuga")って書いた場合、このIF関数は"hoge"を返すよね?
IF関数の条件文にTRUE/FALSEを指定すると、直接第2引数と第3引数を入力したのと同じになる。
第1引数の{1,0}っていうのは配列定数で、1行2列の表と同じ意味になる。
Excelでは1以上はTRUE、0はFALSEと見なすことができるので、{1,0}は、次のような表を指定したことになる。
で、TRUEは第2引数、FALSEは第3引数を返すので、IF({1,0},C1:C100,A1:A100)は、こうなる。
つまり、1列目に元の表のC列、2列目に元の表のA列を書いた表ができる。
VLOOKUPはこの表を範囲とすることになるので、C列を検索してA列の値を返してくれるってことになる。
Re: (スコア:0)
IF({1,0},C1:C100,A1:A100)
の結果は
IF(1,C1:C100,A1:A100)
の結果(C1:C100)と
IF(0,C1:C100,A1:A100)
の結果(A1:A100)が
{1,0}
の順で並んだものになる。
でわかるだろうか?
なお配列定数内({}内)では「,」が横方向、「;」が縦方向の項目の区切りになる。
Re: (スコア:0)
二つとも同じかたの説明ですよね
完全に理解でき、すごく感動しました。
感謝!
Re: (スコア:0)
Rっぽい感じはあるけど、割と変な仕様だ。(表計算の関数なんで、プログラミング言語と比較するのは微妙ではあるけど)
Re: (スコア:0)
このテクニックは初めて見たかも。
Re: (スコア:0)
よく使われるからこそ新関数としたのだろうけど、
よく使ってる人達からは「わざわざ新関数にする必要ある?」と言われるパターン
Re: (スコア:0)
vlookup使えない人たち、ますます居づらくなって自殺すんじゃね?
xlookup使えないやつだとかってパワハラされそうじゃね?
Re: (スコア:0)
方眼紙野郎を駆除できるなら大歓迎さ
Re: (スコア:0)
再計算やマルチスレッド計算の挙動が変わるなら、新関数の価値はありそう。
Re: (スコア:0)
=VLOOKUP(検索値,IF({1,0},C1:C100,A1:A100),2,FALSE)
とするとC列で検索してA列の値を返すことも可能。
100行と言わずMaxまで
=VLOOKUP(検索値,IF({1,0},$C:$C,$A:$A),2,FALSE)
# 左見るときはINDEX使うもんだと思とったがこれもなかなか
Re: (スコア:0)
=VLOOKUP(検索値,IF({1,0},C1:C100,A2:A101),2,FALSE)
なんてするとC列で検索して1行下のA列の値を求められる。
Re: (スコア:0)
これ、同じことGoogleのスプレッドシートでしようとしたらエラーになりました。
で、次のようにすればいい
=VLOOKUP(検索値,{C1:C100,A1:A100},2,FALSE)
IF関数無しで、直接範囲を指定できるので、こちらのほうが簡潔ですね。