- ベストアンサー
エクセルで漢字(カナ)を分ける方法
- エクセルで1つのセルに入った漢字(カナ)を分ける方法について教えてください。
- 具体的には、A1のセルに「山田 花子(ヤマダ ハナコ)」と入力されている場合に、B1のセルに「山田 花子」、C1のセルに「(ヤマダ ハナコ)」と分けてデータ化する方法を知りたいです。
- また、C1のセルにはPHONETIC関数を使って「やまだ はなこ」に直したいですが、エラーが起きないで処理できるでしょうか?
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
No.3です! たびたびごめんなさい。 C列がカタカナの場合はひらがなに直さないといけなかったのですね? もう一度コードを載せておきます。 Sub test() Dim i As Long Dim buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row On Error Resume Next buf = WorksheetFunction.Substitute(WorksheetFunction.Substitute _ (Cells(i, 1), "(", "("), ")", ")") With Cells(i, 2) .Value = Mid(buf, 1, WorksheetFunction.Find("(", buf) - 1) .Offset(, 1) = Mid(buf, WorksheetFunction.Find _ ("(", buf) + 1, Len(buf) - Len(Cells(i, 2)) - 2) .Offset(, 2) = StrConv(Cells(i, 3), vbHiragana) End With Next i Columns(3).Delete (xlToLeft) Columns("A:C").AutoFit End Sub こんな感じではどうでしょうか? 何度も失礼しました。m(__)m
その他の回答 (7)
- layy
- ベストアンサー率23% (292/1222)
>最終的なデータとして >A1セル→山田 花子(やまだ はなこ) 編集元のA列「山田 花子(ヤマダ ハナコ)」も上書き修正したいですか? B列とC列ができた後で連結でもいいのでは?。
お礼
ありがとうございました
- imogasi
- ベストアンサー率27% (4737/17069)
A1に山田花子とありB列に=A1&"("&PHONETIC(A1)&")"と入って、山田 花子(ヤマダ ハナコ)となっているので「ない」場合を考える。こういう場合もあるということ。 ーー ?1に山田 花子(ヤマダ ハナコ)とある場合は、データー区切り位置ーその他で( 左カッコ を指定ー完了 で出来る。 )は置換で抹消する。 これが一番簡単で安定。さらにB列で)で区切り位置にしても良い。 マクロの記録をすれば、VBAコードはわかる。 複数行分もはじめ範囲指定して始めれば良い。 ーー VBAでReplaseやInstr関数でやる手もあるが、関数などでやるのが良かろう。VBAの勉強をしているのですか。 1回限りの作業のようだし、VBAを使うまでも無いだろう。 エクセルに強い方でなくても出来ることだ。
お礼
ありがとうございました
- layy
- ベストアンサー率23% (292/1222)
『山田 花子(ヤマダ ハナコ)』 VBAでは この文字数分(=14)ループしてもできる話です。 区切り分けたり、(括弧)を削除したり、かなに変えたり、 とすべてを処理しながらB列やC列の編集をする。
お礼
ありがとうございました
- kmetu
- ベストアンサー率41% (562/1346)
追加です "(" の部分の「(」の半角と全角を間違うとエラーになります。
お礼
ありがとうございました
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 関数の方が簡単なような気がしますが、VBAをご希望のようなので・・・ 一例です。 (単に関数でやる方法をコードにしただけです) A列のデータは1行目からあり、必ず( )があるという前提です。 Sub test() Dim i As Long Dim buf As String For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row On Error Resume Next buf = WorksheetFunction.Substitute(WorksheetFunction.Substitute _ (Cells(i, 1), "(", "("), ")", ")") With Cells(i, 2) .Value = Mid(buf, 1, WorksheetFunction.Find("(", buf) - 1) .Offset(, 1) = Mid(buf, WorksheetFunction.Find _ ("(", buf) + 1, Len(buf) - Len(Cells(i, 2)) - 2) End With Next i Columns("A:C").AutoFit End Sub こんな感じではどうでしょうか?m(__)m
お礼
ありがとうございました
- kmetu
- ベストアンサー率41% (562/1346)
B1に =LEFT(A1,FIND("(",A1)-1) で山田 花子が C1に =MID(A1,FIND("(",A1)+1,LEN(A1)-LEN(B1)-2) でヤマダ ハナコが それぞれ取り出せます 取り出した後にコピー形式を選択して貼り付けで「値」を貼り付けて その後PHONETICと書式のふりがな機能を使って直しください。
お礼
ありがとうございました
- keithin
- ベストアンサー率66% (5278/7941)
Sub Macro1() Dim r As Long r = Range("A65536").End(xlUp).Row Range("A1:A" & r).Replace what:=")", replacement:="", matchbyte:=False Range("A1:A" & r).Replace what:="(", replacement:="(", matchbyte:=False Range("A1:A" & r).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ Other:=True, OtherChar:="(", FieldInfo:=Array(Array(1, 1), Array(2, 1)) Range("B:B").Phonetics.CharacterType = xlHiragana Range("C1:C" & r).Formula = "=PHONETIC(B1)" Range("A:A").Insert Range("A1:A" & r).Formula = "=B1&""(""&D1&"")""" Range("A1:D" & r).Value = Range("A1:D" & r).Value Range("C:C").Delete Range("A:C").EntireColumn.AutoFit End Sub #要らないループ処理は省いているので,見た目なんだかべたべたですね。
お礼
ありがとうございました
お礼
丁寧なご説明ありがとうございました