前提・実現したいこと
初心者です。よろしくお願いします。
現在GASで1日1回統計をしていくスクリプトを作成しています。
長くなるかもしれませんがよろしくお願いします。
現在スプレッドシートである一定の人数を審査しています。
審査をする人は10人いて、毎日審査する人も変わります。
審査をした人は審査が合格か不合格か・名前・日付を書いていきます。
スプレッドシートでは
【合格可否 名前 日付】 3/26
合格 Aさん 3/26
不合格 Bさん 3/26
不合格 Aさん 3/26
といった風になっています。
不合格の人は合格になるまで何度でも確認する為、その度に名前と日付が更新されます。
次の日には
【合格可否 名前 日付】 3/27
合格 Aさん 3/26
不合格 Aさん 3/27
不合格 Bさん 3/27
といった風になります。
ここでGASでやりたい統計ですが、本日審査した人が合格にした数、不合格にした数を一日ごとに統計したいです。
COUNTIFSにすると=COUNTIFS(A:A,"合格",B:B,"ABCDEFGHIJさん(10人分)",C:C,TODAY())になると思います。
こちらをGASで一日一回10人分をループを使って当日合格不合格の数を統計してスプレッドシートに出力したいと考えています。
統計の方法はforとifを組み合わせた多重ループでの統計をしたいです。
一致した回数だけ予め入れておいた変数に+1をするというやり方で数を取りたいです。
まずA1:D3までの二次元配列を所得します。(変数p)
forを使いループ初期化式[i]を作ります。
その後Ifを使ってp[i][0]が合格であるかを調べます
その中にifを作りp[i][1]が【Aさん】であるかを調べます
更にその中にifを作りp[i][3が当日であるかを調べます
この3つのifがtureだった時に 予め作っておいた配列stsarry【?】に+1します。
問題はここからで上記の【】の部分、Aさんと予め作った配列にも配列を作り、for初期化式を埋め込みたいです。(多重ループ)
手順としては
1ループ目は
二次元配列p[i][1](配列の1番目の1番目)は合格であり、p[i][2]は【配列の1番目】さんであり、p[i][3は]当日である
true
↓
stsarry【配列の1番目】に+1
2ループ目
二次元配列p[i][1](配列の1番目の1番目)は合格であり、p[i][2]は【配列の2番目】さんであり、p[i][3]は当日である
true
↓
stsarry【配列の2番目】に+1
こういった感じでstsaryyにどんどん数値を入れていって最後に表に載せたいです。
以下のコードでは初期化式を何度か確認しましたがなぜか1から順に進まず飛び飛びで進みます。
どういった書き方をすれば上のようにうまくいくでしょうか。
また初期化式の変数がよくわからない数字になるのはこれはどういった仕組みなのでしょうか。教えていただければ幸いです。
またコードの書き方に関しても初心者なので}が見やすくなる方法なども教えていただけると助かります。
該当のソースコード
function myFunction() {
const ss1 = SpreadsheetApp.openById("");
const shrelay = ss1.getSheetByName('');
var p = shrelay.getRange(2,1,10,3).getValues();
const shmain = ss1.getSheetByName('集計表');
var o = ["Aさん","Bさん","Cさん","Dさん","Eさん","Fさん","Gさん","Hさん","Iさん","Jさん"]
var aa = bb = cc = ee = ff = gg = hh = ii = jj = kk = 0;
var stsarry = [aa,bb,cc,ee,ff,gg,hh,ii,jj,kk,ll,mm,nn,oo,pp,qq,rr,ss,tt]
for (var b = 0; b < 18; b++){
for (var i = 0; i < 35; i++){
if (p[i][1] == o[q]){
stsarry[q] = stsarry[q] + 1;
} } } } }
試したこと
ここに問題に対して試したことを記載してください。
あなたの回答
tips
プレビュー