• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ブロック単位での並べ替えのVBA)

Excel VBAで名簿をあいうえお順に並べ替える方法

このQ&Aのポイント
  • Excel2007で名簿を作成していますが、新規のデータを追加した後にあいうえお順に並べ替えをしたいと思っています。セルの結合も考慮して並べ替えたい場合には、VBAを使用すると便利です。
  • 名簿のB列にひらがなの名前が入っており、それをあいうえお順に並べ替える方法を教えてください。なお、B列には漢字の名前も含まれていますが、それらは並べ替えの対象外とします。
  • 以前同じ質問をしたが、アドバイスをもらえなかったため再質問します。Excel VBAのプロにお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

結合セルを交えた表なので,エクセル本来の並べ替え機能は使えません。 というワケで並べ替えを自前でマクロの中でプログラムしてやる事になりますがメンドクサイので,エクセルの機能だけで実現してみます。 前提: >名簿の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

hrklovepop
質問者

お礼

早々のご回答、そして訂正のコメントをいただきましてありがとうございました。 いま、アドバイスいただいたとおりにやってみましたら できました!! こんなにシンプルな感じでできるとは思っていなかったので、 とても驚いています。 これから、どのようになっているのか、よく見て勉強します。 大変助かりました。 ありがとうございました!!

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

最後に思いつきで書き足したら間違いちゃいました。 マチガイ: 最後の Application.ScreenUpdating = False 訂正: Application.ScreenUpdating = True Application.DisplayAlerts = True 失礼しました。