質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

2回答

11810閲覧

e.range.getColumn();を使うと、rangeが定義されていないとエラーが出てしまう

toraburu2021

総合スコア0

Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

1クリップ

投稿2021/01/04 13:16

編集2021/01/04 23:58

前提・実現したいこと

GASで特定のセルに、特定の文言が入った場合に通知メールを出したいと考えています。
具体的な利用シーン:
クーポン発行が承認されたとき、クーポン発行処理を行ってほしいという旨のメールを担当者に送りたい

e.range.getColumn();を使って、e.rangeで取得したアクティブセルが何列目かを取得したいと考えていますがエラーが出ます。

アクティブセルを取得するときのrangeの定義方法についてどうしてもわからず教えていただきたいです。
よろしくお願いします。

発生している問題・エラーメッセージ

TypeError: Cannot read property 'range' of undefined

下記のソースコードの中の、
var actCol = e.range.getColumn(); に対してエラーがでて前に進めません

該当のソースコード

function sendEmail_2(e){ /* シートの操作 */ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('フォームの回答 3'); /* 各値に対しての場合わけ */ var actCol = e.range.getColumn();//スプレッドシートにあるセルの列数を取得する→今回はe.rangeで取得したアクティブセルが何列目かを取得する var targetValue = sheet.getActiveCell().getValue();//getValueメソッドでセルの値を取得する=sheetオブジェクトのアクティブセルの値をtargetValueとする if (actCol !== 46 || //(アクティブなセルが)AT列=項目名:*** でない場合 または targetValue !== 'チェック完了' ) // AT列の値が 'チェック完了' でない場合 return; //この場合処理が終わり /* メールを作成し、送信する */ var actRow = e.range.getRow();//アクティブセルの行数を取得する→アクティブセルがある行を探す var values = sheet.getRange(actRow, 1, 1, 46).getValues()[0];// 該当行の A (1) - AT (46) 列目を 1 次元配列として取得 // Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数) 今回はA1=1,1、からactRow,46(アクティブセルがある行のAT列=46列目)までを範囲として取りたい // Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数).getValues()すると、その値を取り出せる if (values [45] === '') return;//AT列が空白だと処理をしない var opss = SpreadsheetApp.getActiveSpreadsheet(); var opsheet = opss.getSheetByName("宛先シート"); var recipient =opsheet.getRange(6,3).getValue(); //宛先シート上のC6セルにあて先となるアドレスをセットしておく。 var subject = '<クーポン付与依頼>'+values[39]+'_'+Utilities.formatDate(new Date(), "JST", "yyyyMMdd"); var body ='クーポン付与処理をお願いいたします。\n\n'; body +='申請番号:'+values [39]+'\n'; body +=ss.getUrl(); GmailApp.sendEmail(recipient, subject, body); }

試したこと

rangeを定義しようと考えましたが、アクティブセルを取得するためにrangeどのように定義していいか理解できませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2021/01/04 14:17

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
toraburu2021

2021/01/04 23:59

ご指摘ありがとうございます。修正しました。
papinianus

2021/01/13 14:12

こちら、関数をどうやって実行していますか? トリガーを設定しているのであれば、どのようなトリガーでしょうか。 > eは引数として利用している(つもり)ので、 具体的に↑の説明をお願いしたい趣旨です。
guest

回答2

0

rangeは、ユーザーがシートを操作しているときしか使えないため、
スクリプトの編集画面で実行するとエラーになるようです。

この罠に私も引っかかりました。
私は、下記をみて理解できました。
https://support.google.com/docs/thread/114816490/typeerror-cannot-read-property-range-of-undefined?hl=en

ググって調べてる途中に、この未回答の投稿が検索結果に出てきました。
大分前の投稿でしたが、未解決でしたので回答させていただきました。

投稿2022/03/28 03:19

firstlast

総合スコア138

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

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

0

TypeError: Cannot read property 'range' of undefined

rangeというプロパティがない、というエラーなので、まずはeがナニモノなのかを確認してみよう

#sendEmail_2を呼び出す側のコードがないのでなんとも

投稿2021/01/04 14:22

y_waiwai

総合スコア87747

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

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

toraburu2021

2021/01/07 04:31

ご連絡が遅れており失礼いたしました。 eは引数として利用している(つもり)ので、 これ以降のコードともあわせて確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問