質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

意見交換

クローズ

7回答

1889閲覧

姓と名の間に全角スペースを1つ入れる

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

1グッド

1クリップ

投稿2023/07/03 04:26

1

1

テーマ、知りたいこと

氏名フィールドのレコードを、姓と名の間に全角スペースが1つ入った形に統一したいが、どのように実現するか。

背景、状況

全角スペース1つではなく半角スペースが2つ入っていたり、名の後ろにスペースが入っていたり、そもそもスペースが入っていなかったり…と、客先から預かったExcelデータの形がバラバラで困っています。
毎回Excel上やインポートしたAccess上で置換したり手動でスペースを入れたりしてデータを整形しているのですが、レコード数が多いとそれだけでかなりの時間を要します。
最短かつ確実にデータ整形するのに何か良い方法はありませんでしょうか?

全角スペース2つを全角スペース1つに置換、クエリでtrimした後、姓と名の間にスペースが無いものを手動でレコードを確認しながら手打ちしています。

takanaweb5👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答7

#1

maisumakun

総合スコア146544

投稿2023/07/03 04:38

大きな問題として、「切れていないものの区切り位置をどう判断するか」があります。

たとえば、「平光清」が「平 光清」か「平光 清」かは、他に情報がなければ判別不能です。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

Zuishin

総合スコア28673

投稿2023/07/03 05:42

特に外国籍の人など、名前が姓名という形にならないこともあるので、姓名の間にスペースを入れるのをやめ、一つの名前にするのが楽です。

どうしてもしなければならない理由があるのであれば、そもそもデータを入力する時点で姓と名のフィールドを分けておくのが良いでしょう。

後で整形しなければならないのであれば、人の名前を間違えると失礼にあたるので、人の目でチェック・修正する工程を入れる方がうまくいくことが多いです。

マクロや条件付き書式などを使って、条件に合わないフィールドを目立たせると修正が少し楽になります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

otn

総合スコア86293

投稿2023/07/03 05:52

何らかのスペースが入っているなら、半角であろうが全角であろうが2つ以上であろうが、簡単ですが、

そもそもスペースが入っていなかったり

は1つ1つ手作業以外はあり得ないということで良いですよね?

空白が入っているデータについては、
・手作業でやる場合:
1.氏名列の右側に空列を挿入
2.氏名列を選択して、データ⇒区切り位置⇒区切り文字を「スペース」で区切る

・VBAでやる場合:
やりたいことをそのまま書けば良いので略。

・セル関数でやる場合:
上記のどちらかでやった方が良い。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

hatena19

総合スコア34352

投稿2023/07/03 13:14

全角スペース1つではなく半角スペースが2つ入っていたり、名の後ろにスペースが入っていたり、

の部分は更新クエリで簡単にできますよね。「半角スペースが2つ」はReplace関数で変換できます。(引数で全角、半角を区別しないテキストモードに指定する。)「名の後ろにスペース」はTrim関数で。

そもそもスペースが入っていなかったり

これが難題ですね。

全角スペース2つを全角スペース1つに置換、クエリでtrimした後、姓と名の間にスペースが無いものを手動でレコードを確認しながら手打ちしています。

前半の部分は上記で説明した更新クエリでできますが、それはできているということでいいですか。
後半の「姓と名の間にスペースが無いものを手動でレコードを確認しながら手打ち」の部分が時間を要するために、これを出来る限り効率的にする方法はないか、というのがこの質問の要点ですよね。

まず、思いついたのが、下記のようなデータを利用して、区切りのない氏名データから、名字をマッチングさせて切り出す処理をVBAで自作する。字数の多い名字から順にマッチングさせていけばある程度の精度まではできそうです。

全国名字(苗字)ランキング|名字検索No.1/名字由来net|日本人の苗字・姓氏99%を掲載!!

#1 maisumakunさんが例示した「平光清」が「平 光清」か「平光 清」』のようにどちらともとれるようなものは第1候補、第2候補・・・として提示して最終的にはユーザーが選択するような設計にすればいいでしょう。

ここまで考えて、このような要望は割とありそうなので、そのようなツールがあるのでは、ということで検索してみたら下記のツールがヒットしました。

姓名分割くん - 名字(苗字)と名前を一括で分割するツール

地味に便利、日本人のフルネームを姓と名に分割するツールのPythonパッケージ公開【やじうまWatch】 - INTERNET Watch

前者の方を少し試してみましたが、わりと精度高く分割できそうです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

退会済みユーザー

退会済みユーザー

総合スコア0

投稿2023/07/03 23:40

お三方とも、ありがとうございます。
やはりスペースが入っていない・組み合わせが複数あるレコードがネックですね。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

Zuishin

総合スコア28673

投稿2023/07/03 23:55

モンゴルやインドネシアやミャンマーの人には姓が無いので、それを扱うことが必要になればシステム全体の大幅な見直しが必要になります。
名前が三つ以上ある人も大勢います。

つまり姓名という形に依存していること自体がネックであり、スペースの有無の問題はそれに付随するものでしかありません。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#7

think49

総合スコア18194

投稿2023/07/05 11:55

編集2023/07/05 11:56

最短かつ確実にデータ整形するのに何か良い方法はありませんでしょうか?

#1 の問題があるので客先に修正してもらうが確実かつ堅実な方法だと思います。
客先のミスを防ぐという観点では、#2 のフィールドを分けるのが良い対策だと思います。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問