• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBS でのソート処理Excel2003)

VBSでのソート処理Excel2003

このQ&Aのポイント
  • VBSでソート処理を行っています。Excel2007以上の環境では正常に動作するが、Excel2003環境ではうまく動かない。
  • Excel2003では「Clear」がサポートされていないため、その処理を抜いて実行したが、「438のエラー」が表示される。
  • Excel2003でVBSのソート処理がうまくいかない状況に困っている。質問者は根本的な理解ができていないと述べている。

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

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

SortオブジェクトはExcel2007で追加されたものだとのことです。 http://msdn.microsoft.com/ja-jp/library/office/ff821877.aspx http://officetanaka.net/excel/vba/tips/tips148.htm つまり、Excel2003にはSortオブジェクトはないということのようです。 そのため、質問者様のコードをExcel2003で実行すると、 objXL.ActiveSheet.Sort. で始まる行はすべてエラーになると思われます。 かわりにRange.Sortメソッドを使ってください。 http://msdn.microsoft.com/ja-jp/library/office/ff840646.aspx それで対応できなければオートフィルタを使ったりVBAで書いたりしなければならないと思います。 それを踏まえて質問者様のコードを見ると、Range.SortメソッドとSortオブジェクトのApplyメソッドの両方が書いてありますね。2回ソートしているということでしょうか。 以上いかがでしょうか。さらに解説が必要であればその旨補足ください。

参考URL:
http://msdn.microsoft.com/ja-jp/library/office/ff840646.aspx
psb01
質問者

お礼

ご回答いただきましてありがとうございます。 Range.Sortメソッドのみで正常に動作しました。 2回ソートしている、ご指摘をありがとうございました。 Excel2003と2007で使えるメソッドがかなり違うことがわかりました。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ワード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 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

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

    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

  • EXCEL VBA シートのコピー後処理?

    EXCEL2013使用にてフォーム内ボタンより 下記、受注一覧表シートをコピー→一番左に配置して 処理シートに名前を変更して J列基準の昇順に並び変えようとしていますが ActiveSheet.Name = "処理シート"で コードの実行が中断されましたメッセージが出ます。 ActiveSheet.Name = "処理シート"にブレークポイントを置いて F8で進めていきますと処理実行します。 ユーザーフォームは UserForm1.Show 0で開いております。 どの箇所の修正を行えばいいのか ご教示時お願いいたします。 Private Sub CommandButton1_Click() Worksheets("受注一覧表").Copy Before:=Worksheets(1) ActiveSheet.Name = "処理シート" Worksheets("処理シート").Select Rows("8:2328").Select Range("B8").Activate ActiveWorkbook.Worksheets("処理シート").Sort.SortFields.Clear ActiveWorkbook.Worksheets("処理シート").Sort.SortFields.Add Key:=Range("J9:J2328") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("処理シート").Sort .SetRange Range("B8:L2328") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("B8").Select End Sub

  • 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

  • エクセル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

  • EXCEL2007と2003のソートの記述の違い?

    下記は配布する予定で作成したプログラムの一部(ソート部)です。EXCEL2007で作成して機能しているのですが残念ながらEXCEL2003ではエラーとなります。(方法2)そこでもうひとつ(方法1)に変えてみましたがどちらもEXCEL2003ではエラーになります。 内容は1行目の見出し部分を並び替えさせるというものです。(優先順に左から右)抜粋コードの前段階では各見出しの先頭にアルファベットと数字を付加し、その後その付加を基準にソート対象列を抜粋コードにより並び替え、その後は付加コードを切り取るという流れです。 残念なことにEXCEL2003が無いものですから、2007と2003のソートの記述の違いが解りません。何卒ご教示願えませんでしょうか? ちなみに変数 見出し列数 は列のカウント数です。(ソート対象外の列)そして変数の指定の誤りというおちはありません。 方法1(2回めに2003用でもいけるかなと思って作成分) SH2.Sort.SortFields.Clear SH2.Sort.Orientation = xlLeftToRight SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _ key1:=SH2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _ Header:=xlNo 方法2 (最初に深く考えず作成したもの 思いきり2007仕様になってます) With SH2.Sort '見出し優先順位により入れ替え .SortFields.Clear .SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)) .Header = xlNo .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With

  • 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