
こんばんは。
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~以降の記述は、「マクロの記録」で記録したものを貼り付けました。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Windows XP SP3, Excel 2003で試してみました。
その結果、「実行時エラー '1004':」が出る2つのケースがありました。
1.プロシージャが「基礎データ」以外のシートモジュールにある
この場合は「アプリケーション定義またはオブジェクト定義のエラーです。」というメッセージになります。
原因は、シートモジュール内でワークシートオブジェクトを省略した場合に、アクティブなシートではなくそのモジュールのシートが採用されるというところにありました。
対策の1つとしては、シートモジュールには他のシートを扱うコードは置かない、というのがありますし、私もそうしています。
でも、根本的対策としてはオブジェクトをきちんと指定するのが一番です。
今回は以下のようにしたところエラーは出なくなりました。
EndRow = Worksheets("基礎データ").Range("A1").End(xlDown).Row
Worksheets("基礎データ").Select
Worksheets("基礎データ").Range(Worksheets("基礎データ").Cells(1, 1), Worksheets("基礎データ").Cells(EndRow, 20)).Select
Selection.Sort Key1:=Worksheets("基礎データ").Range("D1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
メンテナンス性を考えるとWithステートメントあるいはワークシートオブジェクト型変数を使った方がよさそうです。
また、他のブックと併用する場合など、ブックも指定したほうがいいこともあります。。
2.並べ替えるセル範囲にセルの結合がある
この場合、プロシージャが標準モジュールにあるなら「この操作には、同じサイズの結合セルが必要です。」というわかりやすいメッセージが出ますので、おそらく質問者様はこの質問を立てるまでもなく解決されることと思います。
それ以外のモジュールの場合は「アプリケーション定義またはオブジェクト定義のエラーです。」という通常のメッセージでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) Excel_マクロ_現在開いているシートにマクロを実行したいです 1 2023/02/14 23:54
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
【ExcelVBA】5万行以上のデー...
-
Vba FileSystemObject オブジェ...
-
VBA 入力箇所指定方法
-
【ExcelVBA】値を変更しながら...
-
[VB.net] ボタン(Flat)のEnable...
-
Excel(M365) Vlookup/セル反転(...
-
【ExcelVBA】値を変更しながら...
-
ダブルクリックで貼り付けた画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGridViewの特定列に入力さ...
-
Excel 1セル当りの文字数が2...
-
GUIDの重複
-
ListView重複データ削除
-
VBAにて複数の重複データを取得...
-
A1に100と入力した時点で 自動...
-
クロス集計
-
データベースを公開して任意に...
-
ExcelVBAで、コメントのサイズ...
-
PythonでのEXCELデータの処理に...
-
excel vbaについて
-
VBA 最終行のひとつしたの行に...
-
会社でIEを開いて入力するデー...
-
EXCEL VBA 並び替えについて
-
javaのデータからヒストグラム...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
おすすめ情報