(Excel)VBAを本当の初心者に説明する用にまとめておく③(文字列/数値入力・取得)
実際にコードを書いてみましょう。一般的に一番最初にプログラムを実行するときには"Hello World"と打つのが一般的です。
文字列をコンピュータに表示させるという最も簡単なプログラムを実行してみることでVBAの記述のルールを確認すると良いでしょう。
前回までの記事を参考にVBEを立ち上げて標準モジュールにプログラムを書き込んでいきましょう。
<目次>
VBAでプログラムを書く際の基本ルール
・Subで開始し、End Subで終わるべし
・Subの後はプロシージャー名を記入し、()で締めるべし
※SubからEnd Subまでの一連の処理をプロシージャーと呼びます。このプロシージャーに名前をつけて管理します
・文は改行で区切るべし
・分が長くなった場合には「 _」(スペース、アンダーバー)とすると、「 _」の前後を一行として認識してくれるので活用すべし
・コメントを書きたい場合は「'[bash]コメント」とすると、bash以降がコメントになるのでメモを残すべし
Hello World の表示(文字列のメッセージボックスへの表示)
基本的な書き方のルールとしては、下記になります。
Sub プロシージャーの名前()
プログラム内容
End Sub
今回はHello Worldの表示なのでプロシージャーの名前をShowHelloWorldとしましょう。
中身ですが字下げをするとわかりやすいです。メッセージを表示するのはMsgboxを使います。
Sub ShowHelloWorld()
Msgbox("Hello World")
End Sub
これでツールバーのプレイボタンを押してみてください。これで画面にHello Worldと表示されたと思います。
このようにプログラムを書くウィンドウにプロシージャを書き、ツールバーで実行するのが基本的な流れになっています。
セルの値を変える(セルの指定、セル内での計算)
文字列の表示ができたので次はセルの値を変えていきたいと思います。
まずプロシージャー名を決めます。なんでもいいですが私のほうではChangeCellにしておきます。
次に決めないといけないことはどこのセルを変えるのかということです。
1つのセルの指定について
”どこ”の部分を指定してあげなければいけません。セルを表す方法は複数ありますが、Rangeを使うこととしましょう。
Rangeを使うにしてもその際にはどのブックのどのシートのどのセルであるかということを指定してあげる必要があります。
今開いているシートのセルA1を指定する場合に真面目に書くと、
(Activebook.ActiveSheet.)Range("A1")
ということになります。
今開いているという部分は省略可能なのでカッコをつけておきます。
セルを指定する方法は下記です。これらは全てA1セルを表します。
Range("A1")
Cells(1,1)
Cells(1,"A")
数字で管理したほうがわかりやすいので私はCells(1,1)を愛用しています。
上記に加えて、基準セルからの相対位置で指定する方法もあるので一応紹介しておきます。
Cells(1,1).Offset(1,0)
A1から1 つ下(行方向 1 、列方向 0)の指定をするため、Cells(1,1).Offset(1,0)はCells(2,1)を表します。
セルに文字列や数字を入れるにはこのようにします。数字は""(クオーテーション)で囲ってあげましょう。
Range("A1").Value = "文字列"
Cells(2,1).Value = 1
そこで下記を実行してみてください。
Sub ChangeCell()
Range("A1").Value = "文字列"
Cells(2,1).Value = 1
Cells(3,"A").Value = 2
Cells(1,1).Offset(3,0).Value = 3
End Sub
うまくいきましたでしょうか?
複数セルの指定について
複数セルの指定も複数あり、下記になります。
Range("A1","B3") 省略するとRange("A1:B3")
Range(Cells(1,1),Cells(2,3))
これで複数のセルを指定できます。
Sub ChangeCells()
Range("A1","B3").Value = "文字列"
Range(Cells(3,1),Cells(5,3)).Value = 1
End Sub
うまくいきましたでしょうか?
セルの中身の取得
今まではセルを変更・入力してきましたが、今回は中身を取得する方法を説明します。
A1セルに100と入力して、この数値をVBAで取得してみましょう。
セルの中身の取得に関してもValueメソッドで行うことができます。
Sub Getcontent()
Range("A1").Value
MsgBox(Range("A1").Value)
End Sub
これでOKです。100がメッセージボックスで表示されたでしょうか?