python → VBA
pythonは知っている。Cは、途中で投げた。
そういう経緯の自分が、VBA(Excel)に手を出す。
pythonと同じように使えるようになりたい。
あわよくば、Excelとかwordとかでアニメーションしたい。
Excelの「開発」タブから、VBAができる。
ExcelでVBAが使用できるようにするためには、「開発」タブが必要です。
「開発」タブは、デフォルトで非表示です。
表示するためには、先日の分を参照してください。
「for」構文→「For」構文と、連番
- pythonを使ったfor繰り返し構文
for i in range(10):
print i
>>> for i in range(10):
… print i
…
0
1
2
3
4
5
6
7
8
9
forを使えば、繰り返すたびに、インデックス用の変数が変わっていくので、それを参照する分をfor文の中で使えば、ちょっとずつ処理を変えていく事ができる。
上のpythonの例では、print関数の引数に、インデックス用の変数を入れているので、繰り返すたびに、標準出力に表示される内容が変わる。
これをVBAのイミディエイトウィンドウでやる。
繰り返し構文は、何らかのソフトのAPIで画像エクスポート機能があった場合に、連番画像を排出する目的で使う。
- VBAでFor構文
Sub test()
Dim i
For i = 0 To 9
Debug. Print i
Next
End Sub
0
1
2
3
4
5
6
7
8
9
で、できた。
0 fill(0埋め)のため、formatを使う
Sub test()
Dim i
For i = 0 To 10
a = Format(i, "0000")
Debug.Print a
Next
End Sub
0000
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
引数を3倍する関数を作った。
pythonでやると、こうなった。
def Abcd(a):
b = a*3
return b
Abcd(10)
>>> def Abcd(a):
… b = a*3
… return b
…
>>> Abcd(10)
30
>>>
VBだとこう。
Public Function Abcd(ByVal a As Integer) As Integer
Dim b
b = 3 * a
Abcd = b
End Function
Sub test()
Dim a
a = Abcd(10)
Debug.Print a
End Sub
30
やればやるほど、「pythonすげぇ…」なる。
VBAのまだるっこしさときたら…
戻り値のある関数を作る時には、Returnを使うな
VBAで、関数を作る時、戻り値の指定にReturnは使えない。
「構文エラー」になるから。
戻り値の指定をしたければ
関数名 = 戻り値
とする事が、Returnの代わりになる。
VBでは、Returnが使えるが、VBAではReturnが使えない。
VBとVBAは、文法が似ているだけで、違うものなんだと学習できた。
あと、SubもPublic Functionも、プロシージャと呼ばれる何かなのだと知った。