プロが教えるわが家の防犯対策術!

並べ替えのプログラムを以下のように組んだところ,「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

A 回答 (5件)

こんにちは!



横からお邪魔します。

>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
    • good
    • 0
この回答へのお礼

ご回答有り難うございます.
提供していただいたコードに修正してみたところ,正しく動作いたしました.
また,
myRng.Sort key1:=.Cells(11, 10 + 基準列)
のみでも動作を確認しました.やはりkeyの改行がエラーの原因のようです.
貴重なご意見感謝いたします.

お礼日時:2019/05/19 13:23

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行目になります。
    • good
    • 0
この回答へのお礼

ご回答有り難うございます.
提供していただいたコードに修正してみたところ,正しく動作いたしました.
貴重なご意見感謝いたします

お礼日時:2019/05/19 13:26

あれ?



>With ActiveSheet

としているのにActiveSheetがアクティブな状態ではない時ってあり得るのかな?
それにSort自体は適用シートがアクティブでなくとも動いたと思いますが、最近のは動かないのかな?(うちのは古~いので)
No.2さんのリンク先では『Withステートメントの使い方を失敗している』と書かれているだけでは?(その辺も最近のは変わったならごめんなさい)
    • good
    • 0
この回答へのお礼

ご回答有り難うございます.解決いたしました.
keyを改行していたことで正常に認識されていなかったものと思われます.
貴重な情報の提供感謝いたします.

お礼日時:2019/05/19 13:26

メソッドは、対象のシートがアクティブでないとエラーが発生します。


「VBA 1004 メソッド名(myRng.Sort)」で検索
http://www.excel.studio-kazu.jp/kw/2008120301302 …
    • good
    • 0
この回答へのお礼

ご回答有り難うございます.解決いたしました.
keyを改行していたことで正常に認識されていなかったものと思われます.
貴重な情報の提供感謝いたします

お礼日時:2019/05/19 13:18

myRng.Sort


Key = .Cells(11, 10 + 基準列)

改行されているからとか?

  myRng.Sort Key = .Cells(11, 10 + 基準列)
    • good
    • 0
この回答へのお礼

ご回答有り難うございます.
ご指摘どおり,改行されている場所を修正したところ解決いたしました.

お礼日時:2019/05/19 13:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!