実現したいこと
1.プルダウンメニューで地方を選択
2.地方に応じて都道府県が分岐してプルダウンメニューが表示される
##参考にしたサイト
参考リンク
##問題点
上記サイトで1.2まではクリアできるのですが
都道府県の各セルでデータの入力規則を設定する必要があり、行数が多いので対応しきれません。
このように"近畿"と選んだ際に
こちらのシートから近畿に対応するものだけを表示するという形にしたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/13 02:42
回答2件
0
ベストアンサー
定数できっているところは適当にどうぞ。
JavaScript
1function getPref() { 2 const PREF_SHEET = 'シート2'; 3 const PREF_RANGE = 'D2:M12'; 4 5 var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(PREF_SHEET).getRange(PREF_RANGE).getValues(); 6 var pref = {}; 7 data.forEach(function(row) { 8 pref[row.shift()] = row.filter(function(e) { 9 return e !== ''; 10 });; 11 }); 12 return pref; 13} 14 15function checkTarget(e) { 16 const TARGET_SHEET = 'シート1'; 17 const TARGET_COLUMN = 9; 18 19 if(e.range.getSheet().getName() !== TARGET_SHEET) return false; 20 if(e.range.getColumn() !== TARGET_COLUMN) return false; 21 return true; 22} 23 24function onEdit(e) { 25 if (!checkTarget(e)) return; 26 var pref = getPref(); 27 if(e.value === undefined) { 28 e.range.offset(0, 1).clear().clearDataValidations(); 29 } else { 30 var rule = SpreadsheetApp.newDataValidation() 31 .requireValueInList(pref[e.value]) 32 .setAllowInvalid(false) 33 .build(); 34 e.range.offset(0, 1).clear().setDataValidation(rule); 35 } 36}
投稿2019/11/25 04:56
編集2019/11/26 00:08総合スコア3191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/25 06:19
2019/11/25 06:30
2019/11/25 08:20
2019/11/25 08:28
2019/11/25 08:48
0
大本のデータやそのあとどうなりたいのかがいまいちイメージができなくて申し訳ありませんが、
おそらくやろうとしていることはQuery関数を使えば対応できるんじゃないでしょうか?
【QUERY関数】where句と比較演算子を使って単一条件に一致した行を抽出する
これを使って、
Query文に "where 対象としている行 = プルダウンで入力するセル"
で条件を絞っていけば出せそうなきはします。
Query文の中にセルを選ぶ方法は
A CONTAINS '"&B7&"'
等と入力すればいけます。
とりあえずこういう方法もあるということで回答させていただきます。
一応追記しますが、
このクエリ文の結果を、プルダウン対象にする(質問にかいてあるURLのような連動シートの様に使う)ことで、
何千件とデータがあったとしても、リストを絞る事もできます。
追記
データ連携用のシートに、
=index(H2:Q,match("最初のプルダウンするセル",H2:H,0))
これで、1行にリストアップできますので、
それを二回目のプルダウンリストに 連携シート!:1:1
で取れます。
もし縦横を入れ替えたくて、A:A のような表記にしたい場合は
=TRANSPOSE(1:1)で縦横が入れ替えられたとおもいます。
追記
よくよく見てみたら、データ入力規則を対象セルにいちいち設定するのが大変だから、
何か一気にやる方法はあるのかって話だったのですね・・・w
申し訳ありませんでした。私では解決できないですね。
一応参考サイトにあるVlookupの場合は横列もいちいち設定しないといけないところ、
Indexを使えば1セル設定すれば横は勝手に表示されたりはしますが、
プルダウンのセル指定は自動ではできないのでダメでしょうね。。
一応ほかの記事もみてみましたが、言ってること質問者様の参考サイトと同じですね
スプレッドシートでプルダウン連動!
カスタム関数ではリスト化できませんですし、
自分のほうで最初にいっていたQuery関数を用いても結果は変わらないです。
諦めて範囲を打ち込んでいくか、私の知らない事を知っている回答者様をお待ちください。
投稿2019/11/08 07:21
編集2019/11/10 05:15総合スコア315
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。