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

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

ブロック単位での並べ替えのVBA

Excel2007で名簿を作成しています。 新規のデータがあれば、表の一番下に足していくのですが、 新規データを入れた後にあいうえお順に並べ替えをしたいと思います。 名簿にはたくさんの項目があり、1件につき 4行7列 を使用しており、 セルの結合をしている個所もあります。 上手く並べ替えるVBAを教えていただきたく、ご質問させていただきます。 名簿のB13:B14(結合セル)、B17:B18、B21:B22・・・・・にひらがなで名前が入っているので、 このB列をもとにあいうえお順にしたいと思っています。 (B15:B16、B19:B20、B23:B24・・・・には、漢字で名前が入っています) 以前同じ質問をさせていただきましたが、なかなかアドバイスをいただけず、 自分でも考えてみましたが、うまくいかないため、再質問をさせていただきました。 お詳しい方、どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答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/7940)
回答No.2

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

関連するQ&A

  • Excel2007:ブロック単位での並べ替え

    Excel2007:ブロック単位での並べ替え Excel2007で名簿を作成しています。 新規のデータがあれば、表の一番下に足していくのですが、 新規データを入れた後にあいうえお順に並べ替えをしたいと思います。 名簿にはたくさんの項目があり、1件につき 4行7列 を使用しており、 セルの結合をしている個所もあります。 上手く並べ替える方法を教えていただきたく、ご質問させていただきます。 表の形式については、画像を添付いたしましたので、ご覧いただけましたらと思います。 お詳しい方、どうぞよろしくお願いいたします。

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • エクセルの並べ替え・・・

    エクセルで並べ替えをしたいんですが、思うようにいきません。教えてください。 A列:日にち B列:ナンバー C列:名前   が入っています。 C列には、関数が入っています。 B列にナンバーを入力すると、名前が自然に入るようになっています。 関数は、 =IF(B2="","",VLOOKUP(B2,' 名 簿 '!$A:$B,2,FALSE)) です。 A~C列を選択して、 C列(名前順)に並び替えをすると、(データ→並び替え) 空欄のセルが上の方に来て、日にち、NOが入力されているセルは、下の方で並び替えされている状態です。 入力されているセルを上にするには、どのようにすればいいのか、教えてください

  • エクセル 並べ替え

    貼付のような表があります。 1列目は2行が結合されている状態で、カタカナで名前が入力してあります。 1列目を基準にして表全体を昇順で並べ替えをしたいのですが、通常通り行うと「同じサイズの結合セルが必要」とメッセージが出て、行えません。 並べ替えを行う方法はありますでしょうか?

  • エクセルでデーター並べ替えについて

    エクセルで作成したデーターの並べ替えについて教えてください。 表でデーターを入力し並べ替えでデータを並べ替えしようと範囲をドラッグしてデータの並べ替えをすると「この操作は同じサイズの結合セルが必要です」と表示されます。データの中に結合されていないセルが無いか確認しましたがありません。ドラッグの範囲を各列ごとにすると先ほどの表示は出ません。データー全体を並べ替え範囲にすると出ます。 なぜでしょうか?

  • エクセル並べ替えについて

    お世話になっております。売掛管理をしております。名前をあいうえお順に、B5あ-1 C5相田 B6あ-2 C6秋元 B7い-1 C7飯田 というように入力しています。 いまの所、300人位ですが、あ-8をB200に入れたとして、あ-1、あ-2・・・あ-7の次にあ-8がくるように並べ替えをしたいのですが、1つのセルで降順とかにするとあ- の後の数字が降順になりません。セルを分けてB5・あ- B6・1 のように入力するしかないでしょうか??? またまた分かりずらくてスミマセンが、宜しくお願い致します。

  • エクセルでのデータの並べ替え

    くわしい方、教えていただけないでしょうか? ネットで検索しましたが、解決するような記事が見つかりませんでした。 添付画像のような表を作成しております(実際はもっと下にたくさん入力が続いてます)。 やりたいことは、この表にどんどんデータを入力していったときに、 グループバラバラなので、データの並べ替えでグループ名ごとにひとかたまりにして並べ替えたいのです(降順でも昇順でも、どちらでもいいです。でもできれば、グループ内で、氏名があいうえお順とかになるとすごく嬉しいです・・・・) ですが、今の状態で並べ替えようとすると、「この操作には、同じサイズの結合セルが必要です」とエラーが出ます。 エクセルにあまり詳しくないですが、おそらくこれは、一人分のデータがA列とB列は1行ずつなのにC列で2行あるからだと思っているのですが、どうしても、C列は2行必要なので(誕生日のデータだけなら、D列に書けばいいのですが、C列にはほかにも書きたいデータがあってここは2行必要なんです) この場合、どのようにしたら、うまく並べ替え(2行をひとかたまりと認識して)できるのでしょうか? どなたかご教授してくださると嬉しいです。

  • エクセルの並べ替え

    エクセルの「データ→並べ替え」の質問です。 住所録(900行超)を並べ替えると、どういう訳か2つのグループに分かれて、それぞれでソートされます。どうしてかなぁ?文字列でも数字列でもダメでした。全体をひとつのデータとして「あいうえお順」もしくは「郵便番号順」にソートしたいのですが、改善策を教えてください。よろしくお願いします。

  • Entourageのアドレス帳の並べ替え

    Entourageのアドレス帳で名前をあいうえお順とかに並べ替えはできないのでしょうか? メールアドレスの項目では、並べ替えはできます。 名前の項目では、一部あいうえお順になっているところもあるのでが・・・

    • ベストアンサー
    • Mac
  • エクセルでの並べ替え

    一番上の1・2行をタイトル行として並べ替えをしたいのですが。 一部分だけセルを結合してあるところがあります(下記参照) そのため、タイトル行としてみなされず、並べ替えができません。 毎回一行削除して並べ替えをしているのですが、 何か良い方法をご存知ないでしょうか?       |  A列   |  B列  |  C列  | D列 | 1行目  |  住所  |  氏名  |    性別        | 2行目 |     |     |   男  |  女   | 3    | 東京都 | 山田 |    |   女   |    4    | 北海道 | 佐藤 | 男   |      | ・ ・ ・ 表がかけないのでわかりにくくてすみません。   | はセルの境目のつもりです。 住所・氏名の欄は1・2行結合 性別は1行目だけでC・D列結合 その下の2行目にC列2行目は男、D列2行目は女  (このせいで並べ替えができません。) この場合、例えば、性別の欄を削除してタイトルを1行にすれば・・・というのはなしでお願いします。