# 作業名の余分な空白をそろえる

2026年10月4日。Google Sheetsの標準機能を、架空の作業名12行で実操作した。追加の購入・有料契約はない。Geminiや外部AIは使っていない。

「請求書  作成」と「請求書　作成」を、単語の間に半角空白を1つ残した「請求書 作成」へそろえる。空白をすべて消す用途ではない。表記の意味や名前の同一性は判定しない。

## 同じ入力で2通りを試す

1. 新しいGoogle Sheetsを開く。`input.tsv`をテキストエディタで開き、全体をA1へ貼り付ける。A列がID、B列が作業名、C列が期待結果になる。Googleアカウントが必要。既存の仕事表に直接貼らない。
2. 元のB2:B13をD2:D13へコピーし、D2:D13を選ぶ。
3. **方法1**：「データ」→「データ クリーンアップ」→「空白文字を削除」。D列の値とC列の期待結果を照合する。今回、半角空白が1つという条件に一致したのは7/12行。全角空白・改行しない空白が5行に残った。
4. **方法2**：空のE2に下の式を貼り付けてEnter。E2:E13に結果が出る。元のB列から計算するので、方法1の整理済み結果を入力にしない。

```excel
=ARRAYFORMULA(TRIM(SUBSTITUTE(SUBSTITUTE(B2:B13,CHAR(160)," "),"　"," ")))
```

全角空白とCHAR(160)の空白を半角空白へ置き換え、TRIMで余分な半角空白を整理する。`"　"`の間には全角空白が1文字ある。行を増やす時はB2:B13の範囲を変更する。式を展開するE2:E13は空けておく。

5. F2に `=EXACT(D2,C2)`、G2に `=EXACT(E2,C2)` を入れ、それぞれ13行目までコピー。今回の方法1はTRUEが7行、方法2はTRUEが12行。目で同じに見えても、空白の種類が違えばFALSEになる。
6. 数式の結果を固定したい場合はE2:E13をコピーし、別の空列へ「特殊貼り付け」→「値のみ」。この固定操作は今回の実演では未実行。

実演用の非公開Sheetでは比較しやすいよう列配置を変えている。A=ID、B=元の作業名、C=方法1、D=方法2、E=期待結果、F/G=EXACTによる一致判定。D2の式は上と同じで、F2=`=EXACT(C2,E2)`、G2=`=EXACT(D2,E2)`。再現入力と実演Sheetの列配置を混ぜない。

## 実確認した結果と限界

|項目|実結果・扱い|
|---|---|
|対象|架空の12行、IDはT01〜T12。行の削除や重複統合はしていない|
|方法1|7/12行が半角空白1つという期待値に完全一致。5行は不一致|
|メニューの完了表示|8セルから空白文字を削除、と表示された。これは期待値一致7行とは別の数字。T12は連続全角空白が1つになったが、半角にはならなかった|
|方法2|12/12行が期待値に完全一致。Sheets内で計算し、結果をコピーして読み戻した|
|前後の空白|最初の貼り付けで先頭・末尾の空白が落ちたため、配布する入力は読み戻した内側の空白に統一。この実演を前後空白の独立試験とは数えない|
|無料の範囲|今回のメニュー、TRIM、SUBSTITUTE、CHAR、ARRAYFORMULA、EXACTを使用。有料AI機能は不要|
|無料の制限|Googleアカウント、ネット接続、保存用の空き容量が必要。無料ストレージは他のGoogleサービスと共用。大規模表・スマホ・オフライン・速度比較は未検証|
|できないこと|別名の意味判定、誤字修正、会社名の同一判定、すべてのUnicode空白や制御文字の処理、未知データの正解保証。今回の式が扱うのは半角空白・全角空白・CHAR(160)だけ|
|用途上の注意|名称の中の空白に意味がある場合は、置き換えるルールを先に決める。式を別列に置き、元データを残す|
|時間・収益|人の作業時間短縮は未測定。閲覧、読者の利用、購入、売上は未観測|

`completed_google_sheets.tsv`は自作処理の推定ではなく、Google Sheetsの計算済みA1:G16をクリップボードで読み戻した結果。入力と期待結果はこの実演用に作った架空データで、独立した人による評価はない。

動画は実操作時に取得した静止画を順に表示する編集版。連続画面録画ではなく、動画の長さを作業所要時間として扱わない。音声は付けず、字幕と手順で説明する。
