Calc で名簿操作・文字列操作

< 最終更新日時: 2023-12-07 >

姓と名の切り分け

1 つのセルに格納されている氏名から姓と名を切り分ける方法を紹介します. 特に年賀状などの宛名印刷を目的とする場合には,姓と名の文字数の組合せによってバランスが崩れることを避けるために,次のように全角空白が何文字か挿入される場合があります(わかりやすくするために全角空白を・で示します).

相・川・・健・一
阿久津・・建・司
香・坂・・正次郎
塩・沢・・・麗

このような厄介なデータを渡されてしまった場合は,検索&置換機能などを使ってある程度までムダな空白を取り除いて,手動で微調整しなければならないかもしれません.

あるいは,少しでもデータ量を抑えようとしたのか,姓と名が区切りなしで格納され,人間の目でみても一意に切り分けることが難しいデータを渡される場合もあるかもしれません (フリガナ付きならば人力で何とか切り出せるかもしれませんが).

ここでは演習用名簿データの CSV ファイルのように,氏名のデータで姓と名の間に (だけ) 半角空白が 1 文字だけ入っている「筋の良い」データを扱うことだけ考えましょう※1B 列の氏名から切り出した姓を F 列に,名を G に格納する手順を紹介します.

  1. F2 セルを選択し,次の数式を入力します※2find 関数の第1引数は半角空白を 1 文字をダブルクォーテーションで挟んでいます.
    =left(b2, find(" ", b2)-1)
    
  2. G2 セルを選択し,次の数式を入力します※2
    =right(b2, len(b2)-find(" ", b2))
    
  3. F2 セルをクリックし,ボタンを押し下げたまま G2 までドラッグしてセル範囲を選択します (図1)※3
    図1・セル範囲F2:G2を選択
    図1・セル範囲 F2:G2 を選択
  4. G2 セルの右下隅の小さな黒い四角 (フィルハンドル) 付近にマウスカーソルを合わせると,マウスカーソル形状が 図2 のように十字形に変わります.
    図2・フィルハンドル
    図2・フィルハンドル
  5. 図2 の状態でマウスをダブルクリックするか,ボタンを押し下げたまま下方向へドラッグして,名簿の最下行 (G41) でボタンをリリースすると,ドラッグした範囲に関数をコピーすることができます※3

省略表記の生成

同姓の人がいない場合は「相川」のように姓だけを,同姓の人が複数いる場合は「神谷(芳)」,「神谷(流)」のように名の先頭 1 文字を加えるような省略表記を見かけることがあります. これをある程度まで自動的に生成することを考えてみましょう. 姓が F 列に,名が G に格納されているとき,H 列に省略表記を生成することにします.

  1. H2 セルを選択し,次の数式を入力します※4
    =if(countif(f$2:f$41, f2)=1, f2, concat(f2, "(", left(g2, 1), ")"))
    
  2. H2 セルの関数を H41 セルまでコピーします※3

ちなみにこの方法では,「斉藤」と「斎藤」のように異字体が使われている場合には,別の姓とされてしまうため対応できません. countif で同じ姓がいくつあるかを漢字表記で調べるのではなく,姓のフリガナを使って調べればクリアできそうですが,今度は「五十嵐」のように「イカラシ」と「イガラシ」の 2 通りの読みがある場合に,別の姓とされてしまいます. どちらにも対応するには,H2 セルの数式を次のようにすればよいでしょう (姓のフリガナが I 列に格納されているものとします).

=if(and(countif(f$2:f$41, f2)=1, countif(i$2:i$41, i2)=1), f2, concat(f2, "(", left(g2, 1), ")"))

これでも,姓ばかりでなく名の先頭 1 文字までが等しい場合には同じ略称が生成されてしまいます. どんな場合でもうまくいく方法を考えるのは,なかなか難しそうです. 最後は人の目によるチェックが必要であることをよく覚えておきましょう.