1206628897 VBScriptからExcelを操作し、オートフィルタでデータを抽出する方法を教えてください。



以下のような表を、Excelに作成しております。
 | A | B | C
--------------------------------------------------
1| 1 | 2 | 3
--------------------------------------------------
2| 4 | 5 | 6
--------------------------------------------------
2| 7 | 8 | 9


このExcel表を、VBScriptからAutofilterを設定し、値を抽出させたいと思っております。
作成したVBScriptは以下の通りです。
Dim objXL
Set objXL = WScript.CreateObject("Excel.Application")
objXL.Workbooks.Open "D:\home\vbs\0301-0305.xls"
objXL.Visible = true
objXL.ActiveSheet.Select
objXL.Range("A2").Select
objXL.Selection.AutoFilter
objXL.Selection.AutoFilter "Field:=1,Criteria1:=1 ,Operator:=1"

実行したところ、以下のようなエラーが出ます。
エラー:RangeクラスのAutoFilterメソッドが失敗しました。
コード:800A03EC
AutoFilterに渡すパラメータの渡し方がまずいのか?と思い、
いろいろいじってみたのですが、うまく動きません。


どなたかご教授お願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/03/28 00:32:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:haruo-31 No.2

回答回数80ベストアンサー獲得回数10

ポイント100pt

今手元のExcelでやってみたら、こうなってました。

書いてあるとおりメソッドをプログラムに書いているのなら、ダブルクォートする場所が悪いと思います。

Selection.AutoFilter Field:=2, Criteria1:="5"

あと、オートフィルタする場合は、一番上の行にはラベルを設定しないと、データがラベルとして扱われてほしいデータが取れなくなりますよ。

id:hagix

ご回答ありがとうございます。

>書いてあるとおりメソッドをプログラムに書いているのなら、ダブルクォートする場所が悪いと思います。

直して実行してみたのですが、

以下のとおり、エラーとなります。

エラー:ステートメントがありません。

コード:800A0400

>あと、オートフィルタする場合は、一番上の行にはラベルを設定しないと、データがラベルとして扱われてほしいデータが取れなくなりますよ。

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

2008/03/28 00:05:54

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント35pt

objXL.Selection.AutoFilter "Field:=1,Criteria1:=1 ,Operator:=1"

objXL.Selection.AutoFilter Field:=1,Criteria1:=1 ,Operator:="1"

では?

id:hagix

ご回答ありがとうございます。

試してみたのですが、

エラーとなります。

エラー:ステートメントがありません。

コード:800A0400

と、表示されます。

2008/03/28 00:01:48
id:haruo-31 No.2

回答回数80ベストアンサー獲得回数10ここでベストアンサー

ポイント100pt

今手元のExcelでやってみたら、こうなってました。

書いてあるとおりメソッドをプログラムに書いているのなら、ダブルクォートする場所が悪いと思います。

Selection.AutoFilter Field:=2, Criteria1:="5"

あと、オートフィルタする場合は、一番上の行にはラベルを設定しないと、データがラベルとして扱われてほしいデータが取れなくなりますよ。

id:hagix

ご回答ありがとうございます。

>書いてあるとおりメソッドをプログラムに書いているのなら、ダブルクォートする場所が悪いと思います。

直して実行してみたのですが、

以下のとおり、エラーとなります。

エラー:ステートメントがありません。

コード:800A0400

>あと、オートフィルタする場合は、一番上の行にはラベルを設定しないと、データがラベルとして扱われてほしいデータが取れなくなりますよ。

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

2008/03/28 00:05:54
  • id:hagix
    ダブルクォートの記述方法ですが、以下の方法を試してみたのですが、
    全て失敗しております。。。

    ・objXL.Selection.AutoFilter "Field:=1,Criteria1:=1 ,Operator:=1"
    →メソッドの実行に失敗
    ・objXL.Selection.AutoFilter Field:=1,Criteria1:="1" ,Operator:=1
    →ステートメントがありませんというエラー
    ・objXL.Selection.AutoFilter "Field:=1,Criteria1:="1" ,Operator:=1"
    →ステートメントがありません
    ・objXL.Selection.AutoFilter "Field:=1,Criteria1:=""1"" ,Operator:=1"
    →メソッドの実行に失敗


    引き続き、どなたかよろしくお願いします。
  • id:haruo-31
    おっと、大切なことを忘れていました。

    VBSでは、名前つき引数は使えません。

    objXL.Selection.AutoFilter 1, "1", 1

    で試してください。
  • id:hagix
    >VBSでは、名前つき引数は使えません。
    ありがとうございます!!!
    出来ました!

    恥ずかしながら、上記仕様を知りませんでした。。。
    教えていただいたとおり
    名前を付けずに実行したところ、
    一発で動きました。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません