• 締切済み

VBA SORT Applyでエラー

今日パソコンが新しくなり、office2003から2010になりました。 2003で作成したマクロで、SORTメソッドを書き換え実行したところ、『実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです』とメッセージが… デバッグでみると、Applyのところが黄色になっていました。 何が悪いのか教えてもらえますか? Worksheets("営業所順位表").Activate Application.Calculation = xlCalculationAutomatic '再計算自動 With ActiveSheet.Sort.SortFields .Clear .Add Key:=Range("E3"), Order:=xlDescending End With With ActiveSheet.Sort .SetRange Range("A3:S68") .Header = xlYes .Apply ←ここが黄色に End With

みんなの回答

回答No.2

オールドファッションで、、、 Worksheets("営業所順位表").Activate Application.Calculation = xlCalculationAutomatic '再計算自動 Range("A3:S68").Sort _   Key1:=Range("E3"), Order1:=xlDescending, _   Header:=xlYes, OrderCustom:=1, MatchCase:=False, _   Orientation:=xlTopToBottom, SortMethod:=xlPinYin

WindsorAvenue
質問者

お礼

ご教示いただきありがとうございます。 やってみましたがダメでした(><) 黄色になってしまいました。 調べてみたらVBA SORT は、2003の書き方でも動くようですね。なんでエラーになってしまうのかしら… いろいろ調べてみます。Thanks Anyway

  • heno-_-
  • ベストアンサー率100% (6/6)
回答No.1

私の環境( Excel2010 )で適当なデータを作って動かしてみましたが、 質問内容にあるコードで正常に動作しました。 どこか他のところに、問題があるのかも? 試しに、以下のコードを実行してみていただけますか? -------------------------------------------------- Worksheets("営業所順位表").Activate Application.Calculation = xlCalculationAutomatic '再計算自動 Range("A3:S68").Sort _ Key1:=Range("E3"), _ Order1:=xlDescending, _ Header:=xlYes --------------------------------------------------

WindsorAvenue
質問者

お礼

返事が遅くなり申し訳ありません。 そうなんです。問題ないようなんですがマクロボタンを押すと止まってしまうのです。 教えていただいたコードは以前2003の時に書いたコードで、それが機能せず書き換えたのでダメでした。 ちなみにプロジェクトエクスプローラーを表示して F8 を押していくと問題なく抜けて並び替えができます。とりあえず今朝はそれで乗り切りました(^^;)

関連するQ&A

  • VBA ソートについて

    win7、Excelは2013を使用しています。 VBAでソートのコーディングをしたいのですが、 画像の様に、途中で空白のセルを順番指定して並べ替りできますか? 下記の ここに空白セルを指定する のところに空白セルを指定したいのですが、 そもそもそういう事が出来るものなのでしょうか..... よろしくお願い致します。 Sub ソート() With ActiveSheet.Sort.SortFields .Clear .Add key:=Range("D2"), SortOn:=xlSortOnValues, _ Order:=xlAscending, CustomOrder:= _ "A,D,H,G,F,D,B,ここに空白セルを指定する,R" _ , DataOption:=xlSortNormal End With With ActiveSheet.Sort .SetRange Range(Cells(2, 4), Cells(9, 4)) .Apply End With End Sub

  • Excel VBA UsedRange範囲ソート

    図のような中抜の一覧ができているとき、商品コードで空行を飛ばして並び替えをしたいのですが、下記だと空行まで(チョコからわたがしまで)しか対象になりません。 ---------------------------- Sub 並べ替え() With ActiveSheet.Sort .SortFields.Clear 'Key:=Range("A3")でソートする列とタイトル位置を指定 .SortFields.Add Key:=Range("A3"), SortOn:=xlSortOnValues, _ Order:=xlAscending '.「商品コード」("A3").でソート .SetRange Range("A3").CurrentRegion ' 先頭行をタイトル行と見なす .Header = xlYes .Apply End With End Sub ------------------------- 範囲をCurrentRegion ではなくUsedRangeに広げるには、どこをいじったらいいでしょうか。 求める結果としては「商品コード」の列が登り順に揃ってほしいのです。 データ処理としてはソートをかければいいだけですが、UsedRange(範囲内のセルを選択し、Ctrl+Shift+Endキーで選ばれる範囲)をみつけてソートをかける方法を知りたいのです。

  • VBAで統合セルの並び替えは可能ですか?

    表題のとうりなのですが・・・ Sub 並番号() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range("M4") .SetRange Range("A4:M242")   .Apply End With End Sub とプログラムしてるのですが、M4からM242までがセルを3個ずつ 統合したセルになっております。 統合セルの並び替えは出来ないのでしょうか? ご教授お願いいたします。

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • マクロ 並び替え エラーがでる

    マクロの記録で以下のようなマクロを作りましたが、実行するとエラー91「オブジェクト変数またはブロック変数が設定されていません」とでます。どう直したらよいでしょうか? Sub Macro6() Columns("A:L").Select Selection.AutoFilter ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _ ("A1:A497"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B2").Select End Sub

  • ワードVBAからエクセルのソートができない

    こんにちは MS Word 2007から条件に合う語を抜き出してエクセルに貼り付けた後、ソートをするマクロを書いているのですが、ソートの部分で「型が一致しない」というエラーが出てしまい困っています。エクセルのVBAでは問題なく動作しています。 次がエクセルVBAで作ったソートのVBAです。 ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:A6") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With これをWord VBAに貼り付けて、一部を変更しました。 myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Clear myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With myExcel.workbooks(BookName).sheets(1).Sort .SetRange Range("A1:A6") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With myExcelは事前に作成したExcelオブジェクトです。BookNameは作成したブックのファイル名です。2行目「myExcel.workbooks(BookName).sheets(1).Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal」でエラーになります。 「型が一致しない」と表示されます。ちょこちょこ書き換えているのですがエラーは解消されません。 Windows 7/8 64bit Word 2007. Excel 2007 解決策をご存じでしたら教えてください。

  • 元のセル位置で並び替え

    添付画像にあるように「並び替え実行前」⇒「並び替え実行後」になる「ユーザー設定の基準」で並び替えるマクロを書きましたが、「悪い例」のようになってしまいます。 元のセル位置で並び替えるには「.SetRange Range("A1:E1")」のところを変えればいいと思い、いろいろ試してみましたが、うまくいきません。マクロを掲載しますので、修正点をご教示いただければ幸いです。 Sub Macro1() ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveSheet.Sort.SortFields.Add _ Key:=Range("A1"), _ Order:=xlAscending, _ CustomOrder:="松,竹,梅", _ DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:E1") .Header = xlNo .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With End Sub

  • エクセルVBAでデータ並べ替え

    マクロ記録をとると次のようになりました。 これをA列をキーに並べるもっと簡単なコードを教えてください。 Range("A2:G501")となっていますが、これ以上でも対応できるようにしたいです。 どなたか教えていただけないでしょうか。 Sub Macro1() Range("A1").Select ActiveWorkbook.Worksheets("***").Sort.SortFields.Clear ActiveWorkbook.Worksheets("***").Sort.SortFields.Add Key:=Range("A1"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("***").Sort .SetRange Range("A2:G501") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • VBS でのソート処理Excel2003

    VBSでソート処理を行っています。 Excel2007以上の環境では、正常に動作したのですがExcel2003環境では どうもうまく動きません。 とても困っています。 ご教示いただけないでしょうか。 'ソート処理 '// エクセルオブジェクトを使用して実行 Set objXL = WScript.CreateObject("Excel.Application") objXL.Workbooks.Open "C:\test.csv" objXL.ActiveSheet.Sort.SortFields.Clear objXL.ActiveSheet.Range("A1:M" & iLine).Sort objXL.ActiveSheet.Range("K1"), , , , , , , 0, 1, False, 1, 1, 0 objXL.ActiveSheet.Sort.SetRange objXL.ActiveSheet.Range("A1:O5000") objXL.ActiveSheet.Sort.Header = 1 objXL.ActiveSheet.Sort.MatchCase = 0 objXL.ActiveSheet.Sort.Orientation = 1 objXL.ActiveSheet.Sort.Apply Excel2003では、「Clear」がサポートされていないようで、 その処理を抜いて実行してみましたが、「438のエラー」が表示されてしまいます。 根本から理解できておらず申し訳ありません どうぞよろしくお願いいたします。

  • マクロ記録で作成した並べ替えのコードを修正したい

    Windows7 Excel2007 使用しているマクロ初心者です。 マクロ記録で、次の2個のスクリプトをつくりました。 二つとも正常に実行できています。 しかし、このコードは .SetRange Range("A3:N26")の部分をいちいち手動で変更しなくてはなりません。 この部分を自動で設定し、しかもどちらの一覧表でも使えるコードにしたいです。 どう修正したらよろしいでしょうか? .Header = xlNo以下のコード省略できますか? Sub 一覧表1のソート() Range("B2").Select Worksheets("一覧表1").Sort.SortFields.Clear Worksheets("一覧表1").Sort.SortFields.Add Key:=Range("B2"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Worksheets("一覧表1").Sort .SetRange Range("A3:N26") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub ---------------------------------------------------- Sub 一覧表2のソート() Range("B2").Select Worksheets("一覧表2").Sort.SortFields.Clear Worksheets("一覧表2").Sort.SortFields.Add Key:=Range("B2"), SortOn _ :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Worksheets("一覧表2").Sort .SetRange Range("A3:P28") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

専門家に質問してみよう