ここから質問投稿すると、最大10000ポイント当たる!!!! >>

WSHを使ってデータを入力、エクセルファイル内を検索して、該当データがある行のいくつかのセルの内容を表示する方法があればおしえてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

再度回答します。


この記述だと毎回17000件のデータを検索しています。
見つかった時点でループを抜けるようにしましょう。
データは常に17000件入力されているのでしょうか?
もし、そうでないならデータの最後尾まで検索するように書き直しましょう。
X=myexel.cells(i,25)
if X=F then D=i
のぶぶんは冗長ですので
if myexel.cells(i,25)=F then exit for
とかにするといいんじゃないでしょうか。Xに変数を代入する処理が17000回分減りますから速度が向上するはずです。D=iもいらないんじゃないですか。iをそのまま使えばいいと思います。exit forでforループが抜けれたかどうかははっきりと記憶してませんので確かめてみて下さい。

もっと早くしようと思ったらエクセルの検索機能を利用するのがよいでしょう。マクロの記録でコードを調査してスクリプトに組み込んでみるとよいと思います。
    • good
    • 0
この回答へのお礼

参考になりました。ありがとうございました。
データは17000件くらいです。
マクロの記録のコードを調査は気付きませんでした。
これをやってみます。
また、わからないことがありましたらまた質問するかもしれませんが、そのときはよろしくお願いします。

お礼日時:2003/05/20 11:07

再度回答します。


まず、VBSだから出来ないのかVBAでも出来ないのかを調査します。
その為に、試したいプログラムをVBAで実行してみて下さい。この段階でうまくいかないのであれば、コードにバグが含まれています。いろんな所にmsgboxを入れて、変数の変化をチェックしつつデバッグしてください。
次に、それをVBSに移植して実行します。VBAで上手く動くのが、この段階で上手く動かないのであれば、VBSでは使用できないコードが含まれています。
その場合は#1に記載したように、VBAのコードを生成して実行するVBSを作成することで回避できます。

この回答への補足

回答ありがとうございます。
プログラムは動くのですが、遅すぎて使えないと言う状況です。

DIM F,X,I,A,D,B,C
d=1
F=InputBox("dataをいれてください ")
Set myexel = CreateObject("Excel.Application")

myexel.WorkBooks.open("D:\JJJ")
for i=1 to 17000
X=myexel.cells(i,25)
if X=F then D=i
next

A=myexel.cells(D,9)
B=myexel.cells(D,10)

myexel.WorkBooks.close

C=A&B
WScript.echo(C)

エクセル内を検索する良い方法はないでしょうか?。

補足日時:2003/05/19 11:17
    • good
    • 0

まずはcreateobjectメソッドでエクセルオブジェクトを作って下さい。



例:
Set myexel = WScript.CreateObject("Excel.Application")

あとはVBAと同じです。例だとmyexelがエクセルVBAのアプリケーションオブジェクトになります。一部VBSからは使えないメソッドがありますが、VBS中でVBAのコードを記述して実行することによって回避できます。

この回答への補足

ありがとうございます。
エクセルのデータの書き込みや読み込みは出来るのですが
検索がうまくいきません。
何か良い方法はありませんか?。
検索するのは1列のみで、重複データはありません。

deteと入力したとすると

myexel.WorkBooks.open("c:\book1")
for i=1 to 9999
X=myexel.cells(i,2)
if X="data"
then A=myexel.cells(i,5)
end if
next
MsgBox A

こんな感じでやりたいのですがうまくいきません。
良い方法があればヒントをお願いします。

補足日時:2003/05/16 10:59
    • good
    • 0

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


人気Q&Aランキング