![ソフトウェア ソフトウェア](https://srad.jp/static/topics/software_64.png)
Microsoft、新しいExcel関数「XLOOKUP」を発表 46
ストーリー by hylom
新たなLOOKUP 部門より
新たなLOOKUP 部門より
Excelでよく使われるとされる「VLOOKUP」関数や「HLOOKUP」関数の後継となるという「XLOOKUP」なる関数がExcelに追加されるそうだ(窓の杜、Microsoft Excelブログでのアナウンス)。
XLOOKUPは次のような引数を取る関数。
XLOOKUP(lookup_value, lookup_array, return_array)
第一引数で検索する値、第二引数で検索対象の範囲、第三引数で検索結果の範囲を指定すると、第二引数で指定した範囲から第一引数で指定した値を検索してそのインデックスを求め、、第三引数で指定した範囲の中からそのインデックスの場所にある値を返すという挙動をする。
また、次のようなオプション引数も指定可能。
XLOOKUP(lookup_value,lookup_array,return_array,[match_mode],[search_mode])
第四引数は第一引数で指定した値とのマッチ方法を指定するもので、第五引数は検索順序を指定するものだ。
いちおう (スコア: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関数無しで、直接範囲を指定できるので、こちらのほうが簡潔ですね。
それよりも (スコア:2, すばらしい洞察)
VLOOKUPSが欲しいな、
複数条件が一致するものを取ってくるような。
今は全部連結した文字列でやらないといけないから。
Re:それよりも (スコア:1)
同じ考えの人が居て嬉しい
Re: (スコア:0)
マクロが許可されているのならマクロで作ってしまえば良いんですけれどね。
正規表現も使えるし。
アドオンを作る手もある。
Re: (スコア:0)
あーいいっすねそれ今うまくできないときVLOOKUPさせるための列に使いやすい値作ったりしてめんどいなとおもってた
一番欲しいのは (スコア:1)
REGEX()
Re:一番欲しいのは (スコア:1)
私はVLOOKUP()の検索値の複数対応ですね。複数のセルで一致したデータが欲しいときがあって、列を追加して複数のセルを連結したデータを作ってからVLOOKUPしてるので。
VLOOKUPがXLOOKUPに進化するのであれば、こちらも是非。
Re: (スコア:0)
私はVLOOKUP()の検索値の複数対応ですね。複数のセルで一致したデータが欲しいときがあって、列を追加して複数のセルを連結したデータを作ってからVLOOKUPしてるので。
VLOOKUPがXLOOKUPに進化するのであれば、こちらも是非。
関数式の中に文字列を結合させる式を入れたらうまくいくのではないかと脳内で考えてみた
Re: (スコア:0)
SQLOOKUPで範囲をテーブルに見立ててクエリ書かせてほしい
=SQLOOKUP("《select文》", 《出力の開始行》, 《出力の開始列》)
xlsmがやたら嫌われててvbaつくれない、つくりにくい
Re: (スコア:0)
Microsoft QueryやPowerQuery for Excelでは駄目かい?
他の better VLOOKUP() (スコア:1)
better VLOOKUP() としては
どうやら INDEX() と MATCH() を組み合わせるのが
一般的に知られているらしい。
Re: (スコア:0)
どうやら INDEX() と MATCH() を組み合わせるのが
いろいろ組み合わせるとネスト限界いっちゃって
SWICH()も使いたいけどEXCELのバージョンが混在する組織だと非対応の場合もあって
仕方なくODFで保存して別途入れてあるLibreOfficeで開かせる設定にする
までが逸般的に知られているらしい。
縦(V)横(H)に続く、斜め(X)検索の登場 (スコア:0)
日本の芸術的なネ申エクセルで使われれるようになるには、100年くらいかかりそう。
人が問題なんじゃない、環境が問題なんだ (スコア:0)
利用する人が、(事務作業と並行して)Excelの新機能を覚える暇がない以前に、
端末にインストールされているOfficeのバージョンが低くて利用したくてもできない
とかもあると思います。
新しいバージョンがインストールされていないのは、互換性の問題(というより、そのチェックのコスト)とか、
ライセンスの調達の問題とか、端末が壊れない&Officeの保証期間内でアップグレードする必要性が用意できない等
原因はいろいろ考えれると思いますが、これらも芸術性の一言で済むのでしょうか?
Re:人が問題なんじゃない、環境が問題なんだ (スコア:1)
家のPCはOffice365でExcel2019相当のハズなので、スピルを試してみたらその時は使えなかった。今試してみたら使えたのいつのまにか機能が追加されたらしい。
会社のPCでExcel2019が使えるようになるのはまだ大分先。その頃にはXlookupは利用できるようになっているのだろうか?Office365でないと駄目なのか?
Re: (スコア:0)
さっそくXLOOKUPでセルの色を変える神アイディア思いついちゃったぞー
Re: (スコア:0)
無理に会話に入った感じ
Re: (スコア:0)
ロLOOKUPにすればよかった?
関連はわからないが (スコア:0)
3ヶ月ほど前にフィードバックでリクエストした者としては嬉しい。
でもリクエストしたのは他にも沢山あるんだよね。
変数機能とか色々
Re: (スコア:0)
# 今日は疲れているみたいだ
Re: (スコア:0)
エクセルには隠匿変数もといセルというものがあります。
セルに名前をつければまさに変数ライクに使えます。
Re: (スコア:0)
セルへの書き込みは時間がかかるのでそのテクニックを多用すると激重になるのと流用の際にセルの未使用を意識しなきゃならないので
Re: (スコア:0)
方眼紙につかえないようにリクエストしてんだよな当然
Re: (スコア:0)
デフォルトのセル幅を方眼紙になるようにリクエストしたんだろ
結局つきつめるとプログラムになる (スコア:0)
結局この手のプログラム機能の拡充を求めていくと、
「VBAでよくね?」ってなってくる
いい加減、VBAをVB6からバージョン上げてくれませんかね
Re: (スコア:0)
VBAに求めるべきはデバッグの改善でしょう。
エラーが指しているポイントが本質じゃなかったり、Officeソフトが簡単に落ちてしまう問題はVBAを習い始める人達にとって大きな障害。
Re: (スコア:0)
またArray()でエラーが出る [security.srad.jp]からやめてくれ~
ていうかWin7の端末にまだ修正が降って来ないんだが…
Re: (スコア:0)
Array()は代替を用意して自分が作ったマクロは全て置き換えた。
EmptyArray()、EmptyArrayInteger()、EmptyArrayLong()といった物を用意して
Variant以外も再初期化を統一的な記述に出来るようにして。
中身は
Function EmptyArrayDouble()
Dim v() As Double
EmptyArrayDouble = v
End Function
とするだけだから大して手間じゃない。
Re: (スコア:0)
更につきつめると、社内でExcelを禁止したくなってきます。
Re: (スコア:0)
>いい加減、VBAをVB6からバージョン上げてくれませんかね
確かに…古いのと新しいのが変に混ざりすぎ。
ユーザーはそれだけでも混乱するんだよなぁ。
Re: (スコア:0)
VBA7のこと?それともVB.NET?
前者はバージョンアップ済みだし後者ならVSTOがある。