warizakiの低燃費日記

低燃費な方法でみなさんが幸せになれる方法を探っていけたらと思います。

VBAで文字を入力してみよう

目次

文字を入力してみよう

練習として普通の標準モジュールを作ってみましょう。

VBAの書き方はルールがゆるいので覚えやすいです。

今回は、

  1. Sub()~End sub のプロシージャ
  2. 変数宣言のDim
  3. 文字を入れたいときのString型 
  4. セルを扱うときのCells
  5. ループのFor文

この4つを使ってみましょう。

Sub()~End sub ですが、これはプロシージャといって、一つの塊のことです。私たちが普段ツールと読んでいる一つのまとまりのことです。Sub以外にもFunctionもありますが、今回は使いません。

Dimはディメンションの略です。変数っていうのは、なんでも入る箱です。例えばエクセルのA1セルに"warizaki"という文字をいれたいとき、String型の箱を作ってA1にいれてあげればよいですね。

Sub test()

 Dim sMoji as String

 sMoji = "warizaki"

 Cells(1,1) = sMoji

End sub 

これを実行してみるとA1セルにwarizakiという名前が記入されているはずです。※VBAで実行した内容はctrl + Zなどの取り消しが通用しないので、気を付けてね!

f:id:warizaki:20170909212850p:plain

Dim sMoji as String

これはsMojiという名前のString型変数、つまり文字が入れる箱を作りますよ!っていう宣言のことです。sMojiの先頭のsはStringのsを取ってきてます。名前のつけかたについては今はMojiだけでもいいし、aでもbでも良いです。でも変数の名前の書き方にも一応ルールがあるので、慣れてきたらぐぐってみましょう!

sMoji = "warizaki"

ここでsMojiという変数に"warizaki"という文字をいれています。初めてプログラミング見る子はちょっと気持ち悪く感じるかもしれないです。=の使い方が、学校の数学で習ってきたものと違うのですね。sMojiと"warizaki"はイコール関係なのではなく、あくまでsMojiのなかに"warizaki"を代入しているだけなのです。

Cells(1,1) = sMoji

ここで、Cell(1,1) のなかにsMoji、つまり"warizaki"を代入しているのです。右のものが左のなかに入る感じね。
Cells(1,1)というのは、お察しの通り、私たちがA1セルと呼ぶ場所のことです。セルの指定には様々なやり方がありますが(Range など)、ひとまずCellsを覚えましょう。(これが一番使いやすいし、処理速度が早いので。)

変数は大事

勘の良い子は「あれ、これって別にsMoji作らなくても直接いれればよくない?」と思ったかもしれません。その通りです!

Sub test()
 Dim sMoji as String
 sMoji = "warizaki"
 Cells(1,1) = sMoji
End sub

Sub test()
 Cells(1,1) = "warizaki"
End sub

でも同じ結果が得られます。

f:id:warizaki:20170909213255p:plain

実は今回の場合わざわざ変数sMojiを作る必要がないのですね。無駄なものを省きたいミニマリストな方にとっては変数を作る意味がわからなくなるかもしれません。確かに"warizaki"という文字が絶対に変わらないのであれば、そのまま書いてしまえば良いのです。定数っていって、実際にそういうものがあります。ですが、定数ばかりのプログラミングはありえません。変数を使いまくります。それはなぜか、保守性が高くなるからですね。今はものすごく小さなプロシージャ(=Subで囲ったもの)なので困りませんが、いろんなところで文字列"warizaki"を使わなければならないとき、そして使う度に"warizaki"と直接入力してしまったら。どうなるでしょうか。しばらくは困らないでしょう。でも将来"warizaki"を"hatena"に変えたいときが出てきてしまったときどうしましょう。一個一個書いたものを読んで直すのはひどく手間がかかります。でもそれしか直す方法がありません。でも変数sMojiを作ってそのなかに"warizaki"をいれてしまえば? そのときはDim sMoji = "warizaki"をDim sMoji = "hatena"にしてしまえばよいのです。それだけで終わっちゃうのです。
こういった場面で変数は強力な力を発揮します。初心者のうちは正直変数作らなくても良い場面が多いかもしれませんが、あえて作る癖をつけておくのも良いかと思います。定数ってのは使い勝手の悪い存在なので、あんまり使わない方がよいのです。 

f:id:warizaki:20170909221707p:plain

 発展系

ちょっとだけ発展させてみましょう。セルA2に"hatena"と入れてみます。

Sub test()
 Dim sMoji as String
 Dim sMoji2 as String
 sMoji = "warizaki"
 sMoji2 = "hatena"
 Cells(1,1) = sMoji
 Cells(2,1) = sMoji2
End sub

f:id:warizaki:20170909213832p:plain 

セルA2の"hatena"を上書きして、セルA1に入っている"warizaki"を入れます。 

Sub test()
 Cells(2,1) = Cells(1,1)
End sub

f:id:warizaki:20170909214354p:plain

 A1からA20までにwarizakiを入れてみましょう。

Sub test()
 Dim sMoji As String
 sMoji = "warizaki"
 For i = 1 To 20
  Cells(i, 1) = sMoji
 Next i
End Sub

f:id:warizaki:20170909214621p:plain

For i = 1 To 20
  Cells(i, 1) = sMoji
Next i

これはFor文といって、中の処理をループさせることができます。「iが20になるまで、セル(1,1) (2,1) (3,1)...にsMojiの中に入っている文字を入れる」という意味になります。Forを繰り返すたびiの数は1から順に増えていきます。 iは数値型の変数になるわけです。(本当はiもDimで宣言した方がよいですが、今回は省きますね。)

また、

Sub test()
 Dim sMoji As String
 sMoji = "warizaki"
 For i = 1 To 20
  Cells(i, 1) = i
  Cells(i, 2) = sMoji
 Next i
End Sub

f:id:warizaki:20170909215715p:plain
なんていうこともできるのですね。これをもっと進化させれば、おのずと自動転記させるツールが出来上がってくるわけです。