広告

スプレッドシート開いたら今日の日付(列や行)へ移動させる方法

2019年8月25日

スプレッドシート開いたら、今日の日付の行や列を選択するスクリプト作ったので共有します。

スプレッドシート開いたら今日の日付の列を選択

今日の日付の列を選択

スプレッドシート開いたら今日の日付の行を選択

今日の日付の行を選択

OYAKUN
OYAKUN
MATCH関数やsliceメソッド使った、若干よこしまな感じです 苦笑

スプレッドシートで今日の日付に移動するスクリプト

需要があるか分かりませんが、

みたいな2種類のスクリプト作ってみました。

OYAKUN
OYAKUN
さらに以下4種も追記しました。

NEW! 行・列固定でも当日列にジャンプするコード1↓

NEW! 行・列固定でも当日列にジャンプするコード2↓

日付が横並びで1年間分あったときシート開いたら今日の日付セルへ移動するコード↓

1年間分の日付が横並びで表示されている時シート開いたら当日列を画面左に表示するコード↓

シート開いたら今日の日付の列を選択するやつ

日付を横並びで配置しているとき、スプレッドシート開くと今日の日付の列を選択してくれるスクリプトです。

/*シート開いたら今日の日付列を選択(日付横並びVer)*/
function onOpen(){
var ss = SpreadsheetApp.getActive();
var sht = ss.getSheetByName('横並び').activate();
ss.getRange('B1').activate();
//列数をゲッツ
var kyou = ss.getCurrentCell().setFormula('=MATCH(TODAY(),2:2,0)');
ss.getActiveRangeList().setNumberFormat('0');
var day = ss.getCurrentCell().getValue();
//今日の日付のセルに移動
sht.getRange(2,day).activate();
//列を選択
var val = ss.getCurrentCell().getA1Notation().slice(0,1);
var col = val+':'+val;
ss.getRange(col).activate();
kyou.clear();
}
スプレッドシート開いたら今日の日付の列を選択
今日の日付を選択するイメージ

スプレッドシートを開くと、上のような感じで今日の日付の列を選択してくれます。

追記1:1年間分の日付から当日列へジャンプするコード

横並びで1年間分の日付があった場合に、シート開いたら当日列へジャンプするコード作成しました。

/*シート開いたら今日の日付列を選択(日付横並びVer)*/
function onOpen(){
var ss = SpreadsheetApp.getActive();
var sht = ss.getSheetByName('横並び').activate();
ss.getRange('B1').activate();
//列数ゲッツ
var kyou = ss.getCurrentCell().setFormula('=MATCH(TODAY(),2:2,0)');
ss.getActiveRangeList().setNumberFormat('@');
var day = ss.getCurrentCell().getValue();
//当日セルの上に移動
var move = sht.getRange(2,day).offset(-1,0).activate();
//アルファベットゲッツ
var rng = ss.getCurrentCell().setFormula('=SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),"")');
var val = rng.getValue();
//当日の列を選択
var col = val+':'+val;
ss.getRange(col).activate();
rng.clear();
kyou.clear();
}

たとえ365列あっても、スプレッドシートを開けばすぐに当日の列に移動してくれます。

追記2:ジャンプ先の当日列を画面左に表示するコード

1年間分の日付が横並びで表示されている場合、当日列が画面右側に表示されてしまいます。そこで、選択される当日列が自動で画面左寄りに表示されるコードを作成しました。

/*シート開いたら今日の日付列を選択(日付横並びVer)*/
function onOpen(){
var ss = SpreadsheetApp.getActive();
var sht = ss.getSheetByName('横並び').activate();
ss.getRange('B1').activate();
//列数ゲッツ
var kyou = ss.getCurrentCell().setFormula('=MATCH(TODAY(),2:2,0)');
ss.getActiveRangeList().setNumberFormat('@');
var day = ss.getCurrentCell().getValue();
//当日セルの上に移動
var move = sht.getRange(2,day).offset(-1,0).activate();
//当日セルのアルファベットゲッツ
var rng = ss.getCurrentCell().setFormula('=SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),"")');
var val = rng.getValue();
//当日列を選択
var col = val+':'+val;
ss.getRange(col).activate();
rng.clear();
kyou.clear();
 //当日セルの-2日前列まで非表示に
var day2 = day-2;
var sheet = ss.getActiveSheet();
sheet.hideColumns(1,day2);  
}

以下のような感じで、当日列が画面左寄りに表示されます。

列を非表示に
当日列が最左端に表示される様子
OYAKUN
OYAKUN
左寄りにするといっても当日より2日前の列を、非表示にする操作を追加しただけなのであしからず...w

閉じた列(非表示列)を表示するには?

あひる
あひる
当日列が画面左寄りになったけど、過去の日付を見るにはどうしたら良いの?

当日列が画面左に表示されているのは、GASで過去日付列を非表示設定しているためです。

非表示になった列は、ワンクリックで再表示させることが可能です。

hihyoujiretu-saihyouji
非表示列は再表示できる
OYAKUN
OYAKUN
A列に三角マークが表示されているので、そこをクリックすると非表示列が表示されます

追記3:行・列固定で当日列を画面左に表示するコード

予め行と列が固定された状態で、当日列を画面左に表示させるコードを作りました。

/*シート開いたら今日の日付列を選択(日付横並びVer+行列固定)*/
function onOpen(){
var ss = SpreadsheetApp.getActive();
var sht = ss.getSheetByName('行列固定').activate();
ss.getRange('E1').activate();
//列数ゲッツ
var kyou = ss.getCurrentCell().setFormula('=MATCH(TODAY(),3:3,0)');
ss.getActiveRangeList().setNumberFormat('@');
var day = ss.getCurrentCell().getValue();
//当日セルの上に移動
var move = sht.getRange(2,day).offset(-1,0).activate();
//当日セルのアルファベットゲッツ
var rng = ss.getCurrentCell().setFormula('=SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),"")');
var val = rng.getValue();
//当日列を選択
var col = val+':'+val;
ss.getRange(col).activate();
rng.clear();
kyou.clear();
 //固定3列+1列残して当日より前を非表示に
var day2 = day-5;
var sheet = ss.getActiveSheet();
sheet.hideColumns(5,day2);
}

※Sampleとして、3行目と3列目が固定されているシートで実行しています。

kyou_hiduke_retu01
3行目と3列目が固定された状態で実行します
OYAKUN
OYAKUN
固定する行や列数に応じてコードを編集すれば、オリジナルのシートでも応用できます。

追記4:行・列固定で当日列を画面左に表示するコード2

行列が固定されていて、且つ2行目に日付・3行目に曜日が入っているシートの場合に有効なGASを作成しました。

/*シート開いたら今日の日付列を選択2(日付横並びVer+行列固定)*/
function onOpen(){
var ss = SpreadsheetApp.getActive();
var sht = ss.getSheetByName('行列固定2').activate();
//列数ゲッツ
var kyou = sht.getCurrentCell().setFormula('=MATCH(TODAY(),2:2,0)');
sht.getActiveRangeList().setNumberFormat('@');
var day = sht.getCurrentCell().getValue();
//当日セルの上に移動
var move = sht.getRange(2,day).offset(-1,0).activate();
//当日セルのアルファベットゲッツ
var rng = ss.getCurrentCell().setFormula('=SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),"")');
var val = rng.getValue();
//当日列を選択
var col = val+':'+val;
ss.getRange(col).activate();
rng.clear();
kyou.clear();
 //固定3列残して当日より前を非表示に
var day2 = day-4;
var sheet = ss.getActiveSheet();
sheet.hideColumns(4,day2);
}

kyou_hiduke_4
行と列を固定して当日列を画面左に表示するイメージ
OYAKUN
OYAKUN
曜日や項目を入れたガントチャートなどで活用できますね。

列選択のソースをコピペするときの注意点

もしコピペで使うときは、以下項目に注意してご利用ください。

注意点1. 日付が横並び&1行目がデフォの状態で使う

日付が横並びのときに利用できます

スプレッドシートの日付が横ならび
日付が横並びのときに利用できるソース

match関数入れてるのでB1セルは、何もしないでネ。(編集できるなら大丈夫っす)

B1セルには何も入れない!
B1セルには何も入力しないこと

シート名を「横並び」にしてるので、任意で分かりやすい名前に変更してください

シートの名前は横並び
シート名は「横並び」にしている
注意!
スクリプト内の、 var sht = ss.getSheetByName('横並び').activate(); 箇所も同じシート名に変更してください。

あとは、 function onOpen() の箇所を任意の関数名に変更しても使えます。(ただし、シート開いたら自動で列を選択してくれなくなりますん)

注意点2. 2行目を日付セルに設定する

結合したセルや、日付以外のセルを2行目に設置してしまうと正しく動作しません。

NG1. 2行目に結合セルが挿入されている

ketugou-image
NGになるケース1. 2行目に結合セルが挿入されている

NG2. 2行目に日付以外の内容が記載されている

2gyoume_cell
NGになるケース2. 2行目以外の内容が記載されている

必ず日付が2行目に記載されているシートに、スクリプトを設置してください。(変数kyou、moveで行数を指定していますがわからない場合は触らない方が良いかもです)

シート開いたら今日の日付の行を選択するやつ

日付を縦並びで配置しているとき、スプレッドシート開くと今日の日付の行を選択してくれるスクリプトです。

/*シート開いたら今日の日付行を取得(日付縦並びVer)*/
function onOpen() {
var ss = SpreadsheetApp.getActive();
var sht = ss.getSheetByName('縦並び').activate();
ss.getRange('B1').activate();
var kyou = ss.getCurrentCell().setFormula('=MATCH(TODAY(),A:A,0)');
ss.getActiveRangeList().setNumberFormat('0');
var day = ss.getCurrentCell().getValue();
//今日の日付のセルに移動
var cell = 'A' + day;
ss.getRange(cell).activate();
//今日の日付の行を選択
var row = day+':'+day;
ss.getRange(row).activate();
kyou.clear();
}
スプレッドシート開いたら今日の日付の行を選択
スプレッドシート開いたら今日の日付の行を選択

スプレッドシートを開くと、上のような感じで今日の日付行を選択してくれます。

行選択のソースをコピペするときの注意点

列選択と同様にコピペ時の注意点を書いておきます。

注意点. 日付が縦並び&B1セルがデフォの状態で使う

日付が縦並びのときに使えます↓

スプレッドシートの日付が縦並び

B1セルには何もいれないでネ。

B1セルには何も入れない!
B1セルには何も入れない

シート名を「縦並び」にしてるので、任意の名前に変更してご利用くださいませ。

シートの名前は縦並び
シート名が「横並び」になってる
注意!
スクリプト内の、 var sht = ss.getSheetByName('縦並び').activate(); 箇所も同じシート名に変更してください。

先述の注意点と同様に、 function onOpen() の箇所を任意の関数名に変更しても使えます。(ただし、シート開いたら自動で行の選択してくれなくなります)

まとめ

列の選択の部分でsliceメソッドを使ったのが、今回の工夫したとこでした。

  • 日付が縦並びなら行を選択
  • 日付が横並びなら列を選択

といった感じで、使ってもらえればうれしいです。

アクティブセルにsetFomulaMATCH関数入れた処理となっていて、ちょっと分かりづらいのでもっと単純化できるように精進します!^^

おまけ:スプレッドシートで今月シートを選択するスクリプト

スプレッドシートで今月シートを選択するスクリプトを作ったので紹介します。

//---当月シートを選択するscript---//
function monthsheet_select() {
//SpreadsheetAppを起動
const ss = SpreadsheetApp.getActiveSpreadsheet();
//月をフォーマットしてMM月表示へ
const Month = 'MM月';
//newDateで今日の日付けを取得・JSTで日本時間に・Month変数を指定
const todayMon = Utilities.formatDate(new Date(), 'JST', Month);
//MM月表示の当月シートをsheet変数へ格納
var sheet = ss.getSheetByName(todayMon);
//sheetをアクティブに
sheet.activate();
}
OYAKUN
OYAKUN
少しでも、みなさんの仕事のお役にたてれば本望です!
参考記事
gas-Alert
【即戦力】GASでアラートメールを作成して期日になったら自動通知

GASで期日になったら自動でアラートメールを周知するスクリプトを共有します。 すぐにコードを見る↓ 納期がきたら... ...

続きを見る