• ベストアンサー

エクセルのマクロでの並べ替えにおいて

 できるExcel2000マクロ&VBAを読みながら,マクロに初挑戦しました。ところが初めからつまづいています。  住所録の並べ替えです。131人分の住所録をフリガナをキーに並べ替えるのをマクロに記録しました。保存して,早速機能を確認しようと132人目の住所などを入力し,マクロを実行しましたが,機能しませんでした。 Moduleは以下のようになっています。 Sub 五十音順並べ替え() ' ' 五十音順並べ替え Macro ' マクロ記録日 : 2005/1/12 ユーザー名 : ' ' Range("A1:G131").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range _ ("C2"), Order2:=xlAscending, Key3:=Range("B2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:= _ xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub 最初の Range("A1:G131") の131が臭いと思い,この数字を132にしたり,住所録の131番目以上に新しいデータを挿入したりするとマクロは機能します。きっと当然のことなのでしょうが・・・。おそらく記録するときに何か問題があるのではないかと思うのですが,解決法をご教授下さい。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 データ最下行をその都度自動取得して範囲を指定するようにします。 データ最下行は必須入力列で取得します。 必須入力列がA列とすると、 Sub~ と Range~ の間に、 Dim LastRow As Long LastRow = Range("A65536").End(xlUp).Row の2行を挿入します。 そして、その下のコードで、 Range("A1:G131") ↓ Range("A1:G1").Resize(LastRow) と置き換えます。 これでいけると思います。 なお、必須入力列がA列以外の場合は、上記の、 Range("A65536") の部分を必須入力の列に変えて下さい。

430do
質問者

お礼

できました!感激です。本当にありがとうございました。 しかしながらこのような設定は,自然には行かないのですか?追加ご回答いただければ幸いです。

その他の回答 (3)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.4

序に変数を使わないコードを2つほど。 (1) Range("A:G").Sort データが入っているかどうかに関係なくA列~G列全てをソート (2) Range("A1").CurrentRegion.Sort セルA1を含む行列スペースでない範囲をソート それから、UsedRangeもあります。 UsedRange、CurrentRegionについてはヘルプを参照 これらの方法では変数を使う必要はなく、 質問者のコードの該当部分を変更するだけです。 以上です。

430do
質問者

お礼

いろいろと教えていただきありがとうございました。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

No.1です。 >しかしながらこのような設定は,自然には行かないのですか? 無理です。 Excelのマクロ記録は、その時の行動を"そのまま"コード化するだけです。 また、質問者さんは、131行を、 「最終行」 のつもりで指定したと思いますが、Excelにはそんなことは分かりません。 ただ、 「131行」 までを指定したとしか認識してくれません。 マクロ記録は、所詮は基本的なコードを取得するためのもので、 それを用途に応じてカスタマイズするのは、ある意味必須と言えます。 使いこなせれば大変便利なので、がんばって習得して下さい。

430do
質問者

お礼

なるほどです。 そうすると『できる・・・』はちょっと説明不足ではないでしょうか。 本当に参考になりました。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.2

maruru01さんの変数を利用して外には  Range("A1:G" & LastRow).Sort こんな指定の仕方もあります。 参考までに。

430do
質問者

お礼

ご回答ありがとうございます。 なかなかシンプルでいいですね。 いろいろなご回答をいただき,おもしろみが湧いてきそうです。

関連するQ&A