IT仕事

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

投稿日:

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

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

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

-IT仕事

執筆者:

関連記事

no image

Titanimu Studioを試している。

書籍を揃えて試しているのだが、以下の部分でエラーになる。 win1.hideTabBar(); エラーメッセージは、 <TiBaseWindow> has no method &#8216 …

Yahooショッピングで提供している商品をカートごと自身のページに設置できるか

やってみた。 結論からいうと、カートボタン以外は、できた。 カートボタン以外は・・・。 てすと YahooショッピングAPIの公式ガイドは、こちら。 ショッピング:商品コード検索(商品詳細) &#82 …

no image

仕事in靴屋さん

店長さん、極めて博識、且つやる気十分。 腕も優秀、たいした職人。 従業員も情熱的。 よっしゃ! あとはオレがIT魂でもって別世界(金銀財宝がうなるところ)へと連れてってやらア! と、大風呂敷。 ・・・ …

no image

DreamWeaverでXamppでMySqlでトラブルで

DreamWeaverCS6とXampp+MySqlを接続しようとしたのだがうまくいかず4時間ほど格闘。 一番はまったのが、右上のスクリーンショット「サイト設定」の、「使用する接続」が「ローカル/ネッ …

no image

テスト

FLASHファイル作成ソフトのFreeMotionを使って、アニメーション作りにチャレンジしている。 といっても、写真をパノラマスクロールするやつだけど。 造ったことのある人は簡単なんだろうけど、初め …