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

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

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

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

Q&A

解決済

1回答

1000閲覧

GAS 特定行をそのまま別シートに行ごとコピペしたいがエラーになってしまう

ngngm

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2021/04/20 04:45

編集2021/04/21 02:23
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('元シート'); var lastrow = sheet.getDataRange().getLastRow(); var mainsheet = sheet.getRange(1, 1, lastrow,49).getValues(); var sarchrow=0; var copyrow=1; var writesheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('書き出し用シート'); for(sarchrow=0;sarchrow<lastrow;sarchrow++){  mainsheet.getRange('A'+sarchrow+':AV'+sarchrow).copyTo(writesheet2.getRange(copyrow,1),{contentsOnly:true});  copyrow=copyrow+1; }

上記コード(省略箇所あり)にて、
```
mainsheet.getRange('A'+sarchrow+':AV'+sarchrow).copyTo(writesheet2.getRange(copyrow,1),{contentsOnly:true});

この行で【TypeError: mainsheet.getRange is not a function】とエラーが出てしまい進めることが出来ません。 やりたいことは、 for文でコピー元シートの1行目から最終行までを検索し、if文で判定を通過した場合に該当行の情報全てを別シートに1行目から順々に足していく、ということとなっています。 コピー元シートには49列までデータが入っております。 GAS初心者なりに色々調べ、代用として  ```  var copyValue = mainsheet.getRange('A'+sarchrow+':AV'+sarchrow).getValues(); ←ここで止まる  writesheet2.getRange('A'+copyrow+':AV'+copyrow).setValues(copyValue);

なども試したのですが同様の結果で止まってしまい、手詰まりとなってしまったので質問させていただきました。

おそらく配列の扱い間違い等で初心者の質問となってしまう気がするのですが、何が問題なのかが分からない状態となってしまっているのでお力を貸していただけないでしょうか。
宜しくお願い致します。

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

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

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

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

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

sawa

2021/04/20 08:46

コードがごちゃごちゃになってる印象です。 具体的なやりたい事も記載いただくと良いかと。(コピー元、貼付け先の、シート名、範囲)
sawa

2021/04/20 11:07

追記を確認しました。やりたいこともなんとなく理解できました。ただ、"if文で判定を通過した"の部分はコードからはよみとれ無いです。もう少し具体的に書くか、ifを含めたコードがあるなら記入を。 あと、コードはcodeボタン押してそのなかに記載した方が良いです
ngngm

2021/04/21 01:04

codeボタンの存在を知らせていただきありがとうございます。 また、今回の質問の内容自体はエラーをどのようにすれば回避できるかを知りたいと思っております。 出先となってしまいif文の条件がどのようになっていたか少し覚えてないのですが、 内容は3列目の日にちが入っているセルをtodayと比較して数日以内であれば通す。 というような今回の質問意図には関係ないものであったため省いております。この行ではエラーは出ておりません。
sawa

2021/04/21 02:43

なるほど承知しました。エラー箇所についての回答入れときます
guest

回答1

0

ベストアンサー

mainsheet は、var mainsheet = sheet.getRange(1, 1, lastrow,49).getValues();とされてるので、元シートのA1から49列最終行までのセルの値を取得した二次元配列です。
getRange はシートに対して使うメソッドなので、

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('元シート');

でコピー元?のシートを宣言してますから、

var copyValue = sheet.getRange( ・・・ としてみてはどうでしょうか。

投稿2021/04/21 02:47

sawa

総合スコア3002

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

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

ngngm

2021/04/21 05:10

まさにおっしゃる通りで、無事解決いたしました。 こんな初歩的なミスで躓いていたとはお恥ずかしい限りでしたが、ご丁寧に対応していただき本当にありがとうございました! おかげ様でこれからも楽しみながらGASを勉強できそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問