実現したいこと
- GASを使ってcountifs関数と同じ動作をさせたい
- 「シートA」から複数条件に当てはまるデータ数をカウントアップし、「シートB」の特定セルに記載したい
- その条件は「シートB」に記載してある日時やキャンペーン名(文字列)と一致するデータを「シートA」から抽出し該当データ数をカウントする
前提
GASでレポート作成の自動化を行いたく、countifs関数のような動作をするGASを実装させたいのですが
エラーが発生してしまいました。
発生している問題・エラーメッセージ
Exception: パラメータ(String)が SpreadsheetApp.Sheet.getDataRange のメソッドのシグネチャと一致しません。
該当のソースコード
1function GenerateDailyOfferReport() { 2var sheetA = SpreadsheetApp.getActive().getSheetByName("シートA").getDataRange().getValues(); 3var sheetB_Date = SpreadsheetApp.getActive().getSheetByName("シートB").getRange("A3:A33").getValues(); 4var sheetB_Campaign = SpreadsheetApp.getActive().getSheetByName("シートB").getRange("C1").getValues(); 5var sheetB_Offer = SpreadsheetApp.getActive().getSheetByName("シートB").getRange("B2:Z2").getValues(); 6 7 for(var i = 1; i < sheetA.length; i++) { 8 var date = sheetA[i][2]; 9 var status = sheetA[i][3]; 10 var campaign = sheetA[i][16]; 11 var offer = sheetA[i][9]; 12 13 if (date == sheetB_Date && status == 900 && campaign == sheetB_Campaign && offer == sheetB_Offer){ 14 var data = SpreadsheetApp.getActive().getSheetByName("シートB").getRange(i +2, 1).setValue(); 15 16 } 17 } 18}
参考キャプチャ
試したこと
for文やif文の条件を何度か修正しているのですが、行き詰まってしまい
ヒントなど頂けたら嬉しいです
補足情報(FW/ツールのバージョンなど)
Google App Script
とりあえず現状の問題としては「getDataRange()」はデータがあるすべての範囲を取得します。
範囲を指定する場合は「getRange()」を使って「getRange("A3:A33")」のようにします。
ご指摘ありがとうございます。
頂いた内容で修正したらエラーは出なくなったのですが、Valueがアウトプットされない状態です。
カウントアップした数字を出すためのヒントがあれば、いただけると嬉しいです。
すみません、実現したい動作がうまく理解出来ていないです。模擬的なシートのスクリーンショット等あると助かります。
とりあえず問題がありそうなのはif文で「sheetB_Date」等は2次元配列対なので「date」等の値とは=にならないと思います。
配列内に指定の要素があるのか判定したいのなら「includes」を使うことになるとは思います。
ありがとうございます。
参考キャプチャを添付しました。「元データ」から該当するデータを抽出して「抽出先」に該当するデータの数を記載していくイメージです。
どうぞよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー