Google apps script コード保管 セル比較 株価比較
グーグルスプレッドシートのスクリプトの保管、忘れてしまうのでここに記載
用途は行に複数の株価「株価、終値」が並んでいて横列交互に株価を比較し左側が古く右に行くほど最近の株価が並んでいて左側より右側の株価が高ければセルの色を変えると言うスクリプト
注意 株価が記載のセルは連続して記載される必要はなく幾つも間を開けても良い。ただし1行は同じであること1銘柄1行、セルの見出しは共通同じ「株価、終値」(スクリプトで文字は変更すればよいだけ)であること。株価は半角数字。シート名を記載。
実際のシートの画面(最新の株価が前回株価より低いため色は変化していない)
コードは以下
function myFunction() {
//株価比較をしてセルの色を変更する2024/03/29
//10行目に記載の「株価、終値」の列の株価と次に記載の「株価、終値」の株価とを比較する
//行列位置ににかかわらず「株価、終値」の列を探すから、どこにあってもよい。
let ss = SpreadsheetApp.getActive(); // このスプレッドシートファイルの
let mainName="2024年春号3月18日";//四季報テーマを記載したシート名
let values;// 記入されている値を読み込む
//シート名を指定して
let sheet = ss.getSheetByName(mainName);//let sheet = ss.getActiveSheet(); // このシートに
if(sheet){
//ari
// シートがある場合の処理
Logger.log("sheet exist");
values = sheet.getDataRange().getValues(); // 記入されている値を読み込む
}else{
//non
Logger.log("file not . check sheet name");
}
//行でループして、列をループする
let colCount=0;
//株価、終値の列を記録する配列
let arrayOwarineRow=[];
let iCol;//株価、終値の行番号を取得
let iExitBreak=0;//breakフラグ
for(let i=0;i<values.length;i++){
//Logger.log(values[i][1]);//2列目が取得できる
//H列は7番目(0から数える)、期待度(◯、バツ)は9番目
//break;で抜ける
//Logger.log("列数:"+values[i].length);
for(let m=0;m<values[i].length;m++){
//列
if(values[i][m]=="株価、終値"){
Logger.log("[株価、終値]が見つかりました"+m);
iCol=i;
//株価、終値の列番号を記録する配列にいれる arrayOwarineRow=[];
arrayOwarineRow.push(m);
iExitBreak=1;
}
}//for end
if (iExitBreak==1){
//[株価、終値]が見つかりました。ループから抜ける
Logger.log("break");
break;
}
//株価、終値の見出し位置は1行なので、発見されればそれでループを抜ける
//break;
}//for end
Logger.log("行番号"+iCol);//(iCol+1)が最初1番目から数えた行。つまり0から数えた行は9で1からは10になる。
Logger.log("株価、終値の列の数:"+arrayOwarineRow.length);
//小さい列と次の列とを比較、さらに次の列とその次の列とを比較していく2024/03/29
// arrayOwarineRow を使って別のループで比較処理を行う。
/**
*
* 行番号と列番号がわかったので、行番号から2行目から株価が存在して、列番号で比較する。2024/03/29
* 株価、終値は同じ行に存在すれば、連続で列が連なって記載される必要はなく、飛び飛びでもOK。
* 「株価、終値」という文字列を探しているから、いくつ空いてもいくつ株価列があっても後日追加しても処理できる。
*/
let iRetsu;//列番号を取得
let iRetsuNext;
for(let i=(iCol+2);i < values.length; i++){
for(let n=0; n < arrayOwarineRow.length; n++){
if(n+1 < arrayOwarineRow.length){
iRetsu = arrayOwarineRow[n];
iRetsuNext = arrayOwarineRow[n+1];//next row
//次の列が空欄ならなにもしない
if(values[i][iRetsuNext]!=""){
if(values[i][iRetsu] < values[i][iRetsuNext]){
//株価上昇
Logger.log("株価上昇"+values[i][iRetsu]+"<"+values[i][iRetsuNext]);
sheet.getRange(i+1,iRetsuNext+1).setBackground("#fffacd");//akarui daidai
}//if end
}//if end
}//if end
}//small for end
}//big for end
}