Lesson 4  「構文とか配列とか基礎編」(04/07/14 Wed

 

← 戻る Visual Basicメニュー 次へ → ☆ Top ☆

 

梅雨も去り、より一層外に出るということに対して不満を抱きながら表面的には笑顔を作っている方々が道端にゴロゴロしている今日この頃。冬が待ち遠しいです。寒いのキライですが。えーと今日は基礎的なコトやります。ってゆーかなんで今ごろ基礎なんでしょう・・・って思いましたね!?基礎って大事です。だからやります。まずは配列というもの(大事なコトバは太字になる傾向あり)を理解していただきましょうか。

えーとたぶん変数ってもう知ってますよね?

Dim Test as Integer

と宣言すると、Testという整数型の変数が宣言されたことになりますね。ここで、Dimは次元を表す(Dimension)ディメンジョンから来ていることに注目してください。つまり、変数には次元的な考え方があるということです。

上の例では、Testという変数に入る値は、整数1こなので、0次元です。んじゃあ1次元になるとどうなるか書いてみます。

Dim Test1 To 10as Integer

こうなります。意味わかりますか?使うときは次のうように使います。

Test1= 10

Test2= 20

こんなふうに使います。イメージを図にします。

なんとなくわかりますかね?例えば10このデータを扱う際に、10この変数をバラバラに宣言するには10行かかりますね。めんどくさいです。でも配列を使えば、1行です。

プログラミングの構文やらなんやらは基本的にこういう考え方で作られています。

めんどくさい→工夫する→楽になる

つまり同じプログラムでも知識の少ない管理人のような人間が作ると、コードの量が多くなり、無駄な変数が多くて重いプログラムになります。

 

あと(1 To 10)ってのは書くまでもないですけど、10この箱を用意するってことです。

 

じゃあ配列はこのへんにして、配列ともっとも仲の良い構文「For-Next」文の説明をします。

コンピュータの最大のメリットとはなんでしょうか?正確さ?速さ?楽さ?まぁどれもそうかもしれません。実際は、「めんどくさいことを自動で正確に速くやってくれる」ことでしょうか。よく例に出されるのが、「素数を求める」というプログラムです。10000までの素数を全てあげなさいなんて課題が出たら手動でなんてやってられないでしょう?まぁそういうことです。なんでこれがFor-Nextと関係あるんでしょうか?それはFor-Nextがただの繰り返しではないからです。

例えば、「1100回足す」プログラムは、ただの繰り返しですが、「1100までの合計値を求める」となると・・・

イメージできますか?構文ではこう書きます。

Private Sub Command3_Click()
Dim i As Integer
Dim Ans As Integer
For i = 1 To 100
Ans = Ans + 1
Next
Label1.Caption = Ans
End Sub

簡単でしょう?上から2行は、整数型変数の宣言です。

35行が For-Next文です。6行目は、結果をLabelに表示させています。

実行すればわかりますが、一瞬で5050という答えが出ます。

これもFor-Nextの特徴です。つまり、CPUのパワーをフルに使って計算するので、とても高速だということです。

じゃあちょっと内容の説明をします。

まず、For i = 1 To 100 ですが、これは、「変数i1から100になるまで繰り返す」ということです。つまりForNextとの間に書かれた式が、100回実行され、そのとき変数iには、その回数が入るということです。わかりますか?

最初は、順に説明しますね。

まず、i1が格納されます。そしてAnsの初期値は指定していないので0が入っていますが、そのAnsiを加えたものをAnsに格納しています。このときiには1が入っていますので、Ans = 0 +1 となり、Ansには1が格納されます。

そして、Nextにたどり着き、2周目に突入です。i2が格納されます。そして、Ans = Ans + 2となりますが、この時、Ansには1が入っているので、Ans = 1+2 となるわけです。後はこの繰り返しです。整理すると、1+2+3+4+5+6+・・・

となっているのがわかると思います。Ans = Ans + i という書き方に抵抗があるかもしれませんが、よく使いますので、

飲み込んでください。

ここまでが正確に理解できれば、前回のExcelを扱うプログラムに組み込むことで、「簡単にExcelのデータを配列に読み込む」ことができるはずです。(数行で)あとは、

Label1.Caption = Test(5) とか書けば、配列の中のあるデータをラベルに表示させて確認してみてください。  

このようにA列の120行に1002000という数値(あるものの価格という設定)を入力しておきます。

これを配列に読み込み、消費税込みの値段にしてB列に入力します。

簡単でしょ?

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

'ここに処理を書く
For i = 1 To 20
Zeikomi(i) = xlSheet.Cells(i, 1).Value * 1.05
Next
For i = 1 To 20
xlSheet.Cells(i, 2).Value = Zeikomi(i)
Next

xlSheet.SaveAs App.Path & "\L3Test.xls"

xlApp.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

End Sub

                                はいコードのっけました。2つの変数宣言と2つのFor-Nextを追加し、余計なもの(12345とかバカとか)は削除しました。まぁ今回「配列に読み込みながら税込み価格にする」と「Excelに配列を出力」を分けて書きましたが、1つのFor-Next文に入れてしまってもかまいません。

まぁ結果はやってみてください。簡単ですから。 

今日はここまで。

 

← 戻る Visual Basicメニュー 次へ → ☆ Top ☆
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送