🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

1514閲覧

スプレッドシートにてプルダウンメニューの選択項目によって分岐させ別のプルダウンメニューを連動させる方法を教えて下さい。

bassmyryo

総合スコア13

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2019/11/08 05:12

編集2019/11/08 09:40

実現したいこと

1.プルダウンメニューで地方を選択
2.地方に応じて都道府県が分岐してプルダウンメニューが表示される

##参考にしたサイト
参考リンク

##問題点
上記サイトで1.2まではクリアできるのですが
都道府県の各セルでデータの入力規則を設定する必要があり、行数が多いので対応しきれません。

##参考画像
イメージ説明

このように"近畿"と選んだ際に

イメージ説明

こちらのシートから近畿に対応するものだけを表示するという形にしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macaron_xxx

2019/11/11 07:03

GASを使えばできるんですが、ちょっとコード書く手が現状ないです。 しばらくしたら回答しますね。
bassmyryo

2019/11/13 02:42

ありがとうございます! お待ちしています。
guest

回答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
macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bassmyryo

2019/11/25 06:19

すいません。 function getPref() { const PREF_SHEET = 'シート2'; const PREF_RANGE = 'D2:M12'; こちらに参照先を指定して function checkTarget(e) { const TARGET_SHEET = 'シート1'; const TARGET_COLUMN = 9; こちらに出力先を指定すればいいんでしょうか?
macaron_xxx

2019/11/25 06:30

そうですね。 getPrefは2枚目の画像で言うH2:Q12ですかね。 checkTargetのTARGET_COLUMNは1枚目の画像の地域の列番号ですね。 地域の入力規則はコピーでいけますよね?!
bassmyryo

2019/11/25 08:20

スクリプトを試してみましたが下記のエラーが出ます。 かなりいいところまでキている感じです。ありがとうございます。 TypeError: undefined からプロパティ「range」を読み取れません。(行 19、ファイル「コード」)
macaron_xxx

2019/11/25 08:28

スクリプトの実行してませんよね? 実際にスプレッドシートを編集して試してくださいね。
bassmyryo

2019/11/25 08:48

あ、実行はしないんですね。 できました! 誠にありがとうございます!
guest

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
takaD

総合スコア315

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bassmyryo

2019/11/08 09:43

回答ありがとうございます。 参考URLを拝見しましたがQuery関数の場合だと 地域で"近畿”と指定して 都道府県名に"近畿 大阪","近畿 京都","近畿 滋賀" のようになっていたら呼び出せるという理屈はわかるのですが "近畿"と”大阪”,"京都","滋賀"を紐付ける方法がわからないです・・・ 実現したい状況が伝わりづらかったということで元の投稿に画像を入れて追記してみましたのでアドバイスいただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問