今回のテーマは、Googleスプレッドシートを開いた時に、すぐに、自動的に指定の場所に移動させる方法の紹介です。
私が所属するチームでは、毎日、朝会や夕会といったMTGを実施していますが、その中で、各メンバーがその日の業務の中で得た知識や学習の成果等を発表・共有することで全員の知識向上に繋げる、という取り組みをしています。
共有した内容は後でさっと見返すことができるようにスプレッドシートで一覧を作って管理しています。
このような感じで、日付と、共有内容を記載しているだけの一覧です。
過去の日付の行も残しているので、日数が経つほど今日の日付の分が下になり探しづらいです。
そこで、スプレッドシートを開いてすぐに、自動的に今日の日付の行に移動して初期表示されるようにできないか?と思ったのが発端です。
利用するのはGoogle Apps Script(通称:GAS、ガス)です。
スプレッドシートのメニューの中の[拡張機能]から[Apps Script]を選択します。
そうすると、コードを入力する画面が出てきます。
では、早速、今回の要望を実現するコードです。
これを貼り付けて利用するだけで動作すると思います。
// スプレッドシートを開いた時に自動的に実行される処理
function onOpen() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// getRangeメソッド:指定した範囲の値を取得
// ※あらかじめ範囲内の値を取得しておいて利用することで、ループ処理の中で毎回値を取得して処理が重くならないようにする
// getRange(開始行:1行目から, 開始列:1列目から, 取得行数:最終行まで, 取得する値の列:1列目に日付の値が存在)
const range = sheet.getRange(1, 1, sheet.getLastRow(), 1);
const values = range.getValues();
const valLength = values.length;
// 今日の日付を取得
const today = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd');
let rowCount = 1;
let disp = '';
let getArrayValue = '';
for (let i = valLength; i <= valLength; i--) {
// 取得した値の分、処理を繰り返す
// 最終行から開始して、1行ずつ戻って処理を実施
// ※今日の日付の値は開始行より最終行の方に近い場所にある想定で、処理時間を短くするため
getArrayValue = values[i-1][0];
try {
// formatDateメソッド:Dateオブジェクトを文字列に変換
// formatDate(取得したDateオブジェクト, タイムゾーン:JST[日本標準時], 文字列変換するフォーマット:'yyyy/MM/dd')
disp = Utilities.formatDate(getArrayValue, 'JST', 'yyyy/MM/dd');
} catch(e) {
console.log(e);
}
if (today == disp) {
// 今日の日付とスプレッドシートの表示日付が一致した場合、処理をやめる
rowCount = i;
break;
}
}
// 該当行(今日の日付の行)の1列目にジャンプ
sheet.getRange(rowCount, 1).activate();
}
※他にも同じことが実現できるコードはあるかと思いますが、今回はこの内容で作ってみました
このコードを設定してスプレッドシートを開くと、
例えば今日が11月7日の場合、その箇所が初期選択された状態で、その場所に移動して表示されます。
コードを作成する際に工夫したポイントを2つ紹介します。
スプレッドシートに記載されている日付分の繰り返し処理をするようにしていますが、この繰り返し処理の中に都度データを取得する処理を入れてしまうと、日付が多くなるほど動作が重くなってしまうので、データを取得する処理は1回だけにしています。
この一覧は過去の日付から順番に並んでいるので、過去の日付ほど上に、最新の日付ほど下にあります。
そのため、今日の日付の行は下の方にある、ということで、繰り返し処理を最終行から順番に処理をするようにしています。
該当のデータが見つかったら処理を終えるようにしていますので、その分早く処理が終わる、ということになります。
今回は、今日の日付と一致した場所にジャンプする、という内容にしましたが、コードの一部を変更して、例えば、特定の文字列と一致した場所にジャンプする、といった内容に変更することも可能です。
GASを使いこなすことができれば、スプレッドシートがより便利に使えるようになります!
▽GoogleスプレッドシートはGoogle LLCの商標です。その他すべての企業名および商品名は、関連各社の商標または登録商標です。