- ベストアンサー
VBAとVBSの違いについて!?
VBAとVBSの違いはなんですか? VBSの初心者本が売っていないので代わりに VBAの初心者本を購入して勉強しようかと考えているのですが、 無駄でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
見た目的には、よく似ていますので、全く「ムダ」とは言えませんが、やはり「VBScript」のことを勉強したければ、「VBScript」の勉強をされた方がいいと思います。 「VBScript 入門」で検索すれば、いくつかサイトがありますので、本より、そちらで勉強された方がいいと思います。 「VBScript」の本は、あっても、たいてい知りたいことは載っていません。 サイトで勉強され、わからないことは、やはりサイトで調べられるのが、今は一番だと思います。 私も「VBScript」は、サイトだけ勉強しました。 なお、プログラムそのものは、「VBA」と大変似ていますが、これがまたやっかいで、似ていますが、当然、違うところもあります。 全然違うと、かえって、分かりやすいのですが、「ちょっと違う」というのは、意外にやっかいなのです。 たとえば、「Excel」の「VBA」で、「最終行」は Cells(Rows.Count, 1).End(xlUp).Row ですが、「VBScript」では、 Set ex = CreateObject("Excel.Application") と、まず、エクセルの機能を読み込み(正確には「CreateObject」なので、「生成し」かも知れませんが)、 Set bk = ex.Workbooks.Open("D:\Programming\Book1.xlsx") で、ファイルを開き、 Set sh = bk.Worksheets("Sheet1") で、「Sheet1」を「sh」にセットし、 sh.Cells(sh.Rows.Count, 1).End(-4162).Row となります。 エクセルの「VBA」では、「Rows.Count」(エクセルが持っている最大行数)に、どのシートの「Rows.Count」か、などと指定する必要はありませんが、「VBScript」では、いちいち指定しなければなりません。 また、「xlUp」は使えず、「-4162」と記述しなければなりません。 この辺の感覚が違うので、「VBA」で勉強してしまうと、そこから「Excel」を操作しようと思うと、混乱することがあります(私は「VBScript」が先でしたが)。 しかし、何かの事情で、「Word」の「VBA」から、「Excel」を操作しなければならない場合、「Word」は、「Excel」の機能は持っていないので、実は、「VBScript」と同じ記述になります。 「xlUp」は、「Word」からは使えないので、「-4162」と記述しなければなりませんし、第一、「Set ex = CreateObject("Excel.Application")」で、「Excel」の機能を読み込まなければなりません。 「VBScript」のいい点は、何よりも「軽い」ことです。 ちょっとした処理をするのに、「VBA」なら、「Excel」や「Word」などを立ち上げなければなりませんが、「VBScript」なら、ダブルクリックするだけだったり、ドラッグ&ドロップするだけです。 必要なときに、必要な機能を読み込んで使うので、身軽なのです。 ちなみに、1つ、 Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") MsgBox(gf) Set gf = Nothing Set so = Nothing 上のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。 できたプログラムファイル(「~.vbs」ファイル)を、ダブルクリック(「シングルクリック」→「Enter」の方が確実)すると、プログラムファイルが存在するフォルダを表示します。 次に、 Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments Set f = so.GetFile(wa(0)) MsgBox(so.GetParentFolderName(f) & vbCrLf & f.Name) Set wa = Nothing Set so = Nothing やはり、「~.vbs」で保存し、できたプログラムファイルに、ファイルを1つだけ、ドラッグ&ドロップすると、ドラッグ&ドロップしたファイルの存在するフォルダ、ファイル名を表示する。 Set wa = WScript.Arguments が、ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされると、そのファイルが「wa(0)」という配列変数のようなものに入る。 見た目は配列変数だが、これは、ドラッグ&ドロップされたファイルそのもの、というべきものなので、通常の配列変数とは異なる。 2ファイルドラッグ&ドロップされると、「wa(0)」と「wa(1)」に、それぞれのファイルが入る。 このように、ダブルクリックやドラッグ&ドロップでプログラムが簡単に動くのは、「VBA」であり得ないので、利便性が高く、誰でも使える。 最初のプログラムだと、プログラムファイルの存在するフォルダのすべてのファイルを処理する、というようなことも簡単にできる。 Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "csv" Then Set cv = so.OpenTextFile(gf & "\" & f.Name, 1) Do Until cv.AtEndOfStream a = Split(cv.ReadLine, ",") ~~~ Loop End if Next などとして、上記の場合だと、フォルダ内のすべての「csv」ファイルを処理できる。 では、長々と失礼しました。 お勉強、がんばってください。
その他の回答 (1)
- kteds
- ベストアンサー率42% (1883/4441)
>無駄でしょうか? 無駄ではないですが、もっと適切な講座に目を通すほうがいいです。 たとえば「VBScript初心者入門講座」 http://vbscript.pgtop.net/category/16158079-1.html