• ベストアンサー

excel2013でデータを昇順に並べ替えをしたい

excel2013でシート1にB2~K21、B22~K41まで分けて、それぞれ、あ行~わ行順に氏名が入っています。このデータをシート2のB2~B105の範囲にシート1の氏名を実行ボタンで並べるようにマクロ組みしているのですが、並べる際に氏名を昇順で並べられるようにしたいです。初歩的な質問で申し訳ありませんが、この場合、どのようなコードでしょうか?ご回答宜しくお願い致します。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.9

なんども追加ですいません。 coppertrucさんのコードを以下のようにすれば氏名と元のフリガナをリストシートのB列とC列に入力できます。 頭が固くて単純なことがひらめかなくて申し訳ないです。 Sub Example2() Dim h As Range Dim r As Long On Error Resume Next For Each h In Range("B2:K41").SpecialCells(xlCellTypeConstants) r = r + 1 Worksheets("リスト").Cells(r + 1, "B") = h Worksheets("リスト").Cells(r + 1, "c") = WorksheetFunction.Phonetic(h) Next End Sub

coppertruc
質問者

お礼

何度も改良して教えていただいてありがとうございました! お陰様で、NO.9のご回答のコードで上手くフリガナがふれました。 仕事の効率が良くなり、大変助かりました!

その他の回答 (9)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.10

締め切ったのに追いかけるようですみません。 今日会社で他の調べごとをしていた時にPhoneticプロパティというのがあるのをみつけました。ワークシート関数のPhoneticを呼び出すコードよりPhoneticプロパティを利用した方がベストかもしれません。ただし、現状で問題があるというわけではありませんので、次回同じような処理をするときはプロパティを採用してみてください。 Worksheets("リスト").Cells(r + 1, "c") = WorksheetFunction.Phonetic(h) ↓ Worksheets("リスト").Cells(r + 1, "c") = h.Phonetic.Text

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.8

No7の説明不足を補足しておきます IMEの再変換機能を利用してフリガナを取得しますので、正しい結果が出ない場合があります。特に氏名の場合は通常の変換をしない場合があると思いますので、再変換では結果が正しくない確率が高くなると思います。 たとえば、羽鳥を「ハトリ」と「ハネトリ」で入力した場合、PHONETIC関数だと入力のままでフリガナがでますが、No7のApplication.GetPhoneticメソッドの場合だと両方とも「ハトリ」で出てしまいます。 もちろん、PHONETIC関数でも入力したときのカナがでますので、変換がうまくできなくて違う読みで入力していた場合には正しくないフリガナになってしまいますが。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.7

たびたび追加ですみません。No4のようにしなくても振り仮名をC列に表示するマクロです。 フリガナ情報のないデータからIMEの再変換機能を利用してフリガナを取得するApplication.GetPhoneticメソッドというのがありました。能力不足のためこんなのがあるとは知りませんでした。 coppertrucさんのコードで入力されたシート2に対して実行するとC列にフリガナを表示します。シートの指示は省いてますのでシート2以外の場所から実行する場合にはシートの指示をしてください。 Sub Example() Dim c As Range For Each c In Range("B2", Range("B" & Rows.Count).End(xlUp)) Range("C" & c.Row).Value = Application.GetPhonetic(c) Next End Sub

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.6

ちなみにNo5はマクロの記録で作成したものに少し手を加えただけです。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.5

No4の続きというか別回答ですが たぶん以下のコード(コピー貼り付け)にしたらB列で並び替えをしても大丈夫だと思います。2013以前だとフリガナまでコピーされるかどうか不明なのですが、2013ということなのでいけると思いますよ。 Sub Example() Dim i As Integer Sheets("Sheet1").Activate For i = 2 To 41 Range("B" & i & ":K" & i).Copy With Sheets("Sheet2") .Range("B" & .Range("B" & Rows.Count).End(xlUp).Row + 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True End With Next i End Sub

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

> ふりがなとはexcelが入力の際に認識するふりがなのことで、ふりがなを表示するで確認したということです。 そういうことでしたか、失礼しました。 たとえばL2に(前回の回答の時に以下の関数で確認したのだと思ってました) =PHONETIC(B2) とするとフリガナが表示されると思います。それをB2~K21、B22~K41と同じ範囲になるように右と下にコピーしてください。すべての氏名にフリガナが表示されたら先に示していただいたコードの範囲をフリガナの部分に変更してコピー先はシート2のC列にしてください。コードの範囲指定の後の.SpecialCells(xlCellTypeConstants)は外してください。 それでC列で並び替えをしてください。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

忘れてました。 > シート1のふりがなをシート2に上手く引用できるようなマクロはないでしょうか? 示されたコードと同じようにふりがなの範囲をシート2C列にコピーすればいいでしょう。その場合「.SpecialCells(xlCellTypeConstants)」は不要です。

coppertruc
質問者

補足

ふりがなで入力してはおらず、シート1もシート2も表示はどちらも漢字での表記です。 ふりがなとはexcelが入力の際に認識するふりがなのことで、ふりがなを表示するで確認したということです。シート1では正しくふりがながあてられていましたが、シート2でデータの並び替えをすると、例えば吉原(よしはら)を(きちはら)のように認識している様で、川原(かわはら)の次に並んでいたりします。 このシート間のひらがな認識を上手くやるマクロやその他のやり方はないでしょうか?

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

> シート2に並び替えする時にシート1のふりがなとは違って、昇順にうまく並んでいないようでした。 ふりがなで並び替えたのと漢字で並び替えたのとでは順番は違いますので、シート2のC列にふりがなををコピーしてふりがなで並び替えしてください。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

おやりになりたいこと(コピーと並び替え)をマクロの記録で記録してそのコードをボタンのマクロに適用してください。

coppertruc
質問者

補足

記録をしてもいいのですが、そもそもシート2の並び替えがうまくいかず悩んでいます。 シート1の氏名のふりがなが問題あるのかと思い、シート1の氏名をふりがな表示で確認しましたが、正しく表示されました。シート2に並び替えする時にシート1のふりがなとは違って、昇順にうまく並んでいないようでした。ですので、シート1のふりがなをシート2に上手く引用できるようなマクロはないでしょうか? 参考までにマクロを記載しますので、ご教授宜しくお願いします。 Sub Macro1() If MsgBox("在院患者名に誤りはありませんか?", _ vbQuestion + vbYesNo, "注意") <> vbYes Then Exit Sub Dim h As Range Dim r As Long On Error Resume Next For Each h In Range("B2:K41").SpecialCells(xlCellTypeConstants) r = r + 1 Worksheets("リスト").Cells(r + 1, "B") = h Next End Sub ※リスト=シート2のことで、B2~B105の範囲で並び替えをしたいです。  B2:K41はシート1のデータが入っているセル範囲です。