アルゴリズムについて学ぶ ~変数と配列~

アルゴリズム

今回は、アルゴリズム(変数と配列)について触れていく。

変数と配列は、どの言語(プログラム)に対しても重要なものである。

スポンサーリンク

変数とはなにか

簡単に言えば、記憶したいものを格納しておく言葉と思えばいい。
例えばAという言葉に「エレベーター」を格納する。
すると、A=エレベーターとしてインプットされる。

これで、「エレベーター」と7文字も打たなくても、「A」と1文字打てばそれが「エレベーターのことだ」と認識される。
また、A←変数として認識される。

とは言っても、本当はもっと複雑な説明があるのだが、ここではざっくりと(ざっくりしすぎているが)説明した。

変数は入れ替えることもできる(代入)

そして、この変数は入れ替え自由である。

要は「代入」すれば変数の値が入れ替わるということだ。

例えばAのエレベーターを取り消してエスカレーターに置き換えたい時は、改めて代入して「A=エスカレーター」と打てば、エスカレーターに置き換わる。
つまり、こういうことである。

A=エレベーター(この時点でAにエレベーターがセットされる)
A=エスカレーター(この時点でエレベーターがエスカレーターに置き換わる)

変数を使う時はまず宣言が必要

しかし、ただ、「A=エレベーター」と書けばいいわけではない。
(言語によってはただ書いてもOKな場合もあるが・・)

なぜなら、

  • 入れたい言葉が文字型なのか数値型なのか分からない

という問題があるためである。

またもう一つ大事なことは、

  • 予めメモリの中にデータを保存するための領域を確保する必要があるから
  • プログラミングを書いていて、変数の宣言がないと変数の綴りが間違っていたとしても通ってしまいエラーが見つかりにくいことがあるから

ということである。

特に後者、「プログラミングを書いていて変数の宣言がないと変数の綴りが間違っていたとしても通ってしまう」という件についてはこちらで例をまとめる。

A=エレベーター

If AA = "エレベーター" then
  Msgbox AA
End if 

この場合、本当はAがエレベーターならメッセージボックスにAの値を表示したいのだが、タイプミスで「AA」になってしまっている。
でも変数の宣言をしていないと、エラーが出ないでそのままOKになってしまう。

しかもこの場合、AAは空白として表示されてしまい、エレベーターという値が入っているはずなのになんで空白なのかすぐには分からなくなってしまう。

これがもし1万行とかのプログラムだったら・・?と思うと恐ろしくなる。

よって、エラーを見つけやすくするため、また、メモリの消費を抑えるためにも変数の宣言はとっても大事なことである。

配列とはなにか

では変数をざっくりと説明したところで、次に大事な配列にうつる。
配列とは簡単に言うと、「複数の変数をまとめて使う」ことである。

例えば、Excelの表があったとして、その表にある特定の列の値を全部変数にセットする必要があった時。

例えばこのうち「名前」の値を全部変数にセットしたいと思った時。
1つずつ変数にセットしようとすると、大変な数になってしまう。

例*変数はstrNameとすると
  strName1 = “前田”
  strName2 = “田中”
  strName3 = “山田”
  strName4 = “河合”
  strName5 = “田村”
  strName6 = “青木”
・・と、こういうふうに値が増えるごとにいちいち変数を増やしていかねばならない。
また、この場合行数が増えたらどうなるのか・・・

そういう意味でも、このやり方はあまり良くない。

そこで、どうするか。
ここで配列の登場である。

配列があると簡単にすべての値をセットできる!

先に結論を言うと、この場合配列へのセット方法としてはこうなる。(例*VBA)

Sub macro1()
    Dim arr As Variant
    
    arr = Application.WorksheetFunction.Transpose(Range("B4:B9"))
    
    Dim msg As String
    Dim i As Integer, j As Integer
    
    For i = 1 To 6
        msg = msg & arr(i) & ", "
        msg = msg & vbCrLf
    Next i
    
    MsgBox msg
End Sub

このやり方だと、列にある値を一度に変数にセットできる。
また、結果はこうなる

つまり、

 arr = Application.WorksheetFunction.Transpose(Range("B4:B9"))

ここで一度にB列の値をarr変数にセットできている。

そして、i変数で行数カウントをしながら次の行を読み込み、その都度配列の値を引っ張り出している。

要はこういうことである。

このように配列を使えば、指定した範囲内にある値を一度に変数に格納できる。
かつ、数字をうまく利用してセットされた値を引っ張り出すことも可能である。

また、配列のすごいところは「1つの列(行)だけでなく複数の場合でも一度に格納できる」ということである。

例えば上記の場合、「名前」だけでなく「職業」もつけたい場合はこうなる。

Sub macro1()
    Dim arr As Variant
    
    arr = Application.WorksheetFunction.Transpose(Range("B4:C9"))
    
    Dim msg As String
    Dim i As Integer, j As Integer
    
    For i = 1 To 6
        For j = 1 To 2
            msg = msg & arr(j, i) & ", "
        Next
        msg = msg & vbCrLf
    Next i
    
    MsgBox msg
End Sub

この場合だと、結果はこうなる

このように配列をうまく使えば、複数の列の値を一度にセットすることが可能になる。

そしてこれはどんな言語にも共通していることである。(多分・・)

まとめ

このアルゴリズムに関する記事は、下記の本を参考にしている。
この本はアルゴリズムの基礎の基礎ともいうべき超基本的なことが書いてあるので、プログラム初心者にとっても分かりやすく是非オススメしたい本である。

ではここまでで、変数と配列について基本をまとめた。
次は様々なアルゴリズムについて少しずつ触れていく。

タイトルとURLをコピーしました