IT仕事

Excelでひとつのセルに入力された文字を適当な長さで2つのセルに分割

投稿日:

ひとつのセルに入力された文字を、適当な長さで分割して2つのセルに分ける処理が、思いの外苦労したので、メモ。
セル内容が、半角のみか全角のみで統一されていればもっと簡単なのだが、住所のようなケースで両者が混じっていると、分割位置によっては文字化けしてしまうので困る。
以下が、それを回避してうまくいったコード。
変数の宣言が適当なだけど、そのままにしている。

ポイントは、2バイト文字は2文字としてカウントされるように文字コードを変換することと、切れ目の文字種別をチェックしてそれによりもう一回切ること。
あと、最後の方は最初と同じ処理をさせないように条件分岐させるべきだが、コードの見通しを優先させた。

[code]
Public Sub AddressSep(I As Integer) ‘住所2分割処理 Iは列数の位置
‘品名1に入る文字が半角32文字を超えると品名2に入れる。半角カナ混在のため分割位置が不適の場合は31文字目で分割し直す
Dim c As Object
For Each c In Selection
a = StrConv(c, vbFromUnicode) ‘文字コードをSJISに変換(全角を2文字としてカウントできるように)
b = MidB(a, 1, 32) ‘指定文字数を取り出し
cx = StrConv(b, vbUnicode) ‘文字コードをUNICODEに変換
d = Asc(Right(cx, 1)) ‘切れ目の文字を取り出し
Select Case d
Case Is < &H8890 ‘文字化けなど
x = 31
y = 32
Case Is < &H9890, Is < &HEFFF ‘JIS第一水準、第二水準
x = 32
y = 33
Case Else ‘それ以外(カタカナなど)
x = 31
y = 32
End Select
e = MidB(a, 1, x)
f = StrConv(e, vbUnicode)
g = MidB(a, y, 32)
h = StrConv(g, vbUnicode)
c.Offset(, I) = f
c.Offset(, I + 1) = "’" & h ‘先頭ゼロで数字のみの場合にゼロが消えることの無いように
‘Debug.Print f & h
Next c
End Sub
[/code]

-IT仕事

執筆者:

関連記事

在庫らくだのメニュー部分を、UiPathで操作する->うまくいったり、いかなかったり

テスト中は、うまくいったものが、本番では、うまくいかなくなったり(うまくいくことも、たまに)。 UiExplorerでタグを調べたり、クリックを偽装したり、待機時間を入れてみたりと、いろいろ試してみた …

no image

Shopifyで注文に付けたタグが消える(日本語の場合)

手入力でタグ付けしても、アプリでタグ付けしても、日本語はダメ。気持ち悪いのは、一度、日本語のタグ付けをして、正しく保存されたように見えても、次に画面遷移したらそれが消えていたり、時間がたったら消えてい …

no image

教育訓練給付制度

おや? 久々にITCの公式HPを見ると、こんな記述が。 「ITコーディネータ補資格認定用ケース研修は、2005年度より、厚生労働省教育訓練給付制度の対象講座になっておりません」 私が受験した2年前は、 …

no image

総会にて

「私も理事に名を連ねる一人なのに、事前に相談も無く勝手に動かれては困る」だの、 「会長に謝罪して欲しい」だの。 この件で何十分話をしているのだ いいかげんにして欲しい。 聞いてる20人の皆さんも、うん …

no image

Excelで作ったVBAマクロのシートをZohoで使えるか試してみた

結論でいうと、うごくは動くが、完全ではない。 で、その不完全さが、致命傷だったりする。 自分の場合に気がついたこととして、 ■よいところ ・Googleのアカウントでログインできる。 ・わかりやすい。 …