m-eye blog

ノンプログラマによるVBAとPythonの学習記録

PythonをVBAと比較しながら覚えよう Part 1

f:id:m-eye:20181010190201j:plain

 

はじめに

ただ目的もなしにPythonを勉強しても、ノンプログラマにはなかなかPythonは身に付きません。

好きでVBAを書いているわたしのような人間にとっては、将来PythonがExcelに搭載されるかもしれないというニュース(英語サイト)は大きな影響があります。

職場では勝手にソフトをインストールすることはできませんので、ExcelにPythonが搭載されれば、ようやくPythonを使用する環境が整うというわけです。

Pythonが搭載されたあかつきには、すでに自分がPythonを使える状態でいたいですね。

それに、リファクタリングのようなプログラミングの常識を覚えていくのに、VBAだけでは足りません。Pythonなどの他言語からそういった常識を学ぶべきでしょう。

以上の2つがPythonを学ぼうと思う大きな理由です。

 

PythonをVBAと比較しながら覚えよう Part 1

ここからPythonをVBAと比較しながら、説明していきます。

 

文(ステートメント)の区切り

VBAの文の区切りは「改行」か「コロン(:)」ですが、Pythonの文の区切りは「改行」か「セミコロン(;)」です。

VBAでの「コロン(:)」は1行に2つ以上の文を書くときに使います。

まず、「コロン(:)」を使わずに、VBAで文を書いてみます。

' VBAの場合(コロンなし)
Option Explicit
Dim a As Integer
Dim b As Integer
a = 10
b = 20
Dim Ans As Integer
Ans = a + b
MsgBox Ans

変数abを宣言し、それぞれに数値を代入し、その和を求めて、メッセージボックスで表示しています。

これと同じことをPythonでやってみましょう。

# Pythonの場合(セミコロンなし)
a = 10
b = 20
ans = a + b
print(ans)

どちらも普通に改行で文を区切っていますね。改行で文(センテンス)を区切るのは、プログラミング言語である以上、ある意味普遍的なやり方です。

それにひきかえ、2つ以上の文を1行にまとめるやり方は千差万別だといえます。

VBAの場合は、コロン(:)でしたね。上に書いたVBAのプログラムをすこしまとめてみましょう。

' VBAの場合(コロンあり)
Option Explicit
Dim a As Integer: Dim b As Integer
a = 10: b = 20
Dim Ans as Integer: Ans = a + b: MsgBox Ans

Dim a As Integer: Dim b As Integerには、Dim a As Integer, b As Integerという書き方もあります。

こちらのコロンありの場合のほうがコンパクトにまとまっていますが、やりすぎるとかえって見づらくなります。

おなじことをPythonでやってみましょう。

# Pythonの場合(セミコロンあり)
a = 10; b = 20; ans = a + b; print(ans)

Pythonのほうはシンプルにまとまっているような気がします。

 

ステートメントの改行

上に書いた部分では2つ以上の文(ステートメント)を1行にまとめてみましたが、今度は逆のことをやってみましょう。

長いステートメントが読みやすくなるように、行を途中でおりかえすということです。

ステートメントを折り返すには、VBAでは「アンダーバー(_)」を、Pythonでは「バックスラッシュ(\)」(Windowsでは「円マーク(¥)」で表示されます)を使います。

VBAで書いてみましょう。

' VBAの場合
Option Explicit
Dim a As Integer
a = 1 + 2 + 3 + 4 + 5 + _
    6 + 7 + 8 + 9 + _
    10
MsgBox a

今度は、Pythonで書いてみます。

# Pythonの場合
a = 1 + 2 + 3 + 4 + 5 + \
    6 + 7 + 8 + 9 + \
    10
print(a)

単に_\の違いだということがわかりますね。

 

コメントの書き方

VBAではシングルクォーテーション'、Pythonではナンバーサイン(最近ではハッシュタグというんでしょうか)#に続けてコメントを書きます。この記事ではすでに説明なしにコメントは使っていました。

' VBAの場合
Option Explicit
' 台形のサイズ
Dim a As Integer: a = 30 ' 上辺
Dim b As Integer: b = 50 ' 下辺
Dim h As Integer: h = 10 ' 高さ
Dim Area As Integer: Area = (a + b) * h / 2 ' 面積
MsgBox Area
# Pythonの場合
# 台形のサイズ
a = 30 # 上辺
b = 50 # 下辺
h = 10 # 高さ
area = (a + b) * h / 2 # 面積
print(area)

 

改行のある場合のコメント

ステートメントを_\で折り返すことができることを説明しましたが、その場合、_\という折り返し記号のうしろにコメントを書くことはできません。

次の例では、1行目の_\のうしろにはコメントはつけられませんが、折り返した次の行にはコメントをつけることができます。

' VBAの場合
Dim Price As Integer
Price = 100 + 200 + 300 + 400 + 500 _
        1000 ' 手数料
MsgBox Price
# Pythonの場合
price = 100 + 200 + 300 + 400 + 500 \
        1000 # 手数料
print(price)

 

複数行のコメント

VBAにもPythonにも、コメントの開始と終了を指定して、複数行をコメントアウトする機能はありません。

ここではじめてVBAとPythonの違いがでてきますが、Pythonでは3個続けたシングルクォートまたはダブルクォートで前後を囲むことで複数行のコメントとして使えます。VBAではこういうことはできません。

次のVBAのコードはエラーになります。

' VBAの場合
Dim a As Integer: a = 10
Dim b As Integer: b = 20
'''
行頭にシングルクォーテーションがないと
VBAではエラーになります
'''
Dim Ans As Integer: Ans = a + b
MsgBox ans

これに対して、次のPythonコードはエラーになりません。

# Pythonの場合
a = 10
b = 20
'''
行頭にシングルクォーテーションがなくても
Pythonではエラーになりません
'''
ans = a + b
print(ans)

VBAで似たことをやりたいときは、次のようにします。

' VBAの場合
Dim a As Integer: a = 10
Dim b As Integer: b = 20
'
'行頭にシングルクォーテーションがあれば
'VBAではエラーになりません
'
Dim Ans As Integer: Ans = a + b
MsgBox ans

 

大文字と小文字の区別

VBAでは変数などで大文字・小文字を区別しませんが、Pythonでは変数などで大文字・小文字を区別します。

次のVBAの例は、エラーになります。

' VBAの場合
Dim a As Integer: a = 10
Dim A As Integer: A = 20

「コンパイルエラー:同じ適用範囲内で宣言が重複しています。」というエラーがでます。

一方で、次のPythonの例は、エラーになりません。

# Pythonの場合
a = 10
A = 20

ですが、おなじプログラムの中で変数aと変数Aを使うのは混乱のもとなので、やめておいたほうがいいと思います。

 

おわりに

いかがだったでしょうか。

VBAとPythonは基本的なところでずいぶん似ていることにお気づきになりましたか。

こういう基本的なところが似ているので、VBAを使っている者にとっては、Pythonは学習しやすい言語だといえると思います。

 

Copyright 2018 m-eye blog All Rights Reserved.