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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Q&A

解決済

3回答

16659閲覧

GASでのエラ〜メッセージ「パラメータ()が SpreadsheetApp.Sheet.getRange のメソッドのシグネチャと一致しません。」の解決策

shio3

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2020/11/20 12:28

Googleフォームの回答スプレッドシートで席予約システムを作っています。

初心者ながらあれこれ検索しながら作ってきたのですが、指定された座席の重複を調べる関数に以下のエラーが出てしまったので、どなたかお力添えをお願いします。

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

パラメータ()が SpreadsheetApp.Sheet.getRange のメソッドのシグネチャと一致しません

該当のソースコード

Google

1function seatReservation() { 2 3 //指定したスプレッドシートの読み込み(ID入力して、開いて、シートを指定) 4 var id = ''; 5 var spsheet = SpreadsheetApp.openById(id); 6 var sheet1 = spsheet.getSheets()[0]; 7 var sheet2 = spsheet.getSheets()[1]; 8 9 //各シートの最終行の取得 10 var sheet1_lastrow = sheet1.getLastRow(); 11 var sheet2_lastrow = sheet2.getLastRow(); 12 13 //直前に入力したレコードから席番号を取得 14 var nseat = sheet1.getRange(sheet1_lastrow, 7).getValue(); 15 16 //重複する席番号が入ってる行を検索 17 //findRow(対象シート,探したい値(席番号),検索対象の列)は下部で宣言 18 var rowPosition = findRow(sheet1,nseat, 7); 19 20} 21 22function findRow(sheet1,val,col){ 23 var dat = sheet1.getRange().getValue(); 24 for(var i=1;i<dat.length;i++){ 25 if(dat[i][col-1] === val){ 26 return i+1; 27 } 28 } 29 return 0; 30}

試したこと

とあるサイトを参照してvar spsheet = SpreadsheetApp.getActiveSpredsheet()と書き直してみましたがうまく行きませんでした。初心者なこともあり、どこをいじったら良いかわからず、正直お手上げ状態です…
どうにか動くようにできたらと思うのですが、解決策があれば、どうかよろしくお願いいたします。

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

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

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

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

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

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

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

guest

回答3

0

javascript

1const q305535 = () => { 2 const id = ''; 3 const book = SpreadsheetApp.openById(id); 4 const sheets = book.getSheets(); 5 const sheet1 = sheets[0].getDataRange().getValues(); 6 const needle = sheet1.slice(-1)[6]; 7 8 const isDuplicated = sheet1.map(e=> e[6]).includes(needle); 9}

id でシートを開いていますが、今見えている範囲のコードだと、コンテナバウンドスクリプトにして onEdit で処理したほうがいいように思います。

投稿2020/11/20 14:50

papinianus

総合スコア12705

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

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

shio3

2020/11/20 16:42

ありがとうございます!Googleフォームの送信をトリガーにしたい、と記載を忘れていました、申し訳ありません。それとも、その場合でもonEditが使えるのでしょうか?無知ですみません…
papinianus

2020/11/30 07:19

onFormSubmitのトリガーがありますね。
guest

0

ベストアンサー

パラメータ()が SpreadsheetApp.Sheet.getRange のメソッドのシグネチャと一致しません

これはパラメータなし(=())で呼び出せるSpreadsheetApp.Sheet.getRangeメソッドが存在しないためです。

findRowメソッド内で、

var dat = sheet1.getRange().getValue();

の様に、パラメータなしでgetRangeを呼び出しているので、ここでエラーになっています。

getRange(row, column)
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow,-column
※ 受け取る引数のパターンは他にもあるのでリンク先を確認してください。


データが入力されている範囲すべてが対象ならば、代わりにgetDataRangeを使ってください。

Sheet.getDataRange()
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getdatarange

投稿2020/11/20 13:17

draq

総合スコア2577

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

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

shio3

2020/11/20 16:43

ありがとうございます!教えていただいたページなど参考にして、とりあえずエラーが出ないようになりました!
guest

0

draqさん、ありがとうございます。
以下のようにしたところ、この部分ではエラーがなくなりました。

GoogleAppsScript

1 function findRow(sheet1,val,col){ 2 var id = ''; 3 var ss = SpreadsheetApp.openById(id); 4 var sheet1 = ss.getSheets()[0]; 5 6// This represents ALL the data 7var range = sheet1.getRange('G2:G'); 8var values = range.getValues(); 9 10 var dat = sheet1.getRange('G2:G').getValues(); 11 for(var i=1;i<dat.length;i++){ 12 if(dat[i][col-1] === val){ 13 return i+1; 14 } 15 } 16 return 0; 17}

投稿2020/11/20 16:43

編集2020/11/20 16:48
shio3

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問