質問: [やりたいこと] 表題のようなボタンが同一シート上に複数配置してあり、同一のスクリプトを割り当てています。 いずれかのボタンをクリックした際、どのボタンをクリックしたのかということをGASにて捕捉することが目的です。 (どの行に配置されたボタンであるかがわかれば良いです) [問題] シート上に配置されたボタンはクリックしてもアクティブなオブジェクトとして認識されないため、getActiveRange()などでは捕捉されない。 そもそも配置の場合、Rangeオブジェクトとして扱えない。 ボタンへのスクリプト割り当て時にパラメーターが設定できない。 1. 代替案としてセレクトメニューによるonEditイベントにて実行、ということも検討しましたが、工程内に外部参照及びメール送信処理が含まれるため却下。 2. もちろん、ボタン一つ一つに違うスクリプトを埋め込むという方法もありますが、100近くあるボタンに対して設定するのはナンセンスであるため却下。 ボタンへのスクリプト割り当て時にパラメーターも設定できれば解決できることなのですが、なにか良い解決策がありましたらご教示ください。 ※目的が達成できるのなら「ボタン」にこだわりません。要するに、トリガーの位置情報を捕捉できれば結構です。
回答: 現時点、現在バージョンという前提での結論となりますが、「やりたいこと」を実現するには、**無駄が多すぎるコーディングをのぞき、不可能**という結論に至りました。 **無駄が多すぎるコーディング**というのは、質問時の例に上げた2つ目の項目となります。 また、無駄の多さや効率・メンテナンス性の悪さと合わせ、事前にボタンの配置位置について明確なルールを策定しておく必要がある、という問題点もございます。 しかしながら、この方法しかないだろう、とも思っています。 以下、サンプルコードです。 ``` /** 前提条件: ボタンは6列目(F列)固定、奇数行に配置する */ /** メイン関数 */ function getActiveButton(id){ var Row = id*2-1,Col = 6; /** メイン処理 */ } /** ボタンへの設置用関数 */ function submit001(){ getActiveButton(1); } function submit002(){ getActiveButton(2); } function submit003(){ getActiveButton(3); } //以下省略 ``` ※残念ながら納期のあることですので、案件自体は代替案で解決しましたが、なにか良い方法がございましたら、引き続きコメント頂ければ幸いです。