- ベストアンサー
WSHでエクセル」を検索表示
WSHを使ってデータを入力、エクセルファイル内を検索して、該当データがある行のいくつかのセルの内容を表示する方法があればおしえてください。
- みんなの回答 (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ループが抜けれたかどうかははっきりと記憶してませんので確かめてみて下さい。 もっと早くしようと思ったらエクセルの検索機能を利用するのがよいでしょう。マクロの記録でコードを調査してスクリプトに組み込んでみるとよいと思います。
その他の回答 (2)
- 100Gold
- ベストアンサー率27% (284/1018)
再度回答します。 まず、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) エクセル内を検索する良い方法はないでしょうか?。
- 100Gold
- ベストアンサー率27% (284/1018)
まずは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 こんな感じでやりたいのですがうまくいきません。 良い方法があればヒントをお願いします。
お礼
参考になりました。ありがとうございました。 データは17000件くらいです。 マクロの記録のコードを調査は気付きませんでした。 これをやってみます。 また、わからないことがありましたらまた質問するかもしれませんが、そのときはよろしくお願いします。