関数Switchの使い方について

こんな表がある。

┌--------┬----------------┬-----------------------┐
| あ ▼| number入力  |   ルックアップ   |
├--------┬------┬--------┬-----------------------┐
| あ  |   | い  |    | う |   |
├--------┬------┬--------┬--------┬------┬-----┤
| number| name| number| name| number| name|
| number| name| number| name| number| name|
| number| name| number| name| number| name|
| number| name| number| name| number| name|
| number| name| number| name| number| name|
└---------------------------------------------------┘

A1のプルダウンで「あ」を選んだら「あ」のリスト(A:B)
「い」を選んだら「い」のリスト(C:D)から、B1に入力した値をLookUPしてC1にピックアップしたい。

そこでC1に次のような関数を入力したが、fxボタンを押して途中経過を見るとLookupされているのに、N/Aと表示されてしまう。
何を間違っているのか教えてください。

C1入力値:=SWITCH(A1,A2,VLOOKUP(A2,$A$4:$B$60,2,0),C2,VLOOKUP(A2,$C$4:$D$60,2,0),E2,VLOOKUP(A2,$E$4:$F$60,2,0))

書式は一致しており、余計な空白が入ったりもしていません。
なおこれをコピーしてGoogleスプレッドに貼り付けると動作します。
Switchに複数のリストを使うのはできないのでしょうか。

うひゃあ汚い(><)
お手数ですがメモ帳にでも貼り付けてください…(滝汗

VLOOKUPの第一引数は全てB1では?

1 Like

あ、ごめんなさい。この表だとB2です。(書き直し忘れた…)

すいませーん。ここのモデレーターですー。表を修正しようとしたら、ちょっとヘンになってしまいました。>< ごめんなさい…

自信がない独り言。
LibreOfficeにおける、VLOOKUPの評価のタイミングはいつだ?

IF関数同様SWITCH関数は短絡評価をするのか?それとも、引数を全て評価した後、関数の計算を通常通り行う処理なのか?

https://opengrok.libreoffice.org/xref/core/sc/source/core/tool/interpr8.cxx?r=f853ec31#1955

最初のVLOOKUP関数でN/Aが出てそれをPUSHした場合、これはエラーを発生させないのか?

https://opengrok.libreoffice.org/xref/core/sc/source/core/tool/interpr4.cxx?r=5bcdbf03#1922

見辛いですが,当面は入れ子のIFを使ってください。

IF関数同様SWITCH関数は短絡評価をするのか?

しないようです。(tdf#111675)

oh…そうなんですね。
IFか~これはメモ帳が火を噴くやーつ(笑)(テストファイルは2パターンですが実際は5パターン)

ありがとうございました。
バグ報告もありがとうございます。

修正されるかもしれない

バグ関連

available in 7.4.0
Pending review for 7-3
https://bugs.documentfoundation.org/show_bug.cgi?id=111675#c24

SWITCH function shortcuts to #N/A

1 Like

VLOOKUP関数で該当がない場合には、#N/Aの値が返ってきます。
SWITCH関数では、前から値を評価し、評価する値が#N/Aの場合は、即#N/Aを返して終了してしまいます。
なので、VLOOKUP関数でエラーがでた時にエラー処理する手順を追加して「""」空白を出力するようにしてはいかがでしょうか。

例)
=SWITCH(A1,C2,IFERROR(VLOOKUP(C1,$C$3:$D$39,2,0),""),A2,IFERROR(VLOOKUP(C1,$A$3:$B$39,2,0),""),E2,IFERROR(VLOOKUP(C1,$E$3:$F$39,2,0),""))

(修正したもの)

VLOOKUP単体だと正しく動作しますか?
ファイルを複製して,C1を
=SWITCH(A1,A2,VLOOKUP(A2,$A$4:$B$60,2,0),C2,VLOOKUP(A2,$C$4:$D$60,2,0),E2,VLOOKUP(A2,$E$4:$F$60,2,0))
のように編集したら期待した結果になるでしょうか?
それが上手くいったら
=SWITCH(A1,A2,VLOOKUP(A2,$A$4:$B$60,2,0),C2,VLOOKUP(A2,$C$4:$D$60,2,0),E2,VLOOKUP(A2,$E$4:$F$60,2,0))
=SWITCH(A1,A2,VLOOKUP(A2,$A$4:$B$60,2,0),C2,VLOOKUP(A2,$C$4:$D$60,2,0),E2,VLOOKUP(A2,$E$4:$F$60,2,0))
のように元の状態に近付けて,どこで問題が起こるか確かめてみてください。

いえいえー
一応テキストエディタでは「なんとなくそれっぽい」表になるようにしてました。
お手数をおかけします。

SWITCHをのぞいた場合
エラーになりません

>SWITCH一段階だけの場合
エラーになりません
>2段階にする
エラーです

というか、何度もやっていたら、
ABからのピックアップは出来て他がダメとか。
じゃあといってリストをABとCDを入れ替えたらCDだけ動くとか。
なんだかおかしなことに・・・。
テスト用ファイルをつけてみます・・・おま環?
無題 1.ods
スクショはこちら・・・ss.jpg

未検証

https://gerrit.libreoffice.org/c/core/+/92345

Switchに複数のリストを使うのはできないのでしょうか。

サンプルとして提示された表では、SWITCH関数を使わず簡単な数式で目的の検索結果を得ることができます

A B C D E F
1 TEST1 06U かおりかざり
2 TEST1 TEST2 TEST3
3 988 ジュリア 247 ポルコ F0002 ブラック
4 001 プリンセスミチコ 06w ロッソ F0008 ネイビー
5 06U かおりかざり 100 さん F0009 ホワイト
6 0MU クイーンエリザベス 10d とんぼ F0013 ライトブルー
[D1] =IFERROR(VLOOKUP(C1,OFFSET(A3:B39,0,MATCH(A1,2:2,0)-1),2,0),"該当なし")

TEST4,TEST5… 項目が増えても平気

Ask_47726_Switch関数Bug.ods (10.9 KB)

2 Likes