Lesson 4 「構文とか配列とか基礎編」(04/07/14 Wed)
梅雨も去り、より一層外に出るということに対して不満を抱きながら表面的には笑顔を作っている方々が道端にゴロゴロしている今日この頃。冬が待ち遠しいです。寒いのキライですが。えーと今日は基礎的なコトやります。ってゆーかなんで今ごろ基礎なんでしょう・・・って思いましたね!?基礎って大事です。だからやります。まずは配列というもの(大事なコトバは太字になる傾向あり)を理解していただきましょうか。
えーとたぶん変数ってもう知ってますよね?
Dim Test as Integer
と宣言すると、Testという整数型の変数が宣言されたことになりますね。ここで、Dimは次元を表す(Dimension)ディメンジョンから来ていることに注目してください。つまり、変数には次元的な考え方があるということです。
上の例では、Testという変数に入る値は、整数1こなので、0次元です。んじゃあ1次元になるとどうなるか書いてみます。
Dim Test(1 To 10)as Integer
こうなります。意味わかりますか?使うときは次のうように使います。
Test(1)= 10
Test(2)= 20
こんなふうに使います。イメージを図にします。
なんとなくわかりますかね?例えば10このデータを扱う際に、10この変数をバラバラに宣言するには10行かかりますね。めんどくさいです。でも配列を使えば、1行です。
プログラミングの構文やらなんやらは基本的にこういう考え方で作られています。
めんどくさい→工夫する→楽になる
つまり同じプログラムでも知識の少ない管理人のような人間が作ると、コードの量が多くなり、無駄な変数が多くて重いプログラムになります。
あと(1 To 10)ってのは書くまでもないですけど、10この箱を用意するってことです。
じゃあ配列はこのへんにして、配列ともっとも仲の良い構文「For-Next」文の説明をします。
コンピュータの最大のメリットとはなんでしょうか?正確さ?速さ?楽さ?まぁどれもそうかもしれません。実際は、「めんどくさいことを自動で正確に速くやってくれる」ことでしょうか。よく例に出されるのが、「素数を求める」というプログラムです。10000までの素数を全てあげなさいなんて課題が出たら手動でなんてやってられないでしょう?まぁそういうことです。なんでこれがFor-Nextと関係あるんでしょうか?それはFor-Nextがただの繰り返しではないからです。
例えば、「1を100回足す」プログラムは、ただの繰り返しですが、「1〜100までの合計値を求める」となると・・・
イメージできますか?構文ではこう書きます。
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行は、整数型変数の宣言です。
3〜5行が For-Next文です。6行目は、結果をLabelに表示させています。
実行すればわかりますが、一瞬で5050という答えが出ます。
これもFor-Nextの特徴です。つまり、CPUのパワーをフルに使って計算するので、とても高速だということです。
じゃあちょっと内容の説明をします。
まず、For i = 1 To 100 ですが、これは、「変数iが1から100になるまで繰り返す」ということです。つまりForとNextとの間に書かれた式が、100回実行され、そのとき変数iには、その回数が入るということです。わかりますか?
最初は、順に説明しますね。
まず、iに1が格納されます。そしてAnsの初期値は指定していないので0が入っていますが、そのAnsにiを加えたものをAnsに格納しています。このときiには1が入っていますので、Ans = 0 +1 となり、Ansには1が格納されます。
そして、Nextにたどり着き、2周目に突入です。iに2が格納されます。そして、Ans = Ans + 2となりますが、この時、Ansには1が入っているので、Ans = 1+2 となるわけです。後はこの繰り返しです。整理すると、1+2+3+4+5+6+・・・
となっているのがわかると思います。Ans = Ans + i という書き方に抵抗があるかもしれませんが、よく使いますので、
飲み込んでください。
ここまでが正確に理解できれば、前回のExcelを扱うプログラムに組み込むことで、「簡単にExcelのデータを配列に読み込む」ことができるはずです。(数行で)あとは、
Label1.Caption
= Test(5) とか書けば、配列の中のあるデータをラベルに表示させて確認してみてください。
このようにA列の1〜20行に100〜2000という数値(あるものの価格という設定)を入力しておきます。
これを配列に読み込み、消費税込みの値段にして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文に入れてしまってもかまいません。
まぁ結果はやってみてください。簡単ですから。
今日はここまで。
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||