VBAで並び替えの方法とエラーの対処法

このQ&Aのポイント
  • VBAを使用してエクセルの一覧表を並び替える方法について説明します。
  • 質問の内容は、VBAで並び替えをする際に範囲の選択が正しく行われないというエラーに関するものです。
  • 提供されたコードにはエラーがありますが、エラーの原因と対処法についても解説します。
回答を見る
  • ベストアンサー

VBAで並び替え・・・

VBAで並び替えをしたいのですが、変な範囲が選択されます。 一覧表のA5:BF5に項目が入っています。 マクロの登録でA5をクリックして、shift+ctrl+end(→)で項目を選択し、shift+ctrl+PgDn(↓)で範囲選択して ツールの並び替えで並び替え項目はA5です。 下記のコードができました。 しかしながら、エラーがでます。 よろしくお願い致します。 エクセルのバージョンは2002です。 Sheets("一覧").Select Range("A5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortTextAsNumbers Range("A5").Select Sheets("現場登録検索").Select Range("C2:D2").Select

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1です。 > すべてをA5にすると項目もソートされてしまいます。 header:=xlGuess の xlGuess はタイトルを自動判定してって意味です。 A5がタイトルなら header:=xlYes、データならheader:=xlNo にすれば良いだけです。 > 実行エラー1004同じサイズのセルの結合が必要です。 Test1を行った場合にSelectした範囲内に結合セルがあるのでしょう。 結合セルはソート出来ません。 表の状況がまったく解らないので予想で回答せざるを得ません。 エラーの原因はご自身で判断されるか、詳しい表の状況を説明頂かないと、こちらは見ている訳では無いので。

cocoku
質問者

お礼

不出来ですみません。 説明不足ですよね。 予測で答え頂いているのに、とても的を得てます。 見て頂いてるかのようです。 とてもわかりやすいです。 ありがとうございました。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

変な範囲が選択されるって所が質問でしょうか? それとも実行するとエラーが出る部分でしょうか? エラーは Key1:=Range("A6") を Key1:=Range("A5") にするとどうなるかです。 範囲はこんな感じでどうでしょう? Sub Test1()  Range("A5").CurrentRegion.Select End Sub OKなら Sub Test2()  Range("A5").CurrentRegion.Sort _    key1:=Range("A5"), order1:=xlAscending, header:=xlYes End Sub

cocoku
質問者

お礼

Sub 並び替え() Sheets("一覧").Select Range("A6").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort key1:=Range("A6"), order1:=xlAscending, header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortTextAsNumbers Range("A5").Select Sheets("現場登録検索").Select Range("C2:D2").Select End Sub 上記のA6に換えることでうまく動きました。 ただ、これだと空白があると途切れてしまいますが・・・。 すべてをA5にすると項目もソートされてしまいます。 Test2を実行すると、"実行エラー1004同じサイズのセルの結合が必要です。"となってしまいます。 しかしながら、Vlookupの実行の不具合が並びえに原因があると思い込んでいましたので、それはpapayukaさんのおかげさまで解消できましたから、並び替えは必要なくなったのですが・・・。 いつもありがとうございます。

関連するQ&A

  • 下記のマクロの説明(意味)を教えてくださ。

    Range("A4").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlStroke, DataOption1:=xlSortNormal

  • 記述を簡略化させたい

    お世話になります。 下記の記述をスマートにさせたいのですが、ご教示お願いします。         記 Sub 優先順位() Range("A16:Y25").Select Selection.Sort Key1:=Range("Y16"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A43:Y52").Select Selection.Sort Key1:=Range("Y43"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A70:Y79").Select Selection.Sort Key1:=Range("Y70"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A97:Y106").Select Selection.Sort Key1:=Range("Y97"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A16").Select End Sub

  • EXCEL VBA 並び替えについて

    こんばんは。 EXCEL VBAでデータの並び替えを作りましたが、実行すると実行時エラー(1004)となってしまいます。原因を探りましたが分からないため、問題点のご指導をお願いします。 ・1行目はタイトル行で、2行目以降にデータが入っております(現在は200行までデータが入っています)。。 ・A1~T1にタイトルのそれぞれの項目が入っています。 ・D1セルに「商品名のカナ」が入っており、カナで並び替え(昇順)をしたいと思っています。 'データの最終行をEndrowに格納する EndRow = Worksheets("基礎データ").Range("A1").End(xlDown).Row Worksheets("基礎データ").Select Worksheets("基礎データ").Range(Cells(1, 1), Cells(EndRow, 20)).Select Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal プロシージャの一部を抜粋しました。 Selection.Sort Key1~以降の記述は、「マクロの記録」で記録したものを貼り付けました。 よろしくお願いします。

  • 【至急】VBAについて

    現在エクセル2003を使用しています。 VBA初心者です。 -----エクセルの現在の状態----- ・A5からL5までに項目の名称が書いてあります。 (A5に”見積番号” B6に”件名” などと記入されています。) ・データはA6からL5まで記入され下方向にデータは増えて行きます。 (データは見積を完成させるごとに下に増えて行きます。) ・見積番号と件名で検索をかけたいので、一つ組んだものがあります。 Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub これです。所謂Ctrl+Fで使用する検索のコードとほぼ同じかと思われます。 ですが、これでは事足りないと上司に言われ質問致しました。 -----今回出来ない部分に関して----- Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub こちらのコードを使用すると、きちんと検索はされます。 ですが、オートフィルタの様に 例えば件名のところを絞ると データも同じ件名のものだけを抽出し表示さる様にしてほしいとの事でした。 エクセル内にボタンを作成し、クリックすると検索窓を出現させ条件を記入したら そのエクセルのシート内にその条件と合ったデータを抽出したものを作成したいのです… ※簡単に言うと Ctrl + Fの機能とオートフィルタを開くとオートフィルタオプションの検索窓が 出現しますよね。 それをマクロで組みたいと言った方が分かりやすいでしょうか…?? レスポンスはなるべく早く致します。 皆様の知識をお借りできればと思い 質問させて頂きました。 以上、宜しくお願い致します。

  • 【至急】VBAについて

    現在エクセル2003を使用しています。 VBA初心者です。 -----エクセルの現在の状態----- ・A5からL5までに項目の名称が書いてあります。 (A5に”見積番号” B6に”件名” などと記入されています。) ・データはA6からL5まで記入され下方向にデータは増えて行きます。 (データは見積を完成させるごとに下に増えて行きます。) ・見積番号と件名で検索をかけたいので、一つ組んだものがあります。 Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub これです。所謂Ctrl+Fで使用する検索のコードとほぼ同じかと思われます。 ですが、これでは事足りないと上司に言われ質問致しました。 -----今回出来ない部分に関して----- Range("A6:L6").Select Range(Selection, Selection.End(xlDown)).Select Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub こちらのコードを使用すると、きちんと検索はされます。 ですが、オートフィルタの様に 例えば件名のところを絞ると データも同じ件名のものだけを抽出し表示さる様にしてほしいとの事でした。 エクセル内にボタンを作成し、クリックすると検索窓を出現させ条件を記入したら そのエクセルのシート内にその条件と合ったデータを抽出したものを作成したいのです… ※簡単に言うと Ctrl + Fの機能とオートフィルタの機能の いいとこどりしてほしいって事なんですよね…笑 レスポンスはなるべく早く致します。 皆様の知識をお借りできればと思い 質問させて頂きました。 以上、宜しくお願い致します。

  • VBAでのエラー(新しいマクロの記録)

    新しいマクロの記録で、work1にてソート等を行って、 新しいマクロ(ソート等)を作成しました。 このマクロは単体で正常に動作するのですが、 sheet1の別のマクロにカット&ペーストで追加し、 動作させたところエラーになってしまいました。 パス的な問題だと思いますが、いまいち理解できません。 以下、ソートの中身 Sheets("work1").Select Columns("A:H").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Key3:=Range("F2"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal

  • VBA 並び替え

    たびたびお世話になります 選択範囲の並べ替えを行いたく こちらで教わった方法で セル位置の取得を行い Set r = Columns("A").Find("b1", lookat:=xlWhole, After:=Range("A" & Rows.Count)) Set rr = Columns("A").Find("bm123-1", After:=r, Searchdirection:=2) その取得した位置を元に並べ替えを行いたい 範囲選択をしています Range(r, rr.Offset(, 14)).Select その後並び替えを実施したいのですが Selection.Sort Key1:=Range(r.Offset(, 14)) この様にしてみましたが 実行時エラー1004が返されてしまいます どのようにすれば 並び替えができるのでしょうか よろしくお願いします

  • VBA 並び替え

    たびたびお世話になります 選択範囲の並べ替えを行いたく こちらで教わった方法で セル位置の取得を行い Set r = Columns(\"A\").Find(\"b1\", lookat:=xlWhole, After:=Range(\"A\" & Rows.Count)) Set rr = Columns(\"A\").Find(\"bm123-1\", After:=r, Searchdirection:=2) その取得した位置を元に並べ替えを行いたい 範囲選択をしています Range(r, rr.Offset(, 14)).Select その後並び替えを実施したいのですが Selection.Sort Key1:=Range(r.Offset(, 14)) この様にしてみましたが 実行時エラー1004が返されてしまいます どのようにすれば 並び替えができるのでしょうか よろしくお願いします

  • ExcelのVBAです。

    先日お答えいただいたVBAなんですが、 Sub Macro1() Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Selection.End(xlDown).Select Application.CutCopyMode = False Do Selection.Insert Shift:=xlDown Selection.End(xlUp).Select Loop Until ActiveCell.Address = "$A$1" End Sub というのを使用させて頂いてます。 これを、コピー先のものを上書きせずに、コピーされたものがあれば表示させるといった風に出来ないでしょうか? 例  A    A 1 a 1 2 b → 2あ 3 c 3 右から左に一行間隔で別シートに表示させたいのですが、  A  1 a 2 あ 3 b 4 5 b という結果にしたいのです。 拙い文章で申し訳ないのですが、教えて頂きたいです。

  • VBA 列の並べ替えについて

    以下のようなコードを考えています。 (1)セルA2からO10を選択する。 (2)最優先するキーをD列として(昇順)、(1)を並べ替える。 (3)印刷する。 (4)(1)の並びに戻す。((2)で並べ替えする前の状態にする) マクロ記録から以下のコードは分かりましたが、続きが分かりません。よろしくお願いします。 Sub test() Range("A2:O10").Select Selection.Sort Key1:=Range("D2"), Order1:=xlAscending, _   Header:=xlGuess ,OrderCustom:=1,Orientation:=xlTopToBottom,_ SortMethod:=xlPinYin Selection.PrintOut Copies:=1, Collate:=True End Sub