2020年のゴールデンウィークは新型コロナウィルスの感染拡大でずっと家にこもっている生活を余儀なくされた、ある意味で忘れられないゴールデンウィークになりました。
こんにちは! 松田軽太です。
さて、ということで家にこもってパソコンのフォルダを整理していたら『備考欄に全角と半角が混在している場合に20文字づつのように特定の文字数で分割したい場合にどうすればよいか?』という方法を書いた説明を発掘したので、今回はこれを記事のネタにしたいと思います。
多くの業務システムの画面には「備考」という何でもかんでも入力できる項目がありますよね。
このデータを他システムへデータ連携する場合、受け取るシステム側の文字数制限で2つの項目に分割しなければならないことってありませんか?
例えば業務システム側の備考項目の桁数が40文字だったとして、それをCSVとかExcel出力します。しかし取り込み側の業務システムには20文字つづの備考1と備考2があり、分割しなければなりません。
・・・と、こんなシュチュエーションが実際にありました。
それを作業担当者がやってみると意外にめんどうくさくて「なんとかして欲しい」と助けを求められました。
では、その時の手順を説明していきましょう。
文字を分割する場合は MID関数 又は MIDB関数 を使います。
MID関数は全角半角の区別なく1文字づつ数を数えます。MIDB関数は全角文字は2文字とし、半角文字は1文字として数えます。
今回は全角文字(名前)と半角文字(コロン : や スラッシュ/)があるので MIDB関数 を使います。
では下記のデータを例に「備考」を20文字づつ2つの項目に分割します。
するとの二宮君の「二」が「備考1」にも「備考2」にもありません。
これは半角文字がイタズラしているのです。
この場合、分割したい「備考」項目に含まれる半角文字が奇数か偶数かで MIDB関数の引数を変えてあげる必要があります。
半角文字数が奇数の場合は 21 にします。 半角文字数が偶数の場合は 20 にします。
ではどうすれば、いいのでしょうか?
そんな時はこうすれば実現できるので参考にしてください。
「備考」の半角文字数を調べる
半角文字の数だけを調べるには、まず最初にLENB関数とLEN関数で文字数を調べます。 LENB関数 は 文字数をバイト数で数える関数で全角文字だと2文字として数えます。
備考に含まれている半角文字は : と / と / と / と / の5文字です。
偶数か奇数を判別する
ISODD関数を使うことで奇数かどうかを調べることができます。
そしてIF関数で先ほどのISODD関数の結果がTRUE(奇数)かどうかによって
20文字なのか21文字なのかを判断します。
ここまで準備ができたら、備考1と備考2に分割できます。
まず備考1はMIDB関数で1文字目から20文字とします。
次に備考2はMIDB関数で先ほどの分割文字数から20文字とします。
このように全角と半角が混在していると、たかだか項目を2つに分割するだけのことで、こんなメンドクサイ準備が必要になってしまうのです。
まとめ
全角と半角が混在する項目を分割する場合、思わぬトラブルが起こる場合があります。
今回のように何でも入力できてしまう「備考」のような項目にはどんな文字が入力されてしまうか分かりません。
しかし「自分が何をしたいのか?」という目的を明確に持てば、複数の関数を組み合わせて手順を考えていけば、まぁ、たいていのことは何となりますよ。