- ベストアンサー
数千の単語の並び替えについて。
数千の単語(漢字・ひらがな・カタカナ・ローマ字を含む)がEXCELの各セルに一列に並んでいます。 これを、見つけやすいように、あいうえお順に並び替えたいのですが、EXCELの機能「並び替え」を使って並び替えようとすると、かなと漢字、音読み訓読みをパソコンが異なって識別することから、期待通りの配列になりません。 EXCELの機能を利用したり、マクロやVBAのプログラミングで、並び替えが簡単にできないものでしょうか。 今のところは、隣の列にひらがなを手作業で入力して、並び替えています。ものすごい作業量です。 何とかならないものでしょうか。 いい知恵がありましたら教えてください、 VBAの場合は、マクロも教えていただければ助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 まず、ローマ字かな変換関数で、ここから、roma2kana 関数を手に入れてください。 http://park11.wakwak.com/~miko/Excel_Note/15-03_celldata.htm#15-03-57 標準モジュールに登録してください。私自身のローマ字変換もありますが、書き込みが長くなりますので、これを使ってください。 以下のマクロの使い方は、マウスで、変換する先頭の場所を選んでください。 フィールド名(1行目)を変換したくない場合は、2行目から選択します。そして、マクロを実行します。なお、すべての文字が、ひらがなに変換されるとは限りませんので、変換後のデータを一度点検してください。 '<標準モジュール> Sub ForSortPrepare() '要: roma2kana 関数 'http://park11.wakwak.com/~miko/Excel_Note/15-03_celldata.htm#15-03-57 Dim Rng As Range Dim c As Range Dim myStr As String, tmpbuf As Variant '-------------------------------- Const 出力列 As Long = 3 '出力する列は、右へ3個目 '-------------------------------- Set Rng = Range(ActiveCell, Cells(65536, ActiveCell.Column).End(xlUp)) If Application.CountA(Rng) = 0 Then MsgBox "データがありません。": Exit Sub If Application.CountA(Rng.Offset(, 出力列)) > 0 Then _ MsgBox "出力列にデータがありますので削除してください。": Exit Sub Application.ScreenUpdating = False On Error Resume Next For Each c In Rng If VarType(c) = vbString Then Select Case True Case c.Value Like "[A-z]*" '全角ローマ字 myStr = StrConv(c.Value, vbNarrow) myStr = StrConv(roma2kana(myStr), vbHiragana) Case c.Value Like "[A-z]*" '半角ローマ字 myStr = StrConv(roma2kana(c.Value), vbHiragana) Case c.Value Like "[ァ-ヶ]*" '全角カタカナ myStr = StrConv(c.Value, vbHiragana) Case c.Value Like "[一-钁]*" '漢字 tmpbuf = Application.Phonetic(c.Value) If IsError(tmpbuf) Then myStr = Application.GetPhonetic(c.Value) Else myStr = Application.Phonetic(c.Value) End If myStr = StrConv(myStr, vbHiragana) Case c.Value Like "[" & Chr(161) & "-" & Chr(223) & "]*" '半角カタカナ myStr = StrConv(c.Value, vbWide) myStr = StrConv(myStr, vbHiragana) Case Else myStr = c.Value End Select Else myStr = c.Value End If c.Offset(, 出力列).Value = myStr '出力は、右隣3目 'Phonetic関数のエラーの出たときに回避するため ? myStr = vbNullString Next On Error GoTo 0 Application.ScreenUpdating = True End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルの振り仮名機能をご存知の質問でしょうか。 メニューの書式-ふりがな-・・・とかPhonetic関数です。 それが使えないケースがあり、そのケースでしょうか。
お礼
感謝。
補足
こんにちは。回答感謝です。 >それが使えないケースがあり、そのケースでしょうか。 そうなんです。 くわしくは、#2の方への補足文をご覧ください。
- Wendy02
- ベストアンサー率57% (3570/6232)
>数千の単語(漢字・ひらがな・カタカナ・ローマ字を含む)がEXCELの各セルに一列に並んでいます。 >かなと漢字、音読み訓読みをパソコンが異なって識別することから、期待通りの配列になりません。 つまり、漢字・ひらがな・カタカナ・ローマ字を一定の基準の「読み下し」に戻すということだと思います。つまり、ひらがなにしてしまいます。そして、取り出した後に、並べ替えをすればよいのだと考えています。 カタカナや、ローマ字は、ひらがなに直せますから、後は、漢字のみだと思います。 漢字に関する限りは、ユーザーの希望するレベルに「読み(ふりがな)」を行うかというのは、かなり不可能に近い話なのです。 例えば、「幸子」というのは、「さちこ」「ゆきこ」のどちらかになるかは、コンピュータには分からないわけです。Phonetic 関数で、IMEに変換学習が残っていれば、どちらかには取り出せます。しかし、そうでない、テキストデータなどでは、GetPhonetic で取り出すというのなら、もう、パソコンのお任せになってしまいます。 Phonetic 関数で、漢字のふりがなは取り出せるのですか? つまり、データは、EXCELに直接入力したものですか?それとも、他から貼り付けて、Phonetic 関数で、ふりがなが出せないものですか? もう少し、詳しい状況を教えてくれれば、もう少し、サポートはできるかと思います。
お礼
ただ、私が思うに、関数処理を出来る作業は、一般に、マクロで作業させられると思います。 もし、出来るのであれば、簡単なマクロを教えていただければ、ありがたいです。 久しくVBAから離れていました。感覚が鈍っています。・・・
補足
こんにちは。回答感謝です。 >データは、EXCELに直接入力したものですか?それとも、他から貼り付けて、Phonetic 関数で、ふりがなが出せないものですか? 過去に収集したデータです。いろいろです。EXCEL上で貼り付け加工も繰り返しています。並び替えも。 直接入力後は、Phonetic関数で取り出せますが、これらは、漢字がそのまま出てきます。 今は、「書式」「ふりがな」を使って、ひとつづつふりがなをつけています。これも大変です。 理論上、「かなり不可能に近い話」というのは理解できます。 今の状況では、ふりがなをひとつづつ付けていくしかないのでしょうか。
- Bonjin
- ベストアンサー率43% (418/971)
文字を文字コードに変換して、それを元に並び替えをすると良いかも知れません。 手元にExcelがないので確証は持てませんが、文字から文字コードを取得するような関数があったと思います。
お礼
感謝。
補足
こんにちは。回答感謝です。 実は、以前VBAをかなり使っていましたが、長く使わなかったため、記憶が薄れています。私も、同様の関数を調べましたが、たどり着きませんでした。
お礼
感謝。