スプレッドシートのPROPER関数|先頭大文字化と2Nd・It’Sの直し方

スポンサーリンク

英語の顧客名簿や住所録をスプレッドシートで管理していませんか?「john smith」と「JOHN SMITH」が同じ列に混ざっている、なんてことはよくあります。CSVで取り込んだデータや手入力のデータほど、表記はバラバラになりがちです。

数百件を1件ずつ打ち直すのは現実的ではありません。しかも PROPER 関数で整えたつもりが、「2nd」が「2Nd」、「it’s」が「It’S」に化けることも。気づかずに送付状へ流し込むと、かえって目立ってしまいます。

この記事では、スプレッドシートの PROPER 関数の構文と変換結果を最初に示します。そのあと、崩れる3パターンの直し方と、列全体を一括で変換する書き方まで順に見ていきましょう。PROPER の変換結果は、Google スプレッドシートに実際に入力して確かめた値です。

対応バージョン: Googleスプレッドシート(ブラウザ版)を前提に解説しています。後半で使う MAP・REDUCE・LAMBDA・XLOOKUP もスプレッドシートで動きます。Excel の PROPER との違いは「よくある質問」で触れます。

スプレッドシートのPROPER関数とは?構文と変換結果をまず確認

構文と変換結果(john smith/JOHN SMITH/jOHN sMITH → John Smith)

結論から。A2 の英字を「単語の頭だけ大文字、残りは小文字」にするなら、B2 に次の式を入れます。

=PROPER(A2)
A列(入力)B列(=PROPER(A2) の結果)
john smithJohn Smith
JOHN SMITHJohn Smith
jOHN sMITHJohn Smith

全部小文字でも、全部大文字でも、大小がちぐはぐでも、結果は同じ「John Smith」にそろいます。先頭以外は強制的に小文字になるのが、PROPER の大事な性質です。

引数必須説明
テキスト必須変換したい文字列、またはセル参照。文字列を直接書くときは “john smith” のようにダブルクォーテーションで囲む

読み方は「プロパー」で、英語の proper(正式な・適切な)が由来です。Google の公式ヘルプでは、人名や地名のような固有名詞を整える用途が想定されています。

一方、「文の先頭だけ大文字」にする用途には向かないとも書かれています。代わりの式は、後半の「文頭だけ大文字にしたいとき」で紹介しますね。

UPPER・LOWERとの違い(3関数の比較表)

スプレッドシートで大文字・小文字をそろえる関数は、PROPER のほかに UPPER と LOWER があります。どれも引数は1つで、違いは「どこを大文字にするか」だけ。

関数変換のしかたjOHN sMITH の結果向いているデータ
UPPERすべて大文字JOHN SMITH国コード・商品コード
LOWERすべて小文字john smithメールアドレス・ID
PROPER各単語の頭だけ大文字John Smith英語の人名・地名・住所

全部大文字にそろえたいならUPPER関数、全部小文字ならLOWER関数の出番です。人名や地名のように「頭だけ大文字」が自然な表記には PROPER、と覚えておけば迷いません。

実務で使う変換パターン

実務のデータには、余分な空白や区切り文字が混ざっていることが多いもの。ここでは、よく組み合わせる4つの形を紹介します。

英語の人名・住所をそろえる

名簿のA列に英語の名前が入っているなら、B2 に =PROPER(A2) を入れて下へコピーするだけで整います。

A列(入力)B列(結果)
john smithJohn Smith
JANE DOEJane Doe
bob o’neilBob O’Neil
mary-janeMary-Jane

「o’neil」の N や「mary-jane」の J のように、アポストロフィやハイフンの後ろも大文字になります。複合姓やハイフンつきの名前は、そのまま使える形に整うので便利です。

姓と名を別々の列で管理したい場合は、先にSPLIT関数でスペースを区切りに分けておきましょう。分けた列それぞれに PROPER をかければ、並べ替えや差し込みにも使いやすくなります。

TRIMと組み合わせて余分な空白も消す

前後や単語の間に余計なスペースが入ったデータには、TRIM関数を内側に入れます。

=PROPER(TRIM(A2))

A2 が「␣␣john␣␣␣smith␣」(前に2つ、間に3つ、後ろに1つの空白)だったとします。このときの結果は「John Smith」でした。LEN で数えると10文字で、連続した空白は1つに、前後の空白は消えています。

CSV から取り込んだデータには、改行や目に見えない制御文字が紛れ込むこともあります。その場合はCLEAN関数をさらに内側に足して、=PROPER(TRIM(CLEAN(A2))) の形にしてください。内側から順に処理されるので、「制御文字を消す → 空白を整える → 頭を大文字に」の流れになります。

SUBSTITUTEでハイフン・アンダースコア区切りを整える

システムから出力した項目名には、「first_name」のようにアンダースコアでつないだものがあります。SUBSTITUTE関数でアンダースコアをスペースに置き換えてから、PROPER をかけましょう。

=PROPER(SUBSTITUTE(A2,"_"," "))

A2 が「first_name」なら、結果は「First Name」です。

ハイフンは置き換えなくても区切りになります(e-mail → E-Mail)。スペースに変えたいときだけ、上の式の “_” を “-” に替えてください。

文頭だけ大文字にしたいとき(UPPER+LEFT+LOWER+MID)

「hello world」を「Hello world」のように、文の最初の1文字だけ大文字にしたい場面もありますよね。PROPER は単語ごとに頭を大文字にするので、この用途には使えません。4つの関数を組み合わせて作ります。

=UPPER(LEFT(A2))&LOWER(MID(A2,2,LEN(A2)))
  • LEFT(A2) で1文字目を取り出し、UPPER で大文字にする
  • MID(A2,2,LEN(A2)) で2文字目以降を取り出し、LOWER で小文字にする
  • & で2つをつなぐ

A2 が「hELLO WORLD」なら、結果は「Hello world」になります。2文字目以降はすべて小文字になるため、文中の固有名詞(Tokyo など)も小文字に変わる点に気をつけてください。

思いどおりにならない動作と直し方

PROPER は英語の表記ルールを知っているわけではありません。決まった規則で機械的に大文字・小文字を決めているため、文字の並び方によっては意図しない結果になります。

実機で確かめた変換結果の一覧(入力/結果/原因)

スプレッドシートに実際に入力した結果です。

入力PROPER の結果原因
2nd floor2Nd Floor数字の直後の n が大文字に
abc123defAbc123Def数字の直後の d が大文字に
room#3aRoom#3A数字の直後の a が大文字に
hello/worldHello/Worldスラッシュの直後が大文字に
e-mailE-Mailハイフンの直後が大文字に
o’neilO’Neilアポストロフィの直後が大文字に(姓なら正しい形)
john’s bookJohn’S Bookアポストロフィの直後の s が大文字に
it’sIt’S同上
mcdonaldMcdonald2文字目以降がすべて小文字に
iphoneIphone同上
usaUsa同上
abc def(全角)Abc Def全角のまま、頭が全角の大文字に
東京tokyo支店東京tokyo支店漢字の直後の英字は大文字にならない

崩れ方は、大きく分けると次の3パターンです。

  1. 数字・記号の直後が大文字になる(2Nd・Room#3A)
  2. アポストロフィの直後が大文字になる(John’S・It’S)
  3. 固有名詞の中の大文字が小文字になる(Mcdonald・Iphone・Usa)

数字・記号の直後が大文字になる(2Nd・Room#3A)

今回試した範囲では、スペースに加えて数字や記号(/ や -)の直後も「単語の頭」として扱われました。「2nd」の n が大文字になるのはこのためです。

序数(1st・2nd・3rd)が入る住所なら、PROPER の結果を SUBSTITUTE で戻すのが手軽です。

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(PROPER(A2),"1St","1st"),"2Nd","2nd"),"3Rd","3rd")

探す文字は、PROPER をかけた後の形(”2Nd” など)で書くのがポイント。4th 以降も 4Th のように崩れる見込みなので、必要なら同じ形で足します。

一方、「Room#3A」のような部屋番号は、英字が大文字のほうが自然なことも多いもの。ここは直さずに残す判断もありです。

正規表現でまとめて直す手も浮かびます。ただ、REGEXREPLACE関数で大文字・小文字まで切り替えられるかは、本記事では確かめていません。

大文字・小文字の切り替えは PROPER・UPPER・LOWER に任せ、REGEXREPLACE は記号や区切りの整理に使う。この分担が無難です。

アポストロフィの直後が大文字になる(John’S・It’S)

アポストロフィの後ろも、単語の頭として扱われます。「o’neil → O’Neil」のような姓ではありがたい動きですよね。ところが所有格や短縮形では、「John’S」「It’S」と崩れてしまいます。

直すなら、PROPER の結果に含まれる「’S」を「’s」に戻しましょう。

=SUBSTITUTE(PROPER(A2),"'S","'s")

この式なら「John’S Book」は「John’s Book」に、「It’S」は「It’s」に戻ります。ただし「O’Sullivan」のように ‘S で始まる姓まで「O’sullivan」に変わってしまう点には注意が必要です。名簿にこうした姓があるなら、次の辞書補正で個別に登録するほうが安全でしょう。

McDonald・iPhone・USAは辞書シートとREDUCEで補正する

固有名詞が増えると、SUBSTITUTE の入れ子はどんどん長くなります。そこで、変換前と変換後のペアを「辞書」として表にまとめ、REDUCE と LAMBDA で順番に置き換える方法を使います。

まず、H列とI列に辞書を作ります。H列には PROPER をかけた後の形、I列には正しい表記を入れてください。

行H列(PROPER 後の形)I列(正しい表記)
2McdonaldMcDonald
3IphoneiPhone
4UsaUSA

B2 に入れる式はこちらです。

=REDUCE(PROPER(A2),$H$2:$H,LAMBDA(acc,k,IF(k="",acc,SUBSTITUTE(acc,k,XLOOKUP(k,$H$2:$H,$I$2:$I)))))

たとえば A2 が「mcdonald and iphone in usa」の場合。結果は「McDonald And iPhone In USA」になりました。式の中身は次のとおりです。

  • PROPER(A2) が出発点(初期値)
  • $H$2:$H の語を1つずつ取り出し、k という名前で受け取る
  • acc はそれまでの置き換え結果。k を XLOOKUP で I列の正しい表記に引き当て、SUBSTITUTE で置き換える
  • IF(k="",acc, …) は「辞書の空行では何もしない」という意味

acc と k は自由につけられる仮の名前です。REDUCE は、初期値に範囲の値を1つずつ当てて処理を重ねていきます。

IF の部分を省くと、辞書範囲に空行が入ったときに結果全体が #N/A になりました。$H$2:$H のように下まで開いた範囲も、下の空セルを拾うので同じです。

原因は、空のキーを XLOOKUP で探すと #N/A が返ること。辞書の行を後から足していくなら、IF 込みのこの形を使ってください。

もうひとつの注意点は、辞書の語が別の単語の一部に含まれていると、そこも置き換わること。たとえば「usage」は PROPER で「Usage」になり、その中の「Usa」が辞書に当たって「USAge」に化けます。IF を足しても、この部分一致は防げません。

単語単位で置き換えたいときは、前後にスペースを付けて探す形にします。

=TRIM(REDUCE(" "&PROPER(A2)&" ",$H$2:$H$4,LAMBDA(acc,k,SUBSTITUTE(acc," "&k&" "," "&XLOOKUP(k,$H$2:$H$4,$I$2:$I$4)&" "))))

この式では「usage」は「Usage」のまま残りました。最初の例も、先ほどと同じ「McDonald And iPhone In USA」になります。

確かめたのは、空行を含まない $H$2:$H$4 を辞書範囲にした形です。なお、「usa.」「usa,」のように語の直後に記号が付いていると、スペースで区切られないため置き換わらない見込みです。

列全体を一括で変換する(ARRAYFORMULA・MAP/LAMBDA)

データが数百行あると、式を下へコピーするのも手間ですよね。スプレッドシートなら、1つの式で列全体を変換できます。ここでは、A2:A6 に次のデータ(4行目は空)が入っている例で説明します。

行A列(入力)一括変換の結果
2john smithJohn Smith
3JANE DOEJane Doe
4(空)(空に見える)
5bob o’neilBob O’Neil
6mary-janeMary-Jane

この後紹介する3つの式は、どれもこの結果になりました。

ARRAYFORMULAで列ごと変換する

もっとも短いのは、PROPER を ARRAYFORMULA関数で包む書き方です。B2 に1つ入れるだけで、A列のデータが下までまとめて変換されます。

=ARRAYFORMULA(PROPER(A2:A))

A2:A のような下まで開いた範囲を渡しても、エラーにはなりません。1,000行のシートで試すと、結果はシートの最終行まで999行ぶん出力されました。A列に名前を書き足せば、B列にも自動で結果が出ます。

注意したいのは、結果が出る範囲に手入力の値があると展開できず、エラーになること。B列の結果の範囲には、何も入力しないでください。

IFで空白行を除く

A列が空の行は空のまま、データのある行だけ PROPER をかけたいなら、IF を組み合わせます。

=ARRAYFORMULA(IF(A2:A="","",PROPER(A2:A)))

実は PROPER は空のセルに対してエラーを出さず、空文字を返します。そのため PROPER だけなら、IF の有無で見た目の結果は変わりませんでした。

IF が役立つのは、式を発展させるとき。たとえば PROPER の結果に別の文字をつなげると、空行にもその文字だけが出てしまいます。最初から IF で空行を外しておけば安心です。

なお、空行の結果は「見た目は空でも長さ0の文字列」です。3つの式とも ISBLANK は FALSE で、上の5行を COUNTA で数えると空行も含めて5になりました。件数を数えたいときは、元のA列で数えるのが確実です。

MAPとLAMBDAで書く

MAP と LAMBDA を使っても、同じ変換ができます。

=MAP(A2:A6,LAMBDA(x,IF(x="","",PROPER(x))))

MAP は範囲の値を1つずつ取り出し、LAMBDA に書いた処理をかけて同じ形で返します。x は各セルの値につける仮の名前です。処理を LAMBDA の中に書き足せるので、式が長くなっても読みやすいのが利点。

ここでは A2:A6 のように範囲を決めて確かめています。下まで開いた範囲で使う場合は、少ない行で結果を確かめてから広げてください。

どれを選ぶかの判断表

書き方式の短さ空白行の扱い辞書補正との組み合わせ
ARRAYFORMULA(PROPER(A2:A))最短空文字(見た目は空)辞書補正の式は1セル用なので、別に下へコピーする
ARRAYFORMULA(IF(A2:A="","",PROPER(A2:A)))やや長い空文字。式を書き足しても空行は空のまま同上
MAP(A2:A6,LAMBDA(x,IF(x="","",PROPER(x))))長め空文字LAMBDA の中に REDUCE を入れる形が考えられる(本記事では未検証)

迷ったら、次の基準で選んでみてください。

  • PROPER だけで列をそろえる → ARRAYFORMULA(PROPER(A2:A))
  • TRIM などを足して式を育てていく → IF 付きの ARRAYFORMULA か MAP
  • 固有名詞の辞書補正が必要 → REDUCE の式を B2 に入れて下へコピー

MAP の中に REDUCE を入れる形を試すなら、数行のデータで結果を確認してから広げましょう。

変換結果だけを残して元の列と置き換える

PROPER の結果は数式なので、元の列を消すと結果も消えてしまいます。元データを変換後の値に置き換えたいときは、次の手順で進めてください。

  1. B列の結果のうち、データのある範囲(例: B2:B6)を選んでコピーします(Ctrl+C)
  2. A2 を選び、値のみ貼り付けをします(Ctrl+Shift+V。Mac は ⌘+Shift+V)
  3. B列の数式を削除します

ARRAYFORMULA で下まで開いた範囲を使った場合も、コピーするのはデータのある行だけにするのがコツです。

よくある質問

元のセルは書き換わる?

書き換わりません。PROPER は、式を入れたセルに変換結果を返すだけです。元の列を置き換えたいなら、前の章の手順で値のみ貼り付けをしてください。

日本語や全角英字が混ざっていても使える?

使えます。日本語の部分はエラーにならず、そのまま残ります。ただし「東京tokyo支店」は変化せず、漢字のすぐ後ろの英字は大文字になりませんでした。

全角英字は、全角のまま頭が大文字になります(abc def → Abc Def)。半角にそろえたいなら ASC 関数が使え、=ASC("abc") の結果は半角の「abc」でした。

=PROPER(ASC(A2))

注意したいのは、ASC がカタカナまで半角にしてしまうこと。「カタカナ」は「カタカナ」に、「ガ」は「ガ」(濁点が分かれて2文字)になります。英字だけの列に絞って使うのが安全です。

なお、逆に半角を全角にする JIS 関数はスプレッドシートにはなく、入力すると #NAME? になりました。

ExcelのPROPERと違いはある?

構文は同じで、引数も1つだけです。アポストロフィの直後が大文字になる(It’S)、全角英字は全角のまま頭が大文字になる、といった動きも Excel で知られている挙動と共通しています。Excel 版の使い方はExcelのPROPER関数の解説にまとめました。

違いが出やすいのは、列全体への当て方。スプレッドシートでは ARRAYFORMULA や MAP を使います。また Excel の JIS 関数はスプレッドシートでは使えないので、シートを移すときは気をつけてください。

空のセルを参照するとどうなる?

エラーにはならず、空文字が返ります。=LEN(PROPER(A2)) は0、=PROPER(A2)="" は TRUE でした。

見た目は空でも「長さ0の文字列」なので、ISBLANK では空と判定されません。空かどうかは =B2="" の形で確かめましょう。

まとめ

スプレッドシートの PROPER 関数は、英単語の頭だけを大文字に、残りを小文字にそろえる関数です。ポイントを振り返っておきましょう。

  • 構文は =PROPER(A2)。john smith も JOHN SMITH も「John Smith」にそろう
  • 全部大文字は UPPER、全部小文字は LOWER、頭だけ大文字は PROPER
  • 余分な空白は =PROPER(TRIM(A2))、アンダースコア区切りは SUBSTITUTE と組み合わせる
  • 文頭だけ大文字にするなら =UPPER(LEFT(A2))&LOWER(MID(A2,2,LEN(A2)))
  • 数字・記号の直後(2Nd)とアポストロフィの直後(It’S)は大文字になるので、SUBSTITUTE で戻す
  • McDonald・iPhone・USA のような固有名詞は、辞書と REDUCE の式でまとめて補正する(空行対策の IF を忘れずに)
  • 列全体は =ARRAYFORMULA(PROPER(A2:A)) か MAP で一括変換。空行の結果は空文字になる
  • 全角英字は全角のまま変換される。半角にするなら ASC(カタカナも半角になる点に注意)

まずは名簿の1列に =ARRAYFORMULA(PROPER(A2:A)) を入れて、結果の一覧を眺めてみてください。2Nd や It’S、Mcdonald のような崩れが見つかったら、この記事の直し方を1つずつ足していけば十分です。

タイトルとURLをコピーしました