エクセルで文字列を1セル1文字に分割する方法(濁点・半濁点も1文字として)

<スポンサーリンク>

エクセルで文字列を分割する方法を紹介します。

私が以前勤めていた会社で、顧客に送るエクセルの書類で1セルに1文字で記載する必要のあるものがありました。
顧客側ではシステムに取り込む必要からそうしていた訳ではなく、見ながら手打ちで入力していたとかなんとか・・
いわゆる「ネ申エクセル」というものですね

ちなみに下の画像のような単純に1セル1文字の場合はインストラクターのネタ帳様の記事が非常に分かり易いと思いますし検索すればたくさん記事が載っています。

私が以前行っていた文字分割は下の画像のような濁点・半濁点を1文字として入力するものでした。
ちょっと関数では対処できないためVBAを使って処理していました。

というわけで本題に入ります。
濁点・半濁点を1文字として文字列を分割する方法を紹介します。

目的のエクセルファイルを開いてください。
「Alt」を押しながら「F11」を押してください
下のような画面が出てくると思います
(青枠で囲った部分のメニューが出ていない場合は「Ctrl」を押しながら「r」を押してください)
目的のファイル名の上で右クリック
「挿入」をクリック
「標準モジュール」をクリック

すると右側に大きな白いスペースが現れたと思います
※↓画像の赤枠部分

そのスペースに下記のコードをコピペしてください

Sub mojibunkatsu() 
    Dim c As Range
    Dim i As Integer
    Dim t As Integer
    Dim str As String
    Const moji1 As String = "がぎぐげござじずぜぞだぢづでどばびぶべぼガギグゲゴザジズゼゾダヂヅデドバビブベボ"
    Const moji2 As String = "ぱぴぷぺぽパピプペポ"
    Const moji3 As String = "ヴ"

    For Each c In Selection
        t = 0
        For i = 1 To Len(c)
            str = Mid(c, i, 1)
            If InStr(moji1, str) > 0 Then
                c.Offset(0, t + i) = Chr(Asc(str) - 1)
                c.Offset(0, t + i + 1) = "゛"
            t = t + 1
            ElseIf InStr(moji2, str) > 0 Then
                c.Offset(0, t + i) = Chr(Asc(str) - 2)
                c.Offset(0, t + i + 1) = "゚"
                t = t + 1
            ElseIf InStr(moji3, str) > 0 Then
                c.Offset(0, t + i) = Chr(Asc(str) - 79)
                c.Offset(0, t + i + 1) = "゛"
                t = t + 1
            Else
                c.Offset(0, i + t) = str
            End If
        Next
    Next
End Sub

今貼り付けたコードを実行します。
分割したい文字列の入ったセルを選択します。

「開発タブ」の「マクロ」を選択
開発タブが表示されて無い場合は開発タブを表示する方法を参考にしてください
「mojibunkatsu」を選択し「実行」をクリックしてください

これで濁点・半濁点を1文字として分割できたと思います。

なかなかニッチな使い方だとはおもいますが、役に立つという人はぜひ使ってみてください。

<スポンサーリンク>
シェア頂けると嬉しいです!よろしくお願いします!
  • URLをコピーしました!
目次