自動で半角数字2桁ごとにコロン:を挟んで時刻表示にするスクリプト – Google Apps Script

Googleスプレッドシートでサクサク時間を入力したいけど、時刻表示のためにいちいちコロンを挟むのが面倒、って時ありますよね。

表示形式で設定しても入力時は自分でコロンを入れないといけないし、編集時もコロンを残す必要があります。

これが面倒なので、数字入力→2桁ごとに自動でコロンを挿入し時刻表示にするスクリプト(Google Apps Scriptを作りました。GASは本当優秀。

使い方:数字2桁ごとに半角コロンが入る

自動で半角数字2桁ごとに

使い方は簡単で、セルに3桁以上の半角数字を入れるだけでOK。編集を確定するとスクリプトが自動で半角コロンを挿入します。

1200なら12:00、125555なら12:55:55といった具合。編集のときもコロン:を残す必要がないので、セルにカーソルがあった状態で数字を入れて上書きすればOK。

あと「時」部分は1桁でも2桁でも大丈夫。例えば61050なら6:10:50。逆に頭にゼロを入れて061050なら06:10:50となります。

ちなみに6時10分50秒はFF6に登場するゾゾの街にある壊れた時計の時刻。ZOZOTOWNじゃないですよ。かいてんのこぎりいる?

Google Apps Script(GAS)コード

function onEdit(e) {
  let sh = SpreadsheetApp.getActiveSheet();
  let row = e.range.getRow();
  let col = e.range.getColumn();

  let sheetName = 'シート1' ; // ① 使うシートの名前
  let rowOrCol = col ; // ② 列か行かの指定 列:col 行:row
  let range = 1 ; // ③ 列数 or 行数指定

  if (e.source.getSheetName() == sheetName && rowOrCol == range){
    //var editCell = sh.getRange(row,col,1,1);
    var editCell = sh.getActiveCell();
    var addColon = editCell.getValue().toString().replace(/(\d)(?=(\d\d)+(?!\d))/g, '$1:');
    editCell.setValue(addColon);
  }
}

まず上記コードをスクリプトエディタにコピペしてください。

コードをスクリプトエディタにコピペ

スクリプトエディタはツールメニュー → スクリプトエディタから開けます。

ただ、上記をコピーしただけでは「シート1」シートのA列にしか効かない状況です。

+スプレッドシートの機能でシート上の表示形式も変えておきたいので、下記を参考に設定してください。

範囲の制限設定

onEditを使った場合、なにもしないとそのスプレッドシート全体に効果が及んでしまいます。

このスクリプトでは全シート全セルで編集時に3桁以上の数値があると時刻用であろうがなんであろうが2桁ごとにコロンを挟んでしまいます。

そのため、スクリプトがかかるシートやセルを制限する必要があります。

  let sheetName = 'シート1' ; // ① シートの名前
  let rowOrCol = col ; // ② 列か行かの指定 列:col 行:row
  let range = 1 ; // ③ 列数 or 行数指定

具体的にはスクリプトの6行目〜8行目にあたる上記3行で制限をかけています。デフォルトではシート1のA列のみスクリプトがかかっている状態。

まず①の行、'シート1’シート名を設定します。全角半角、大文字小文字含めて完全一致で入力してください。囲んでいる '(シングルクオーテーション)はそのままにしてください。

続いて、②の行はスクリプトの効果対象が列か行か。列に効かせる場合はcolのまま、行に効かせる場合はrowに書き換えてください。

最後は③の行で何列目 or 何行目かを設定。A列の場合は1、B列の場合は2、E列の場合は5。②で行(row)指定にした場合は素直に何行目かを数値で設定してください。

表示形式は書式なしテキスト推奨

スクリプトを稼働させるセルの表示形式を「書式なしテキスト」に設定

もう一点、本スクリプトを稼働させるセルは表示形式を「書式なしテキスト」に設定してください。

デフォルトの「自動」はもちろん、「時間」やカスタム数値形式から「0:00」などに設定すると正常に表示されない可能性ありです。

本スクリプトの注意点

本スクリプトでは単純に右側の数字から2桁ごとにコロンを入れているだけ。

特に桁数や数値の制限は入れていないので、9876543210と入れればそのまま98:76:54:32:10となります。

通常の時刻表示ではあり得ない時間ですがが、無駄に処理を増やすと反応悪くなりそうだし運用カバーでよいかと。あと、秒の小数点にも対応しませんので悪しからず。