[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『漢字とカタカナの間にスペースを入れたい』(いち)
漢字とカタカナの間にスペースを入れる方法を教えてください。
数百もの語句を処理したいので、関数で処理ができればと思っています。
セルはいくら増えても構いません。
条件としては
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
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.