私たちはAppleの数値を使用していますが、この数値はGoogleよりも少し優れているようです(それか、何か不足しています)。 Appleの数値で、「期間」形式のセルに90m
と入力すると、自動的に1h 30m
に変換されます。
Googleスプレッドシートで90m
を入力すると、入力が「テキスト」に変換されてセルの左側にぶつかるように見えます。 「1h 30m
」と入力すると、同じことが起こります。 「00:90:00
」と入力すると、1h 30m
、1:30
に変換され、同じ結果が得られます。 1h 30m
と入力すると、表示されるはずの正確な表示では、それが継続時間としてではなくテキストとして認識されます。
これが私が話していることの簡単な例です:Typedは="@"
としてフォーマットされたので、右の列に入力した方法を正確に保持します:
そのため、1日に数百行を入力します。すべてをxx:xx
形式で入力することは、お尻の大変な苦痛です。 Googleスプレッドシートで90m
を90分として認識し、プログラムされた形式に変換する方法はありますか?
現時点では、Googleスプレッドシートには自動データ型割り当てをカスタマイズする方法は含まれていませんが、Google Appsスクリプトを使用して入力をある型から別の型に自動的に変換することは可能ですが、いくつかの制限がありますが、最も簡単なソリューションから始めましょう。もう1つのQ&Aでは、既知の制限を回避する方法と、一般的な関心のある場合に発生する問題について説明します。
アドオンがすでに存在している可能性があります。推奨事項が必要な場合は、 ソフトウェアの推奨事項 に質問を投稿してください。
一般的な手順
#unit
の形式の入力をGoogle期間に変換しますApps Scriptプロジェクトを作成します
注:これが最初のプロジェクトであり、まだ多くを作成する計画がない場合は、名前は何でもかまいませんが、短い説明的な名前が常に適切です
on editシンプルトリガーを追加します。
function onEdit(e){
}
JavaScriptコードを追加します
シンプルな編集機能を実行して、結果をスプレッドシートに返します
便宜上、最後の2つのステップのコードを1つのコードブロックに追加しました。
function onEdit(e) {
var duration = stringToDuration(e.value);
if(e.value !== duration) {
e.range.setValue(duration);
e.range.setNumberFormat('[h]:mm'); // Here you can set the number format to use
}
}
/**
* Converts a string to a Google Sheet duration value
*
* @param {String} input The string to be converted
* @returns An Integer if the input format is supported otherwise returns the input
*/
function stringToDuration(input){
if(!typeof input === 'string') return input;
var date = new Date(0);
var match = input.match(/^(\d.*)(.)/);
var value = parseFloat(match[1]);
var isDuration = true;
switch(input[2]){
case 'm':
date.setMinutes(value);
break;
case 'h':
date.setHours(value);
break;
default:
output = input;
isDuration = false;
}
var output;
if(isDuration) {
var oneDayInMS = 24*60*60*1000;
output = date.getTime() / oneDayInMS;
} else {
output = input;
}
return output
}
[〜#〜]備考[〜#〜]
#m
(90mなど)と#h
(1.5hなど)の2つのケースのみを考慮しています。完全なソリューションとして、moment.jsのようなJavaScriptライブラリのコードを適合させます。