• ベストアンサー

数千の単語の並び替えについて。

数千の単語(漢字・ひらがな・カタカナ・ローマ字を含む)がEXCELの各セルに一列に並んでいます。 これを、見つけやすいように、あいうえお順に並び替えたいのですが、EXCELの機能「並び替え」を使って並び替えようとすると、かなと漢字、音読み訓読みをパソコンが異なって識別することから、期待通りの配列になりません。 EXCELの機能を利用したり、マクロやVBAのプログラミングで、並び替えが簡単にできないものでしょうか。 今のところは、隣の列にひらがなを手作業で入力して、並び替えています。ものすごい作業量です。 何とかならないものでしょうか。 いい知恵がありましたら教えてください、 VBAの場合は、マクロも教えていただければ助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

参考URL:
http://park11.wakwak.com/~miko/Excel_Note/15-03_celldata.htm#15-03-57
noname#18526
質問者

お礼

感謝。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

エクセルの振り仮名機能をご存知の質問でしょうか。 メニューの書式-ふりがな-・・・とかPhonetic関数です。 それが使えないケースがあり、そのケースでしょうか。

noname#18526
質問者

お礼

感謝。

noname#18526
質問者

補足

こんにちは。回答感謝です。 >それが使えないケースがあり、そのケースでしょうか。 そうなんです。 くわしくは、#2の方への補足文をご覧ください。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>数千の単語(漢字・ひらがな・カタカナ・ローマ字を含む)がEXCELの各セルに一列に並んでいます。 >かなと漢字、音読み訓読みをパソコンが異なって識別することから、期待通りの配列になりません。 つまり、漢字・ひらがな・カタカナ・ローマ字を一定の基準の「読み下し」に戻すということだと思います。つまり、ひらがなにしてしまいます。そして、取り出した後に、並べ替えをすればよいのだと考えています。 カタカナや、ローマ字は、ひらがなに直せますから、後は、漢字のみだと思います。 漢字に関する限りは、ユーザーの希望するレベルに「読み(ふりがな)」を行うかというのは、かなり不可能に近い話なのです。 例えば、「幸子」というのは、「さちこ」「ゆきこ」のどちらかになるかは、コンピュータには分からないわけです。Phonetic 関数で、IMEに変換学習が残っていれば、どちらかには取り出せます。しかし、そうでない、テキストデータなどでは、GetPhonetic で取り出すというのなら、もう、パソコンのお任せになってしまいます。 Phonetic 関数で、漢字のふりがなは取り出せるのですか? つまり、データは、EXCELに直接入力したものですか?それとも、他から貼り付けて、Phonetic 関数で、ふりがなが出せないものですか? もう少し、詳しい状況を教えてくれれば、もう少し、サポートはできるかと思います。

noname#18526
質問者

お礼

ただ、私が思うに、関数処理を出来る作業は、一般に、マクロで作業させられると思います。 もし、出来るのであれば、簡単なマクロを教えていただければ、ありがたいです。 久しくVBAから離れていました。感覚が鈍っています。・・・

noname#18526
質問者

補足

こんにちは。回答感謝です。 >データは、EXCELに直接入力したものですか?それとも、他から貼り付けて、Phonetic 関数で、ふりがなが出せないものですか? 過去に収集したデータです。いろいろです。EXCEL上で貼り付け加工も繰り返しています。並び替えも。 直接入力後は、Phonetic関数で取り出せますが、これらは、漢字がそのまま出てきます。 今は、「書式」「ふりがな」を使って、ひとつづつふりがなをつけています。これも大変です。 理論上、「かなり不可能に近い話」というのは理解できます。 今の状況では、ふりがなをひとつづつ付けていくしかないのでしょうか。

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

文字を文字コードに変換して、それを元に並び替えをすると良いかも知れません。 手元にExcelがないので確証は持てませんが、文字から文字コードを取得するような関数があったと思います。

noname#18526
質問者

お礼

感謝。

noname#18526
質問者

補足

こんにちは。回答感謝です。 実は、以前VBAをかなり使っていましたが、長く使わなかったため、記憶が薄れています。私も、同様の関数を調べましたが、たどり着きませんでした。

関連するQ&A