- ベストアンサー
Excel VBAで名簿をあいうえお順に並べ替える方法
- Excel2007で名簿を作成していますが、新規のデータを追加した後にあいうえお順に並べ替えをしたいと思っています。セルの結合も考慮して並べ替えたい場合には、VBAを使用すると便利です。
- 名簿のB列にひらがなの名前が入っており、それをあいうえお順に並べ替える方法を教えてください。なお、B列には漢字の名前も含まれていますが、それらは並べ替えの対象外とします。
- 以前同じ質問をしたが、アドバイスをもらえなかったため再質問します。Excel VBAのプロにお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結合セルを交えた表なので,エクセル本来の並べ替え機能は使えません。 というワケで並べ替えを自前でマクロの中でプログラムしてやる事になりますがメンドクサイので,エクセルの機能だけで実現してみます。 前提: >名簿のB13:B14(結合セル)、B17:B18、B21:B22・・・・・にひらがなで名前が入っているので、 名簿の本体は「13行目から始まっている」とします。 その上にあるだろうタイトル行は無視です。 Sub macro1() Dim sz As Worksheet Dim sx As Worksheet Dim s0 As Worksheet Dim i As Long Dim n As Long ’気になるなら次の行のコメントアウトを外す ’application.screenupdating = false Set s0 = Worksheets("名簿のシート") '試す前に名簿のシート名を記入すること Set sx = Worksheets.Add ’データ採取 For i = 13 To s0.Range("B65536").End(xlUp).Row Step 4 If s0.Cells(i, "B") <> "" Then n = n + 1 sx.Cells(n, "A") = s0.Cells(i, "B") sx.Cells(n, "B") = i End If Next i ’並べ替え sx.Range("A:B").Sort key1:=sx.Range("A1"), order1:=xlAscending, header:=xlNo Set sz = Worksheets.Add For i = 1 To n s0.Cells(sx.Cells(i, "B"), "A").Resize(4, 1).EntireRow.Copy Destination:=sz.Cells(13 + (i - 1) * 4, "A") Next i ’復元 sz.Range("A13").Resize(n * 4, 1).EntireRow.Copy Destination:=s0.Range("A13") Application.DisplayAlerts = False sx.Delete sz.Delete Application.ScreenUpdating = False End Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
最後に思いつきで書き足したら間違いちゃいました。 マチガイ: 最後の Application.ScreenUpdating = False 訂正: Application.ScreenUpdating = True Application.DisplayAlerts = True 失礼しました。
お礼
早々のご回答、そして訂正のコメントをいただきましてありがとうございました。 いま、アドバイスいただいたとおりにやってみましたら できました!! こんなにシンプルな感じでできるとは思っていなかったので、 とても驚いています。 これから、どのようになっているのか、よく見て勉強します。 大変助かりました。 ありがとうございました!!