[[20160705104136]] 『漢字とカタカナの間にスペースを入れたい』(いち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『漢字とカタカナの間にスペースを入れたい』(いち)

漢字とカタカナの間にスペースを入れる方法を教えてください。
数百もの語句を処理したいので、関数で処理ができればと思っています。
セルはいくら増えても構いません。

条件としては
1.漢字とカタカナの間は必ず詰まっている
2.漢字とカタカナはどちらが先に来るかわかりません
3.1つの語句の中に何度も出るケースもあります
例)漢字カタカナ漢字カタカナ
4.カタカナが続く場合はスペースが入っている所もあります
5.スペースは半角
6.カタカナは全て全角

7.できればアルファベット(半角)も含めて対応したい

以上になります。

ご教授のほど宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


正規表現を利用すればシンプルに処理できるので、マクロで対応するのが良いと思いますが、いかがでしょう?

関数(数式)だと、全てのカナ文字+アルファベット(大文字小文字は混在?)をひとつずつ探すか、半角化して文字が変わるか、とかで処理になり、超面倒そうなのですが…。(半角化する場合、濁点があると1文字増えてしまうので、難しそう)
(???) 2016/07/05(火) 11:24


返信ありがとうございます。

マクロでも構いません!
宜しければ教えていただけますか?

なお、アルファベットは大文字小文字が混在します。

(いち) 2016/07/05(火) 11:32


 2,3の例題と変換後の期待値を提示してもらえませんか?
(seiya) 2016/07/05(火) 12:45

こんにちは

例題と変換後の期待値が提示されてからの方がいいでしょうけど・・・

多分、パターンと置換を駆使すれば一括処理出来るのかも知れませんが、
いまいち正規表現って良く理解出来ないので、チマチマとA列のデータをB列に変換するとして

Sub test()

    Dim e As Object
    Dim p As String
    Dim i As Long

    Set e = CreateObject("VBScript.RegExp")

    With e
        .IgnoreCase = True
        .Global = True
        For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
            p = "([亜-熙]+)"
            .Pattern = p
            Cells(i, 2) = .Replace(Cells(i, 1), " $1 ")

            p = "([ァ-ヶ]+)"
            .Pattern = p
            Cells(i, 2) = .Replace(Cells(i, 2), " $1 ")

            p = "([a-z]+)"
            .Pattern = p
            Cells(i, 2) = .Replace(Cells(i, 2), " $1 ")

            p = "([ ]+)"
            .Pattern = p
            Cells(i, 2) = .Replace(Cells(i, 2), " ")

            Cells(i, 2) = Trim(Cells(i, 2))

        Next i
    End With
    Set e = Nothing

End Sub

ひらがなは無視していいのですか?

(ウッシ) 2016/07/05(火) 13:51


 文字列がA列にあり、結果をB列に表示

 Sub test()
    Dim a, i As Long
    With Range("a1").CurrentRegion
        a = .Value
        With CreateObject("VBScript.RegExp")
            .Global = True
            For i = 1 To UBound(a, 1)
                .Pattern = "([亜-龠])(?=[^[亜-龠0-9あ-ん])"
                a(i, 1) = Application.Trim(.Replace(a(i, 1), "$1 "))
                .Pattern = "([^[亜-龠0-9あ-ん])(?=[亜-龠])"
                a(i, 1) = Application.Trim(.Replace(a(i, 1), "$1 "))
            Next
        End With
        .Columns(2).Value = a
    End With
End Sub 
(seiya) 2016/07/05(火) 14:11

私はVBAの命令だけで書いてみますね。ひらがな、数字、記号等は、文字列中に無いものとします。

 Sub test()
    Dim i As Long
    Dim j As Long
    Dim c1 As String
    Dim c2 As String
    Dim cw1 As String
    Dim cw2 As String

    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        cw1 = Cells(i, "A").Value
        cw2 = Left(cw1, 1)
        For j = 2 To Len(cw1)
            c1 = StrConv(Mid(cw1, j - 1, 1), vbWide Or vbUpperCase)
            c2 = StrConv(Mid(cw1, j, 1), vbWide Or vbUpperCase)
            If c1 Like "[亜-龠]" And c2 Like "[ァ-ヶA-Z]" Or _
               c1 Like "[ァ-ヶA-Z]" And c2 Like "[亜-龠]" Then
                cw2 = cw2 & " "
            End If
            cw2 = cw2 & Mid(cw1, j, 1)
        Next j
        Cells(i, "B").Value = cw2
    Next i
 End Sub
(???) 2016/07/05(火) 14:21

こんにちは

漢字って、亜-龠 なんですね。

参考先サイト違ってたのか・・・

修正しておいて下さい。

(ウッシ) 2016/07/05(火) 14:28


返信していただいた方ありがとうございます!

すいません、文中にはひらがなもあります。
ひらがな、カタカナ、漢字、アルファベットは全て間にスペースをいれたいです。

(いち) 2016/07/05(火) 18:15


 >漢字とカタカナの間にスペースを入れる方法を教えてください。 
 と言いながら
 >ひらがな、カタカナ、漢字、アルファベットは全て間にスペースをいれたいです。

 具体例を示さないと意味が無い。

(seiya) 2016/07/05(火) 18:25


条件を足されても、ますます条件不十分になっただけです。やはり全てを網羅した実例ですね。

例えば、カタカナとひらがなが連続した場合も、間にスペースなのですか? アルファベットも?
それとも、漢字とそれ以外の間だけスペース? 数字はあり得ない? 記号は?

更に言うと、その違いは皆さんの挙げたサンプルを、ご自分で追加修正して対応はできませんか?
必要な命令は全て書かれていますよ。追加するのは文字だけ。
(???) 2016/07/06(水) 09:09


 私も横から失礼します。

 皆さん指摘の通り、「すべてのパターンを網羅した実例」が必要でしょう。
 もっとも、すでにseiyaさんから提示のあったコードを理解して、追加のバリエーションに対しては自分でコード変更できるというなら別ですが。

 で、さらに申し加えるなら、前のほうでコメントしましたが、例をどさっと提示して、そのルールは想像してくれという方法では
 絶対に漏れが出ます。

 たとえば、高校生のアルバイト君に、こんな表がある、ここにある文字列の一部を消しゴムで消してくれと作業指示をするとします。
 その場合、「一部ってどこですか?」という質問が出ますよね、絶対に。
 なので いち さんは、消しゴムで消すルールをすべてもれなくアルバイト君に教えなければいけません。
 表の、どの部分が対象だというのは、もちろんです。固定された表ではなく列が増減するような表であれば
 とくに明確に、こんな条件の列という説明が必要です。

 もちろん、消しゴムの条件、この列とこの列に値がある場合にのみとか、( )で囲まれたものをどうするとか
 /で区切られたものは、どうするとか、そのほかにも、 いち さんが頭の中に持っている消しゴムルールがあれば
 それをすべて吐き出さなければいけません。

 このQ/A,そういった説明は、いち さんから 一切あがっていません。
 単に、現象面といいますか、こういう文字列は、このように変換 という 「単なる例」しか提示されていません。
 「単なる例」の場合、受け取り方は千差万別になる可能性があり、これもコメントしたかと思いますが
 やりとりが、いたずらに長引くだけだと思います。

(β) 2016/07/06(水) 09:24


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.