Googleスプレッドシートでフォームから送信された文字列をプレーンテキストとして扱い、先行ゼロを保持するにはどうすればよいですか?


8

ユーザーが情報を入力するGoogleフォームがあります。その中には先行ゼロが含まれているものがあります(郵便番号、ID番号など)。

ただし、このデータをGoogleスプレッドシートに保存すると、プレーンテキストとして扱われず、ゼロが取り除かれます。フォームフィールドは、検証されていないテキストフィールドです。

これらの値を含むセルの範囲をプレーンテキストとしてフォーマットしようとしましたが、セル内にテキストがない限り、スプレッドシートはフォーマットをプレーンテキストとして設定しないようです。したがって、列をプレーンテキストとしてフォーマットし、フォームを送信しても、先頭のゼロは削除されます。

これに対処するためのアプリスクリプトを作成しようとしましたが、それを必要とするユーザーに展開するための良い方法はありません。

フォームエントリの前に一重引用符を付けるようにユーザーに指示する必要なしに、どうすればこれを回避できますか?これはとても小さなことですが、一般的な問題であると思われるものに対する適切な簡単な解決策を見つけることができません。これが機能しない場合は、Googleフォーム/シートを完全に削除する必要があるかもしれません。


1
Webアプリケーションへようこそ!良い質問です。読みやすくするために少し編集しました。Googleドキュメントでフォームの回答を日付としてフォーマットし
Vidar S. Ramdal 2014

1
はい、そして上記のように、「受け入れられた答え」が示唆したことを試しましたが、それは古いバージョンのシート用であり、それはもう機能しません。
2014

回答:


3

私の回答の一部は次のとおりです。これは既知のバグです(新しく受け取ったフォームの送信では、古いバージョンのシートの場合のように、ランディングする列の形式が考慮されません)。

後でデータをどのように処理するかに応じて、フォーム送信を別のシートに正しい形式で再現することもできます。たとえば、E列に5桁の郵便番号が含まれ、先頭にゼロが含まれている場合(必要な場合)、次のように使用できます。

=ArrayFormula(TEXT('Form Responses'!E:E,"00000"))

別のシートに。

ただし、他のすべての列も持ち込む必要があります。複雑になりすぎずに、これは新しいバージョンのスプレッドシートでかなり簡単に実現でき、必要に応じて列を(例)でフォーマットします。

=QUERY('Form Responses'!A:G,"select * format E '00000'",1)


2

私はこの問題に遭遇したばかりですが、残念ながら、予想される桁数がわからないため、不足しているゼロの数がわかりません。幸いなことに、フォームを送信する前にこのことを考えました。もしあなたがすでに返答を持っているのなら、これは役に立ちません(もう一度送信しない限り)。

この問題を解決するために私は:

  1. 質問タイプを「テキスト」に設定します
  2. 「詳細設定」で「正規表現」を選択しました
  3. 次のドロップダウンボックスで「マッチ」を選択しました
  4. 入力したテキストボックスに ^\[\d+\]$

この正規表現では、ユーザーは応答の開始時に開き角括弧を入力する必要があり、その後に少なくとも1つの数字が続き、閉じ角括弧で終了する必要があります。たとえば、[0021314]は有効なエントリです。これは数字のみを許可することに注意してください^\[.+\]$。角括弧を強制したい場合は、代わりに使用できます。

シートでは、これは[0021314]と表示されます。そのため=mid(A1,2,len(A1)-2)、A1が[0021314]を含むセルであるような式で実行できる角括弧を削除する必要があります。セルをプレーンテキストとして自動入力して書式設定すると、必要な残りの作業を実行できます。

正規表現を変更して、ユーザーに入力の最初に単一引用符を入力させることもできます。


0

「どうやったらわからない」という言い回しと「不可能のようだ」とを組み合わせた長い言い方(ただし、本当に残念):

私が管理できる最良の(しかし微弱)は、各桁に0から9のスケールを使用して、一度に1桁の入力(および出力)を期待することです。


0

ここおよび他のスレッドで提案されているソリューションは、固定された桁数の数値に対してのみ機能します。上記の郵便番号の5のように。

私はベルギーの電話番号の先行ゼロを維持しなければなりません。
ベルギーの固定
電話の構造は025382172(9桁)、携帯電話の構造は0475123456(10桁)

新しいタブでデータを複製する回避策を見つけたと思いました。これを行うには、2つの個別の配列を使用して、列のグループをバッチで読み込みます。

最初の配列は、含まれていない電話番号列Gまですべての列をコピーします。 =ARRAYFORMULA('Form Responses'!A2:F302)
2番目の配列は、電話番号列Gから最後の列までのすべての列をコピーします。=ARRAYFORMULA('Form Responses'!H2:P302)

電話番号の列には、コピーされる値の前にゼロを追加する簡単な式があります。 =("0"&'Form Responses'!G2)

...残念ながら、それは静的モードでのみ機能します。
動的モードでは、Googleフォームから新しい行が入力されると、配列がこの列に影響を与えることが想定されていなくても、電話番号列Gの数式がめちゃくちゃになります。

実際には、数式=("0"&'Form Responses'!G2)は空の次の行にシフト=("0"&'Form Responses'!G3)し、苛立たしい値0のセルが残ります。

1つのブロックのすべての列について1つの単一の配列に戻り、配列ゾーンの外側の右側に重複する電話番号列を追加し、次の式を入力するだけで、調査を続行でき=("0"&G3)ます。その場合は、「ネイティブ」の電話番号列をマスクして、処理された電話番号のみを表示します(残念ながら、ページの適切な場所にはありません)。


変換された電話番号列が2つのアレイ間で絞り込まれていなければ、説明されているソリューションは機能しています。データが自動的に追加される領域外にある必要があります。右側または左側。ハレー!Amicalement de Belgique。ピエール
ピエールベカルト2016

0

これは古い投稿ですが、以下をお勧めします...

結果タブで、A1:

=QUERY('Form Responses'!A:F)

G1の場合:

=ArrayFormula(IF(ROW('Form Responses'!G:G)=1, 'Form Responses'!G1, IF('Form Responses'!G:G="", "", "0"&'Form Responses'!G:G)))

H1の場合:

=QUERY('Form Responses'!H:P)

同様のアプローチを追加して、変更が必要な列のデータを変更できます。


0

このように「0」で始まる郵便番号の問題を解決しました...列を強調表示し、[フォーマット]タブに移動し、[数値]、[その他のフォーマット]、[カスタム数値フォーマット]の順にクリックします。郵便番号は5つしかないため「00000」と入力した数字を当てはめます。そしてそれはうまくいった!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.