スプシで時間入力がめちゃ楽になるスクリプト – Google Apps Script
Googleスプレッドシートでサクサク時間を入力したいけど、時刻表示のためにいちいちコロンを挟むのが面倒、って時ありますよね。
表示形式で設定しても入力時は自分でコロンを入れないといけないし、編集時もコロンを残す必要があります。
これが面倒なので、数字入力→2桁ごとに自動でコロンを挿入し時刻表示にするスクリプト(Google Apps Script)を作りました。
いちいちコロンは入力しないでテンキーで数字入れるだけでOK! 時間、時刻を手入力するときにめちゃくちゃ楽になった。GASはホント優秀。
使い方:数字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.getActiveCell();
var addColon = editCell.getValue().toString().replace(/(\d)(?=(\d\d)+(?!\d))/g, '$1:');
editCell.setValue(addColon);
}
}
まず上記コードをスクリプトエディタにコピペしてください。
スクリプトエディタは拡張機能メニュー → Apps Scriptで開けます。
ただ、上記をコピーしただけでは「シート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となります。
通常の時刻表示ではあり得ない時間ですがが、無駄に処理を増やすと反応悪くなりそうだし運用カバーでよいかと。あと、秒の小数点にも対応しませんので悪しからず。
ディスカッション
コメント一覧
2列にわたって時間表示にしたい場合はどのようなコードになりますか?
たとえばA列を入館時間、B列を退館時間としたい場合です。
これでどうでしょ??
コメント欄だとコードが消失したりしそうで怖いところですけれど。
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, 2] ; // ③列数指定(複数の場合 , で区切る / 単数の場合カンマ不要で数字のみ)
if (e.source.getSheetName() == sheetName && range.indexOf(rowOrCol) !== -1){
var editCell = sh.getActiveCell();
var addColon = editCell.getValue().toString().replace(/(\d)(?=(\d\d)+(?!\d))/g, '$1:');
editCell.setValue(addColon);
}
}
let range = [1, 2] のところがいま1列目(A列)、2列目(B列)に設定されてます。
増やすときは同じように半角カンマ , で区切って何列目かを指定してください。
問題なさそうでしたら返信いただけると助かります〜
記事の方もこっちに書き換えるかもです。
スパム対策のため日本語が含まれない投稿は無視されます。ご注意ください。