1424930_6867_3

「エクセルを、自動化せよ」

連載:

エクセルで始める!VBAプログラミング入門
(Excelの作業を自動化できる、プログラミング超入門講座)

【連載】

▼この連載は、ベネッセUdemyにて発売している動画コースの内容から一部を記事にしているものです。
動画でもっと分かりやすく勉強したい方は、こちらもご覧下さい。
(この連載限定で●%割引となります)

screenshot_79

【好評につき、続編が出ました】
[脱・入門編]請求書を1クリックで作るマクロを作ろう

screenshot_80

 

プログラミングの必修項目である「変数」について知ったマーク。
今回は、さらに色んな変数に迫る!?

[前回までのあらすじ]

Excel仕事に苦労していたカフェの店長マークは、突然あらわれたクマに、エクセルを自動化する「マクロ(VBA)」を教わることになった。様々な基礎を学んだ上で、変数に入門したマーク。
今回は、さらに文字列(String)型やVariant型の使い方を知ることに…?

background

 

マーク
いやぁ~、変数って便利だなぁ!

もう、変数なしでVBAは語れないよね~(得意顔)

 

クマリオ
調子に乗ってるだろう?マークよ。調子に乗ってるよな?

 

ノア
(店長、すぐ調子に乗るからなぁ…)

 

 

クマリオ
…まぁいい。

前回話したが、変数には色んな「型」があると言ったことを覚えてるかな?

 

マーク
え?そうだったっけ…

 

クマリオ
愚か者!

すぐに調子に乗るから大事なことを聞き逃すのだ。

 

2018-06-12_17h24_44

 

マーク
うぅ…そうだった

こういう代表例があったなぁ。確か、

・Integer型 …整数のデータを出し入れできる
・String型 …文字列のデータを出し入れできる
・Variant型 …どんなデータ型も出し入れできる
(その他は今は省略)
だったっけ?

クマリオ
そうだ。前回はInteger型しか紹介しなかったので、今回は残り2つも使っていくぞ!
マーク
は、はいーー!

 

 

(0)今回の実習内容

今回の実習内容はこちらです。

  • (1)文字列を出し入れできる「String型」の変数を使ってみよう!
  • (2)文字列型(String)は、数値計算には使えないので注意!
  • (3)文字列を連結したい場合は「&」を使うのが一般的
  • (4)何でも入るよVariant(ヴァリアント)型!
  • (5)何でも使えるからこそ注意したい!Variant型

実習ファイルをダウンロードしてみよう!

パソコンで以下のファイルをダウンロードして、実習を行うことができます。

screenshot_78
section2-end-file_2.xlsm

(1)文字列を出し入れできる「String型」の変数を使ってみよう!

今回は、文字列を出し入れすることができる「String型」の変数を使ってみます。

2018-06-12_17h24_25

[記述してみよう!]

次のような「Sama」プロシージャを記述してみましょう。

2018-06-19_18h26_47

 

[実行するとこうなる]

①Excelの表で[会社名]のセルを選択しておき、

2018-06-19_18h28_30

②VBEから「Sama()」を実行すると…

2018-06-19_18h28_54

③自動的に「様」がついたデータに書き換えられました!

2018-06-19_18h32_00

 

マーク
おお!
これは便利かもしれないなぁ。
全部のデータを手で入力しちゃった後で変更していくのって、手作業だと結構面倒くさいしねぇ。

 

クマリオ
うむ。
もちろんVBAを使わなくてもExcel関数の「CONCATENATE関数」などを使えば、同じようなことはできる。

だが、もっとVBAを応用した場合、例えばある条件を満たすデータだけに「様」をつけるなど、Excel関数ではなかなか条件設定が難しい操作なども1ボタンでできるようになる

 

(2)文字列型(String)は、数値計算には使えないので注意!

クマリオ
なお、String型の変数は、文字列を出し入れするための型だ。

したがって、この変数を使って数値計算などをしようとするとエラーが起きてしまうので注意が必要だ。

company = company * 0.5
などと記述した場合

2018-06-19_18h41_17

 

マーク
なるほどねぇ。「文字列なんだから、数値と同じ扱いするんじゃねーよ!」と怒られちゃうわけね。

(3)文字列を連結したい場合は「&」を使うのが一般的

クマリオ
今回の例で注目して欲しいのは、「&」を使っている箇所だな。

company = company & “様”

 

VBAでは、文字列どうしを連結したい場合には「&」を使用するのが一般的です。

(例)

  • “クマリオ” & “様”  →「クマリオ様」と連結される
  • “山田” & “太郎” & “君”  →「山田太郎君」と連結される
  • company & “様”  →「(変数companyのデータ)様」と連結される

 

マーク
えーと…
“”(ダブルクォーテーション)を付けるときと、付けないときの違いは何?
クマリオ
いい質問だ。

文字列を直接データとして打ち込むときは””で囲う。
・変数に格納しているデータを扱うときは、””が要らない。

もし、間違って変数名を””で囲ってしまうと、”company”という文字列データがそのまま打ち込まれたのと誤認されてしまうので注意が必要だ。

 

[※実は「&」でなく「+」でも文字列の連結は可能です]

実をいうと、文字列を連結するときに「&」ではなく「+」を使用しても可能です。
しかし、数値の計算のときの「+」と区別するために、文字列データであることを意識的に示すため、敢えて「&」を使用することを私は推奨しています。

 

(4)何でも入るよVariant(ヴァリアント)型!

クマリオ
次は、Variant型の変数を使ってみる。

先に言っておくが、Variant型は万能だ。どの型のデータでも出し入れできる。

2018-06-12_17h24_34

マーク
え!?

じゃぁ、Variant型さえあれば、これまで気にしてきたデータの型なんて考えなくてもいいんじゃ…

クマリオ
フッ、そう思うだろう。

だが、私はVariant型はあまり使わないことを推奨する。その理由は後で説明しよう。
それより先に、まずはとにかく使ってみることが先決だ!

 

[記述して実行してみましょう]

次のように記述してマクロを実行してみましょう。

2018-06-19_19h04_49

[こんな結果になります]

このように実行時エラーとなりました

2018-06-19_19h04_58

 

マーク

ちょっと待って、エラーになったんだけど?

 

クマリオ
うむ。

エラーになるだろう?

今回は、身をもってエラーを経験して欲しかったからそれでいい

 

 

(5)何でも使えるからこそ注意したい!Variant型

クマリオ
さて、今回エラーになったのは何がいけなかったと思う?
マーク
え?
エラーになった原因?

ううーーーーーーーーーーーーーーーーん、
うーーーーーん…

クマリオ
早くしたまえ。

まぁいい、ヒントをあげよう。

 

[ここに注目]

x = 5
x = x & “です”
x = x * 2

 

マーク
お!?

…わからなかった。

クマリオ
おいおい…。

上記の2行目と3行目がエラーの元だ。

 

①まず、1行目で

x = 5

変数xの中に「5」という数値が格納されました。

 

②次に、2行目で…

x = x & “です”

xに格納されている「5」と、文字列「です」が連結されて「5です」という文字列となってxに格納されました。

 

③さらに、3行目で…

x = x * 2

というように、xには既に「5です」という文字列データが入っているのに、「*2」と算術演算をしようとしたため、エラーの原因となったのです。

 

マーク
そ、そういうことか!!
クマリオ
うむ。
Variant型の変数は、どのデータ型も格納できるので便利なのだが、
自分がどういうデータを扱っているのか意識していないと、うっかりエラーの原因にしてしまいかねない。
マーク
そうか~、
何でも格納できるのと、どうにでも扱えるのとは違うってことね。

(ちっ せっかくVariant型さえあれば1つで楽できると思ったのに…)

クマリオ
…何か聞こえたような気がするが、気のせいか?

そんな理由があって、私はVBA初心者の時期ほど、データの「型」を意識してほしいので、Variant型の変数はあまり推奨しない。もちろん、扱い方さえ心得ていれば便利な面もあるので、存在は覚えておいて損はないがな。

 

マーク
了解しましたー!

 

今回はここまで!

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

 

今回は以上です。

次回からは、

  • 「VBA関数」を使ってみよう!

などを解説して参ります。

 

 

この連載のような内容を動画のコースでわかりやすく解説しています。

(ベネッセUdemyにて動画コースが●%オフ)

screenshot_79

 

【好評につき、続編が出ました】
[脱・入門編]請求書を1クリックで作るマクロを作ろう

screenshot_80

 

 

連載:

エクセルで始める!VBAプログラミング入門
(Excelの作業を自動化できる、プログラミング超入門講座)

【連載】