質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

2回答

10379閲覧

VBScriptでExcelのセルをソート

massaa

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/02/19 14:51

前提・実現したいこと

VBScriptでExcelのセルを昇順にソートしたいと思っています。

発生している問題・エラーメッセージ

「ステートメントがありません」というエラーが出ます。
エラーコード:800A0400
おそらくSortメソッドのKeyの部分かと思っています。

該当のソースコード

filepath = WScript.Argument(0) set xlobj = CreateObject("Excel.Application") xlobj.Workbooks(filepath) xlobj.ActiveWorkbook.Sheets("Sheet1").Select xlobj.Columns("A1:A22").Sort Key1:=xlobj.Range("A:A"), order1:=xlAscending xlobj.ActiveWorkbook.Save xlobj.ActiveWorkbook.Close() xlobj.Quit xlobj = Nothing

試したこと

Key1の部分をActiveSheetなどの構文を追加したりしましたが、解決しませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

toshi17922062さんの指摘に加え、色々不備がありましたので修正してみました。
詳細は比較してもらうこととして、いくつかポイントだけ説明します。
xlAscendingなどのVBAの定数は使えませんので、値を直接していするか下記のようにConstで定義してあげる必要があります。
VBAやVBScriptはアクティブなブック・アクティブなシートを対象とするのではなく、オブジェクトに格納して、それ経由で操作するほうが安定した動作ができます。

VBScript

1Option Explicit 2 3Dim filepath 4Dim xlobj 5Dim bk 6Dim sh 7 8Const xlAscending = 1 9Const xlDescending = 2 10 11filepath = WScript.Arguments(0) 12Set xlobj = CreateObject("Excel.Application") 13 14Set bk = xlobj.Workbooks.Open(filepath) 15Set sh = bk.WorkSheets("Sheet1") 16 17sh.Range("A1:A22").Sort sh.Range("A1"), xlAscending 18 19bk.Save 20bk.Close 21 22Set xlobj = Nothing

投稿2019/02/20 00:54

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

massaa

2019/02/20 15:37

回答ありがとうございました。 「RangeオブジェクトのSortメソッドが失敗しました」というエラーも、VBAの定数が使用できないことが原因でしょうか? (名前付き引数の部分を修正したところ、このエラーが出ました。)
ttyp03

2019/02/20 23:43

>VBAの定数が使用できないことが原因でしょうか? 原因のひとつと思われます。 定数を宣言せず私が書いたコードのように冒頭でOption Eplicit宣言をしない場合、おそらくデフォルト値の0が使用されることになりSortでエラーになる可能性はあります。 もう1つ原因があって、それはColumnsを使っていたことです。 こちらはRangeに置き換えてあります。
guest

0

VBScriptやJScriptでExcelのワークシートを指定シートの後に追加する - プログラマとプロマネのあいだ

次にVBScriptでやる場合

VBScriptでは、名前付き引数の指定はできないので、
代わりに不要な引数を省略します。

だそうです。

投稿2019/02/19 18:48

toshi17922062

総合スコア183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

massaa

2019/02/20 15:31

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問