参加者の苗字と名前を分離する/選手名を均等な大きさで表示する

得点表示画面に選手名を表示する際、名前の最初の文字と最後の文字の位置はみな揃えてあった方が理想的です。

しかし、日本人の名前は文字数がバラバラです。2文字の人もいれば、6文字の人もいます。


何も工夫していなければ、高さがバラバラに表示されてしまいます。6文字の人にいたっては、名前がはみ出てしまっています。

出来ることなら、苗字と名前の間に適切なスペースを入れたり、字数が多ければ自動的に小さくしたりして、高さを統一したいものです。


このような表示を可能にするには、参加者管理シリーズで作った参加者リストの段階で、各プレイヤーの苗字と名前を分離しておく必要があります。

今回は、「1つのセルにはデフォルトで5文字の名前が入る」という原則に従い、4文字以下の名前についてはスペース含めて5文字になるようにスペースを入れる、6文字以上の名前はスペースを入れず、文字数に応じてフォントの大きさを調節してくれるようにします。

なお、苗字と名前を分離しておくと、ネームプレート作成時や記録集を作る際の得点記録出力など、他の場面においても役に立ちます。

それでは、基本⑤から作っていきます。
完成品はこちらです。

【新しく登場するExcelの機能】

関数「FIND」
関数「LEN」

【作り方】

エントリーフォームにおいて、名前入力欄の段階で苗字と名前を別の入力ボックスに使っている場合、①、②のステップは必要ありません。

もしエントリーフォームの名前入力欄がフルネームを要求するものの場合、「苗字と名前の間に1文字だけスペースを入れること」を参加希望者に伝えておいてください。

それでも、苗字と名前の間にスペースが入っていない人がいた場合、大会主催者側が手動で苗字と名前の間にスペースを1文字入れていくしかありません。

①参加者リストを作り、参加者の名前を入力していく

参加者リスト用のシートを作り、参加者リストを作ります。
現段階では、全ての参加者が、苗字と名前の間に全角スペースが入っている状態です。

②苗字列・名前列に数式を入力する

続いて、B列に入力されたフルネームを、それぞれ苗字(C列)と名前(D列)に分離します。
それぞれ、以下の数式を入力します。

C列:苗字

(C2セルの場合)
=LEFT(B2,FIND(" ",B2)-1)

D列:名前列

(D2セルの場合)
=RIGHT(B2,LEN(B2)-FIND(" ",B2))

LEFT関数とRIGHT関数は、前回にも登場しました。
特定の関数を、最初ないし最後の文字から何文字かだけ抽出する関数でしたね。
しかし今回は、何文字取り出すか、という数字は指定しようがありません。その代わり、「スペースの直前まで」という取り出し方をしなくてはなりません。

そこで、FIND関数の出番です。
FIND関数は、ある文字列の中に、特定の文字が1文字目から数えて何文字目に最初に登場するかを返してくれる関数です。
例えば、「=FIND("や","たけやぶやけた")」の場合、「や」が最初に登場するのは3文字目なので、答えは「3」となります。あくまでも、最初に登場するのが何文字目か、ということなので、2回目以降に登場する「や」の字は無視されます。
なお、先頭の文字以外から検索を開始したい場合は、第3引数にその開始位置を指定して検索させることも可能です。

苗字の分離は、まず、B列に入力されたフルネームの中から、全角スペースが何文字目にあるかを検索します。例えば、苗字が2文字の人の場合は、全角スペースは3文字目にあります。
ですので、LEFT関数で取り出すのは、FIND関数の結果から1引いた値の文字数です。

続いて名前の抽出です。今度はRIGHT関数で抽出する必要がありますが、ここではLEN関数にも協力してもらわなければなりません。
LEN関数とは、ある文字列の文字数を返す関数です。シンプルですね。
そして、RIGHT関数で取り出す文字数は、「(苗字+スペース+名前の文字数)-(スペースがある位置)」です。例えば「(苗字3文字)+(スペース1文字)+(名前2文字)」の場合、RIGHT関数で取り出したいのは最後の2文字だけです。これは、全体の文字数6文字-スペースがある位置4文字目で求めることが出来ますね。

※FIND関数はSEARCH関数でも代用可能です。この2つは非常に似ておりますが、SEARCH関数はFIND関数と違い、大文字と小文字を区別せずに検索するという性質があります。今回は日本人の名前なので、どちらを使っても機能に変わりはありません。

※FIND関数(およびSEARCH関数)は、全角スペースと半角スペースを区別します。そのため、B列に入力すべき苗字と名前の間のスペースは、全角か半角を統一する必要があります。
また、苗字と名前の間にスペースが2文字以上入力されてしまった場合、D列の名前列には、名前の前に余分なスペースが挿入されてしまいます。
B列のスペースは必ず1文字だけにしてください。

③表示用名前列に数式を入力する

続いて、得点表示画面に表示するための文字列(E列)を表示させます。
C列とD列で抽出した苗字と名前の間に、適切な数の全角スペースを挿入させます。

E2セルに以下の数式を入力し、それより下のセルへオートフィルします。

=C2&REPT(" ",MAX(0,6-LEN(B2)))&D2

スペースを挿入する際は、前回にも登場したREPT関数を使用します。
スペースを何文字入れるか、というのは、6-LEN(B列の文字数)で求めることが出来ます。例えば、苗字が2文字、名前が1文字の人の場合、E列で挿入すべきスペースの文字数は2文字です。B列の文字数はスペース含めて4文字ですから、6から4を引けば2文字挿入すればよいことがわかります。
ただし、もともと苗字と名前合わせて6文字を超える場合、スペースは挿入する必要がありません。また、REPT関数の第2引数(文字を繰り返す数)にはマイナスの値を指定することはできません。そのため、MAX関数を使うことで、REPT関数の第2引数に0未満の数が入らないようにしておく必要があります。


E列にはそれぞれ適切な量の全角スペースが挿入された形で表示されています。
デフォルトのフォントである「MS Pゴシック」だとわかりづらいかもしれませんが、他のフォント(例えばHGS創英角ゴシックUB)に変えてみれば、きちんとそろっていることが確認できます。

④得点表示画面の名前表示セルの書式設定を変える

いよいよ、得点表示画面に名前を表示します。
今回は簡単な例を示すだけなので、名簿シートのA列に指定した番号を元に、INDEX関数とMATCH関数で名前を表示していきます。

まず、得点表示シートの第2行(空白になっているところ)に左から1,2,3,4,5と入力し、次に第3行の名前表示セルに数式を入力します。

(D3セルの場合)
=INDEX(名簿!$E$2:$E$6,MATCH(得点表示!D2,名簿!$A$2:$A$6,0))


おや、6文字の人だけはみ出てしまっておりますね。
そこで、「セルの書式設定」の出番です。
【参加者管理④】得点タワーの回でもちらっと解説しました。

まず、名前表示セル全体(D3:K3)を選択し、右クリックから「セルの書式設定」を選択します。

「配置」タブを開き、「縮小して全体を表示する」のチェックボックスをONにします。


これで、6文字の佐々木さんもきちんと表示されました。

コメント

このブログの人気の投稿

基本①:「m○n×クイズ」の得点表示の作り方

勝ち抜け時に順位を表示する