
並べ替えのプログラムを以下のように組んだところ,「myRng.Sort」の行で,
「実行時エラー'1004':アプリケーション定義またはオブジェクト定義エラーです」
と出てしまいます。
このエラーコードが「シートが正しく指定されていない」ということは理解したのですが,WITH文内
であるので正しく指定しているのでは?と考えています.ご教授いただけると助かります。
Sub ソート()
Dim lRow As Long
Dim lCol As Long
Dim myRng As Range
Dim 基準列 As Long
ThisWorkbook.Activate
With ActiveSheet
基準列 = .Cells(23, 1)
lRow = .Cells(Rows.Count, 11).End(xlUp).Row
lCol = .Cells(11, Columns.Count).End(xlToLeft).Column
Set myRng = .Range(.Cells(11, 11), .Cells(lRow, lCol))
myRng.Sort
Key = .Cells(11, 10 + 基準列)
End With
End Sub
No.4ベストアンサー
- 回答日時:
こんにちは!
横からお邪魔します。
>myRng.Sort
>Key = .Cells(11, 10 + 基準列)
この部分がエラーなのでは?
>myRng.Sort key1:=.Cells(11, 10 + 基準列)
とするのが普通だと思います。
昇順での並び替えなのだと思うので、そのままで大丈夫だと思いますが、
丁寧にやれば、昇順なのか?・降順なのか?までを記載するコトをおススメします。
※ お示しのコードから判断すると10行目が項目行になっているのですかね?
もしそうであれば自分の場合は↓のようなコードにします。
myRng.Sort key1:=.Cells(11, 10 + 基準列), order1:=xlAscending, Header:=xlNo
※ 未検証なので、的外れならごめんなさい。m(_ _)m
ご回答有り難うございます.
提供していただいたコードに修正してみたところ,正しく動作いたしました.
また,
myRng.Sort key1:=.Cells(11, 10 + 基準列)
のみでも動作を確認しました.やはりkeyの改行がエラーの原因のようです.
貴重なご意見感謝いたします.
No.5
- 回答日時:
1004のエラーというのは、
myRng.Sort ここしかないと思うのですが……
No.4 さんも述べていますが、「パラメータ」は、省略できないです。できれば、これをパターン化したほうがより間違いが少ないと思います。Sort メソッドの方法自体は、ヘルプでもみていただいたほうがよいでしょう。AutoFilter と同じではありません。
Set myRng = .Range(.Cells(11, 11), .Cells(lRow, lCol))
'または、
'Set myRng = .Cells(11, 11).CurrentRegion
If 基準列 <= 0 Then 基準列 = 1
'------------パターン化---------
With myRng
.Sort Key1:=.Cells(1, 基準列), Order1:=xlAscending
End With
'---------------------------------
With myRng で、くくると
.Cells(1, 基準列) 必ず、myRng の中では、1行目になります。
No.3
- 回答日時:
あれ?
>With ActiveSheet
としているのにActiveSheetがアクティブな状態ではない時ってあり得るのかな?
それにSort自体は適用シートがアクティブでなくとも動いたと思いますが、最近のは動かないのかな?(うちのは古~いので)
No.2さんのリンク先では『Withステートメントの使い方を失敗している』と書かれているだけでは?(その辺も最近のは変わったならごめんなさい)
ご回答有り難うございます.解決いたしました.
keyを改行していたことで正常に認識されていなかったものと思われます.
貴重な情報の提供感謝いたします.
No.2
- 回答日時:
メソッドは、対象のシートがアクティブでないとエラーが発生します。
「VBA 1004 メソッド名(myRng.Sort)」で検索
http://www.excel.studio-kazu.jp/kw/2008120301302 …
ご回答有り難うございます.解決いたしました.
keyを改行していたことで正常に認識されていなかったものと思われます.
貴重な情報の提供感謝いたします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
VBA 指定した列にある日時デー...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
vba マージエリアの行数を非表...
-
エクセルマクロPrivate Subを複...
-
列方向、行方向の定義
-
【Excel VBA】条件を満たすデー...
-
Excelの行数、列数を増やしたい...
-
Alt+Shift+↑を一括で行うには、...
-
Excel文字列一括変換
-
データシートビューのタイトル...
-
エクセルで?
-
エクセル マクロ 範囲指定で...
-
エクセル 任意の列数で分割する...
-
VBA Splitで「引数の数が一致...
-
エクセル 重複したデータを別...
-
VBAで結合セルを転記する法を教...
-
エクセルのシートの大きさを変える
-
エクセル マクロ 範囲の値を上...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
VBAで別ブックの列を検索し、該...
-
VBA 指定した列にある日時デー...
-
列方向、行方向の定義
-
LEFT関数とIF関数の組み合わせ...
-
Excelの行数、列数を増やしたい...
-
CSVファイルの「0落ち」にVBA
-
エクセル マクロ 範囲指定で...
-
VBAで結合セルを転記する法を教...
-
土日の列幅の自動変更を教えて...
-
ListViewで列を指定して表示さ...
-
エクセルで最初の行や列を開け...
-
エクセル マクロ 範囲の値を上...
-
csvデータの列の入れ替えができ...
-
最近急にVBAの処理速度が遅くな...
-
Excel文字列一括変換
-
エクセルで複数列の検索をマク...
-
エクセルのソートで、数字より...
おすすめ情報