前回は、指定したセルに記載されている日付から、曜日番号を取得し、更に曜日に変換し、隣のセルに記載。。。
まで行いました。
まだの方は、まずこちらから御覧ください。
今回は、『指定した列にある日付』から、各曜日番号を取得
⇒各曜日に変換
⇒それを横の列のセルに記載
までやってみます。
目次
今回の目標
⇒実行(Ctrl+R)。。。
下記の様な表示 ↓↓↓↓
実現のスクリプトと解説
下記をコンテナバインドスクリプトのスクリプトエディターにコピペして、
保存(Ctrl+S)
⇒スクリプトを実行(Ctrl+R)。。。
【前提】コンテナバインドスクリプトで作成しています。
//ファンクション名を「dayOfWeek4」にする(dayOfWeek4の部分は、何でも良いです)
function dayOfWeek4(){
//スプレッドシートの「アクティブなスプレッドシート全体」を取得し、それを「ss」に代入
var ss = SpreadsheetApp.getActiveSpreadsheet();
//「ss(アクティブなスプレッドシート全体)」の「アクティブなシートだけ」を「sheet」に代入
var sheet = ss.getActiveSheet();
//「sheet(アクティブなシート)」のコンテンツ最後行の位置を「lastRow」に代入
const lastRow = sheet.getLastRow();
//for文を使って、2行目から「lastRow(最終行の位置)」まで繰り返す処理を行う
for(let i = 2; i <= lastRow; i++) {
//「i」行目で4列目(D列)を取得し、activeCellに代入
var activeCell = sheet.getRange(i,4);
//曜日を表す文字列を持った配列を「allDayOfWeek」に代入)
var allDayOfWeek = ['日', '月', '火', '水', '木', '金', '土'];
//日付情報を扱うDateクラスを用いて「activeCell(A1のセル)」に記載されている日付を取得し、その日付から曜日(曜日番号)を取得し、その曜日(曜日番号)を「dayNum」に代入
var dayNum = new Date(activeCell.getValue()).getDay();
//「activeCell(A1のセル)」の場所から「0」=現状の行で、「1」=1つ隣のセルに、「dayNum(曜日番号)」を入れなさい。
activeCell.offset(0, 1).setValue(allDayOfWeek[dayNum]+'曜日');
}
}
どうでしょうか?スプレッドシートのE列に「○曜日」が表示されましたでしょうか?
まとめ
今回のスクリプトで重要なのは、もちろん
//「sheet(アクティブなシート)」のコンテンツ最後行の位置を「lastRow」に代入
const lastRow = sheet.getLastRow();
と、
//for文を使って、2行目から「lastRow(最終行の位置)」まで繰り返す処理を行う
for(let i = 2; i <= lastRow; i++) {
//「i」行目で4列目(D列)を取得し、activeCellに代入
var activeCell = sheet.getRange(i,4);
ですね。
getLastRow()について
本当に良く出てくるスクリプトですので、ご存知の方も多いと思いますが「getLastRow()」は、スプレッドシートの最終行を取得するスクリプトです。今回は、8行目までコンテンツ(文字・内容)が入っているので「8」が「lastRow」に代入されるイメージです。
今回のfor文の使い方
行や列で、繰り返して処理をしたいときに、よく使われるfor文ですが、今回は、列はD列(4行目)で変わらないので、変化するのは行だけです。ですので、行の箇所に変数「i」を入れて、繰り返し処理を行っていけるようにします。
まず「i」に値を繰り返し入れるためのfor文を書いてみましょう。
for(let i = 2; i <= lastRow; i++) {
まず指定するセルは、2行目から始まりますので「i」=2から始まり、「lastRow(最終行の位置。今回は8行目)」までという指定を行い、「i++」で「i」に1ずつ足して繰り返し処理を行う、、、という意味になります。
※for文の詳しい説明は別ページに改めます。
では次は、スプレッドシートに記載されたスケジュールを一斉にGoogleカレンダーに反映してみます。