前提・実現したいこと
SEOツールからCSVでエクスポートしたキーワード順位データを、
スプレッドシートに日毎で溜めていき、
データポータルのデータソースとして利用しようと考えています。
毎日の記録作業ですので、手順を簡略化したいと思い
GASでCSVデータを整形し日毎にワンボタンで記録する仕組みを作れないかと思い、
色々と調べて以下のコードを作成しました。
■スプレッドシートの構造
「入力」と「出力」のシートがあります。
➀「入力」シートはツールからエクスポートしたCSVを取り込むシートです。
※1行目は項目名
A,B,C,D列にそれぞれ
A2~Axxx:キーワード
B2~Bxxx:順位
C2~Cxxx:URL
D2:記録日
が入ります。
毎日、「入力」シートのデータをクリアします。
当日のデータをCSVからA~C(複数行あり)までコピペし、D2に記録日を入力します。
⓶「入力」シートから記録する
スクリプトを呼び出すボタンを押すと、本相談のコードが呼び出されます。
⓷「出力」シートには、
A列:キーワード
B列:日付
C列:順位
が「入力」に入った分だけ記録されます。
※日付けD2の1つしかデータがないので、繰り返し処理の中でコピーされる想定です。
翌日は、前日の記録の末尾の行から追加されていく想定です。
惜しいところまで書けたと思いましたが…
繰り返し処理内でエラーになってしまいます。
非エンジニアの為、JavaScriptもGASも基本的な部分が理解できていなかったら申し訳ありません。
助言いただけると嬉しいです。
Java Script Google Apps Script Google スプレッドシート
発生している問題・エラーメッセージ
Exception: 範囲の開始行の値が小さすぎます。
該当のソースコード
JavaScript
1function getList() { 2// 入力と出力のシートを取得 3var ss_copyFrom = SpreadsheetApp.getActiveSpreadsheet(); 4var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet(); 5var sheet_copyFrom = ss_copyFrom.getSheetByName('入力'); 6var sheet_copyTo = ss_copyTo.getSheetByName('出力'); 7 8var targetRowInput = sheet_copyFrom.getLastRow()+1; 9var targetRowOutput = sheet_copyTo.getLastRow()+1; 10 11// キーワードがあるだけ繰り返し転記 12var keyWord = sheet_copyFrom.getRange('A2'+':A'+targetRowInput).getValues(); 13var keyRank = sheet_copyFrom.getRange('B2'+':B'+targetRowInput).getValues(); 14var keyWordValue = {}; 15var keyRankValue = {}; 16var key = "" 17var rank = 0 18var copyDate = sheet_copyFrom.getRange('D2').getValues(); 19var count = keyWord.length; 20 21 for(var i=0; i < count; i++) 22 { 23 keyWordValue[i] = keyWord[i]; 24 keyRankValue[i] = keyRank[i]; 25 key = keyWordValue[i]; 26 rank = keyRankValue[i]; 27 sheet_copyTo.getRange(i,1).setValue(key); 28 sheet_copyTo.getRange(i,2).setValue(copyDate); 29 sheet_copyTo.getRange(i,3).setValue(rank); 30 } 31}
試したこと
sheet_copyTo.getRange(i,1).setValue(key); sheet_copyTo.getRange(i,2).setValue(copyDate); sheet_copyTo.getRange(i,3).setValue(rank);
↑この部分を
sheet_copyTo.getRange(targetRowOutput+i,1).setValue(key); sheet_copyTo.getRange(targetRowOutput+i,2).setValue(copyDate); sheet_copyTo.getRange(targetRowOutput+i,3).setValue(rank);
↑このような書き方にすると、キーワードと順位は想定通りに記録されましたが、
B列の日付だけが、なぜかキーワードと順位より行数が5つほど多く記録されます。
おそらく、targetRowOutput+iの3連続で何か増えてしまっているんだと思うのですが…
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/09 03:44
2020/06/10 05:37 編集