Spreadsheetの使い方

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

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

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

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

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

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

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

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

横並びVerのコードは新作作りました↓

NEW! 選択列が画面左に表示される新作コード作りました↓

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

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

/*シート開いたら今日の日付列を選択(日付横並び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年間分の日付があった場合に、シート開いたら当日列へジャンプするコード作成しました。

/*シート開いたら今日の日付列を選択(日付横並び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
左寄りにするといっても当日より2日前の列を、非表示にする操作を追加しただけなのであしからず...w

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

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

 

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

スプレッドシートの日付が横ならび

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

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

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

シートの名前は横並び

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

 

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

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

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

/*シート開いたら今日の日付行を取得(日付縦並び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セルには何も入れない!

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

シートの名前は縦並び

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

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

まとめ

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

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

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

 

アクティブセルにsetFomulaでMATCH関数入れた処理なんで、もっといろいろと単純化が出来そうっすね^^

OYAKUN
OYAKUN
少しでも、みなさんの仕事のお役にたてれば本望です!
 
 
  • この記事を書いた人
  • 最新記事
OYAKUN

OYAKUN

30代半ば♂妻・子3人の5人で日々激戦中。Google app script&VBA初心者が自分の備忘録を兼ねて「スプレッドシート、Excel、WordPress、plugin」の設定等、主にブログやアフィリエイト周辺のtipsを背伸びしながらご紹介しています。

© 2020 OYAKUDACHI.XYZ