Lesson 3 「Excel・Wordのあれこれ」(04/07/10 Sat)
今日は前回の足し算では物足りないという方のために
一気に難しいことをしてやろうという魂胆みえみえのタイトルです。
ハッキリいってまだこんなことやれるほど説明していませんが・・・ちゃっちゃといきましょう。まずわ〜基本的な知識から。
VB(VisualBasic)からExcelやWordを扱う場合、大きく最初に2つのやり方があります。1つは、VB内で扱うオブジェクトとして、VBに事細かに宣言し、プログラムが起動してから手動でメモリに読み込む方法。これは、ソースコードがハッキリするかわりに、動作が重くなります。そしてもう1つは、VBにあらかじめExcelやWordを扱うことを設定しておき、プログラム起動時に自動でメモリに読み込む方法。これは、ソースに最小限しか書かないので後で見たときにわかりにくいですが、処理が高速で、プログラミングしやすいです。また、参照設定と呼ばれます。
とりあえず、Word・Excelを扱う時は「参照設定」っちゅうことです。
では実際に何をどうすれば参照設定になるかやってみます。
えっとね「プロジェクト」の「参照設定」をクリックです。
ここが参照設定の設定項目です。
参照設定の真ん中ぐらいにある「Microsoft Excel 9.0 Object Library」にチェックを入れてください。(Wordを扱う場合は、わかりますよね?Microsoft Word 9.0 Object Library にチェックです)左図のようにチェックを入れたら右上のOKでおわりです。簡単すぎですか?
ここまでが「参照設定」の設定です。これで終わりです。
まぁなんてゆうかこういうことはなんでもそうですが、知らない人が探すのはたいへんですが、わかってる奴にとっては馬鹿馬鹿しいくらい簡単なコトなんです。
ああでも、これだけではExcelはまだ扱えません。次の選択肢に行きましょう。
それは、「新しくExcelファイルを作って・データをいじって・名前付けて保存」という作業を行うのか、それとも「既存のExcelファイルを開いて・データを編集して・上書き保存」するかによって、当然コーディング(ソースの書き方)がかわります。
ま めんどくさいんでとりあえず「既存のExcelファイルを開いて・データを編集して・上書き保存」こっちをやります。
Option Explicit
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
えーと1行目の説明いりますか?「Option Explicit」って書いてありますね。オプションを明示せよってことなんですが、わかりやすくゆうと、変数宣言を必ずしなさいということです。この1行を書いておくことで、変数の宣言を忘れたまま変数を使おうとするとエラーが出て教えてくれます。まぁあった方が良いです。
さて3つほど変数の宣言してますね。
Dim xlApp as Excel.Application :xlAppという変数をExcelアプリケーションとして宣言。
Dim xlBook as Excel.Workbook :xlBookという変数をExcelのワークブックとして宣言。
Dim xlSheet as Excel.Worksheet :xlSheetという変数をExcelのワークシートとして宣言。
えっとこんなんでわかりますよね?変数名は自由に付けれると説明したし、変数とは箱とかも説明したし・・・あ・・・まさか・・・Excelのアプリケーションとかワークブックとかワークシートとかって何?とか?
アプリケーション:Excelというプログラムそのもの。本体です。
ワークブック:Excelは本体の中にブックという領域を持っており、その中に複数のシートを持っている。
んじゃあ次は、「既存のExcelファイルを開く」ために、準備しましょうか。作成するプログラム本体と同じ場所に、開くべきExcelファイルを置いてください。
えっとね「L3Test.xls」という名前で作ってみました。あとね、アドレスってとこを見てください。このフォルダがある場所を表しています。プログラミングするにはこういったことも重要になってきます。覚えてください。このアドレスのことをプログラミング用語ではパス(Path)といいます。MS-DOSではディレクトリとか言ってましたか。インターネットではアドレスっていいますね。ようは「ファイルのありかを表す住所」みたいなものです。そしてプログラミングではパスを指定してファイルを開きます。どこにあるかわからんファイルは開けないということです。
じゃあ実際に「L3Test.xlsを開いて・何もしないで・上書き保存する」だけのコードを書きます。なぜ一気に保存まで書くかというと、開きっぱなしでプログラムを終了するということは、気持ち悪いからです。まぁ順番にいきましょう。
フォームにボタンを1こ作って、そのボタンを押すと、「L3Test.xls」を開いて、上書き保存するというプログラムです。
Option Explicit
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(App.Path & "\L3Test.xls")
Set xlSheet = xlBook.Worksheets(1)
Dim i As Integer
Dim Zeikomi(1 To 20) As Integer
xlApp.Visible = True
xlApp.DisplayAlerts = False
'ここに処理を書く
xlSheet.SaveAs App.Path & "\L3Test.xls"
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
どうですか?ちょっといっぱい増えましたけど、まだ処理は書いてないので余裕でしょう。
さてどう説明するかな・・・やっぱり1行ずついきますか・・・
Set xlApp = CreateObject(“Excel.Application”):ええとxlAppという変数に、エクセルというオブジェクトをセットします。変数に数値を入れるのと一緒です。
Set xlBook = xlApp.Workbooks.Open(App.Path & “\L3Test.xls”):これもちょっとややこしいです。xlBookという変数に、エクセルのワークブック()で指定したモノを開いてセットします。で、カッコの中なんですが、さっきパスとか説明しましたね?あれなんですけど、ここで、「App.Path」というのを使ってます。これはVBの固定値で、作成するプログラム本体のパスをこういった形で使うことができます。つまり例えば、
App.Path = C:\MyData\Visual Basic\Lesson3
となっています。んで、&というのは、足し算でゆうと+です。文字を足すときに使います。んでまぁ↑これに、\L3Test.xlsを足して、住所が完成するわけです。あと、“\L3Test.xls” この“”で囲まれているのにも意味があります。これは、固定値とか変数とかは箱であり、その中に文字とか数値が入っていますが、“”でかこまれた部分は箱ではなく、文字そのものです。まぁ箱かそうでないかを区別してるんです。
Set xlSheet = xlBook.Worlsheets(1):ああ飽きてきた・・・はい説明しますよーxlSheetという変数に、さっきxlBookに開いたブックの中のシート1(普通のエクセルだとシートは3つありますね?その中の1です)をセットします。
xlApp.Visible = True:これはちょっと特殊です。意味は、処理中のエクセルを表示するかしないかです。プログラムってのは、ほっとくとフルスピードで処理しますので、「画面に表示」するのが間に合わないんです。だからこうやって無理矢理表示させるんです。表示させたくないなら書く必要はありません。
xlApp.DisplayAlerts = False:エクセルのディスプレイアラート(上書きしますか?とかのポップアップメッセージ)を切ります。上書きするたんびに聞かれたらウザイです。切っておきましょう。ちなみに= True とすると常に〜しますか?って聞いてきます。ウザイのが好きな方はどうぞ。
‘ここに処理を書く:こうゆうのコメントブロックっていいます。文の先頭に’カンマをつけると、そのあとの文章は、コメント扱いとなり、ソースコードとして認識されません。後でわかりやすいように、文の意味なんかを書いておくといいかもしれませんね。
xlSheet.SaveAs App.Path & “\L3Test.xls”:これは、編集したxlSheetをApp.Path & “\L3Test.xls”に保存します。
App〜はわかりますよね?住所の指定です。SaveAsってのが保存コマンドですね。この1行で上書き保存をしてます。
xlApp.Quit:エクセル扱うのを終了する。という意味です。ちゃんと終了処理も書きましょう。
Set ○○○ = Nothing:めんどくさいので3つ一気にいきます。変数は、数字とか文字とかを格納した場合は、こんなことしなくてもいいんですが、Set ○○ というふうに変数をセットした場合(事前バインディングといいます)などは、ちゃんと開放(= Nothing)してやらないと、メモリにカスが残ってパソコンがどんどん遅くなります。終了処理を行っていないソフトなんかを使ってると、こういう開放を行っていないので、メモリがどんどんくわれていきます。これは危険です。是非開放してください。
「これじゃあエクセルのデータ編集できねーYO!」って感じですか?開いて閉じるだけですからねーなんか 簡単に処理書きましょうか・・・
でもいわゆる処理に必要な構文(VB用語で特別な文法のことです)は一切説明してませんからねぇ・・・データだけいれていくか・・・一応ゆっとくと、構文てのは、「If文」とか「For Nextループ」とか「Select Case選択」とかがあります。今はまぁ説明しません。
えっとじゃあカラッポのL3Test.xlsに適当に数字とか文字を入力するということをやりましょうか。
このとうりカラッポです。そして・・・
Option Explicit
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(App.Path & "\L3Test.xls")
Set xlSheet = xlBook.Worksheets(1)
Dim i As Integer
Dim Zeikomi(1 To 20) As Integer
xlApp.Visible = True
xlApp.DisplayAlerts = False
'ここに処理を書く
xlSheet.Cells(1, 1).Value = 12345
xlSheet.Cells(1, 2).Value = "ばか"
xlSheet.SaveAs App.Path & "\L3Test.xls"
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
はい2行追加しました。ここに処理を書くってとこにね!
xlSheet.Cells(1.1).Value = 12345:こう書けば、エクセルのA列1行のセルに12345という数値が入力されます。結果は下の図です。このように、エクセルにセルを指定する場合は、列と行を数字で指定します。
(行番号.列番号)という具合です。よく間違えるのは、これを逆に解釈して、やたら横にばっかりデータが入る人がいます。たとえば、A列の2行目にデータを入れるときは、(1.2)ではなく、(2.1)だということを注意してください。ちなみに(2.1)には文字で「ばか」といれています。
あとばかの方だけ“”で囲まれていますが、これは、文字だからです。
ばかという変数が存在するかもしれないので、囲んで区別しないとだめです。逆に、12345は囲まれていません。12345という変数は存在しないからです。数字だけで変数の名前を付けることはできません。数字は数字しかないんですよ。ここらへんきっちり理解してください。ルールですんで。
じゃあ逆に、エクセルからデータを取る時は、どうすればいいでしょうか?
これは入力するよりも難しいです。説明しましょうか・・・
エクセルからデータをとる場合、VB側の変数(何かのハコ)にいれる(格納する)のが一般的です。が、変数というのは、型(数値とか文字とか)をあらかじめ宣言しないと使えません。つまり、エクセルから数値ばかりを取ってくる場合、数値型の変数を用意します。しかし、この変数には文字を入れることができませんし、数値型と簡単にゆっても、数値型の種類って結構あるんですよ。Lesson1か2でいくつか紹介したと思いますがね。まぁ扱う数値が小さい(-32767〜+32768)場合は、Integerを使えばいいんですが、大きい場合はLongを使わないといけません。少数ならSingleやDoubleを使わないといけません。今4つ言いましたが、まだまだあります。これらを知らないと、数値を扱えません。
なので今日はここまで。イマイチ使えないプログラムでしたが、それはまだ基本を学んでいないからです。
そこらで売ってる本を読んでみたらわかります。こんなエクセルの扱い方が書いてあるのは、応用編の後半です。つまりここに来るまでに基本編1冊と応用編の前半を理解しているはずなんです。ハイとばしすぎー。
ああ最後に、Wordは?って聞かないでください。ここまで説明すれば説明しなくてもWordもわかるはずなんです。
例えば、宣言は
Dim wdApp As Word.Application 、Dim wdDoc As Word.Document
とか 事前バインディングは
Set wdDoc = wdApp.Document.Open(パス)
とかね。ほとんどいっしょですよ。
エクセルファイルの構造とワードファイルの構造がちゃんとわかっていればダイジョーブ。
エクセル本体→ワークブック→ワークシート
ワード本体→ドキュメント
簡単だべ。あとやっぱり変数の型の一覧がほしいかな。まぁとりあえず今度探すとして、今んとここんだけ。
Integer :整数型。30000以下の整数を扱うならコレ。
Long :長整数型。30000以上の整数を扱うならコレ。かなり大きなものまで扱える。
String :文字列型。あ とか へそ とか 文字を扱うならコレ。
Single :少数型。桁数があんまり多くない少数ね。ちなみに整数も扱えるハズ。
Double :長少数型。桁数が大きい少数ね。ちなみに整数も扱えるハズ。
とりあえずこんだけあれば たいていはできるかな?
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||