こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

 できる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番目以上に新しいデータを挿入したりするとマクロは機能します。きっと当然のことなのでしょうが・・・。おそらく記録するときに何か問題があるのではないかと思うのですが,解決法をご教授下さい。

投稿日時 - 2005-01-12 15:58:25

QNo.1164365

困ってます

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

こんにちは。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")

の部分を必須入力の列に変えて下さい。

投稿日時 - 2005-01-12 16:30:21

お礼

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

投稿日時 - 2005-01-12 16:48:51

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

序に変数を使わないコードを2つほど。

(1) Range("A:G").Sort

データが入っているかどうかに関係なくA列~G列全てをソート

(2) Range("A1").CurrentRegion.Sort

セルA1を含む行列スペースでない範囲をソート


それから、UsedRangeもあります。
UsedRange、CurrentRegionについてはヘルプを参照


これらの方法では変数を使う必要はなく、
質問者のコードの該当部分を変更するだけです。
以上です。

投稿日時 - 2005-01-12 17:48:49

お礼

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

投稿日時 - 2005-01-12 18:23:16

ANo.3

No.1です。

>しかしながらこのような設定は,自然には行かないのですか?
無理です。
Excelのマクロ記録は、その時の行動を"そのまま"コード化するだけです。
また、質問者さんは、131行を、
「最終行」
のつもりで指定したと思いますが、Excelにはそんなことは分かりません。
ただ、
「131行」
までを指定したとしか認識してくれません。

マクロ記録は、所詮は基本的なコードを取得するためのもので、
それを用途に応じてカスタマイズするのは、ある意味必須と言えます。
使いこなせれば大変便利なので、がんばって習得して下さい。

投稿日時 - 2005-01-12 17:06:21

お礼

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

投稿日時 - 2005-01-12 18:21:47

ANo.2

maruru01さんの変数を利用して外には

 Range("A1:G" & LastRow).Sort

こんな指定の仕方もあります。
参考までに。

投稿日時 - 2005-01-12 16:42:38

お礼

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

投稿日時 - 2005-01-12 16:50:43

あなたにオススメの質問