EXCEL、VBAプログラミング入門14~型変換~第2回目

今回は、EXCEL、VBAプログラミングの第14回目で、型変換について説明をする第2回目です。

今回は、以下のことについて解説を行っています。
1)型変換関数の紹介
2)Worksheets(“sheet1”).Range(“b3”).Valueの戻り値をウォッチ式で確認する方法
3)Variant型について

1)型変換関数の紹介
前回は、CDbl関数について説明を行いました。CDbl関数を使って文字型を数値型に変換することができました。その他の型変換しては以下のものがあります。

CBool(expression):戻り値がBoolean型となります。Boolean型はTrueまたはFalseの値を持ちます。数値の0を与えればFalseとなり、0以外を与えればTrueとなります。
CByte(expression):戻り値がByte型となります。Byte型とは、0~255の数値を持ちます。0~255以外の数値を返すことは出来ません。
CCur(expression):戻り値がCurrency型(通貨型)となります。
CDate(expression) :戻り値がDate型(日付型)となります。
CDbl(expression):戻り値がDouble型(倍精度浮動小数点型)となります。負の値の場合は -1.79769313486231E308 ~ -4.94065645841247E-324、正の値の場合は 4.94065645841247E-324 ~ 1.79769313486232E308。
CSng(expression) :戻り値がSingle型(単精度浮動小数点データ型)となります。倍精度浮動小数点型より、扱える数値の範囲が小さくなります。負の値の場合は -3.402823E38 ~ -1.401298E-45、正の値の場合は 1.401298E-45 ~ 3.402823E38。
CDec(expression) :戻り値がDecimal型(10進数データ型)となります。
CInt(expression):戻り値がInteger型(整数データ型)となります。Integer型はよく使用しますが、データが-32,768 から 32,767の範囲しか扱えないことに注意して下さい。
CLng(expression):戻り値がLong型(長整数型)となります。数値は、-2,147,483,648 から 2,147,483,647までの範囲が扱えます。Integer型よりも大きな範囲を扱うときには、こちらを利用します。
CLngLng(expression) :戻り値がLongLong型となります。長整数型よりさらに大きな範囲まで扱えますが、あくまでも64 ビット版でのみ利用できます。-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807。
CLngPtr(expression):戻り値がLongPtr型となります。LongPtr型は32ビット版ではLong型として機能し、64ビット版ではLonglong型として機能します。
CStr(expression) :戻り値がString型(文字列)となります。よく利用します。
CVar(expression) :戻り値がVariant型となります。

2)Worksheets(“sheet1”).Range(“b3”).Valueの戻り値をウォッチ式で確認する方法
「+」ボタンが押された際に呼び出される四則演算関数(下図)ですが、その中でセルの値を取得する
Worksheets(“sheet1”).Range(“b3”).Value
について補足します。

図1.四則演算関数

「Worksheets(“sheet1”).Range(“b3”).Value」の戻り値を確認します。戻り値を確認する方法として「Worksheets(“sheet1”).Range(“b3”).Value」をウォッチ式に追加する方法について説明をします。

下図の通り、「Worksheets(“sheet1”).Range(“b3”).Value」にフォーカスを当て、マウスの右クリックでメニューを表示し、「ウォッチ式の追加」を選択します。

図3.ウォッチ式への追加

もし、ウォッチ式のウィンドウが表示されていない場合には、全体のメニュー欄から「表示」を選択し、「ウォッチウィンドウ」を選択すると、表示されるようになります。

下図の通り、ウォッチ式に式が入ると下図の通りになります。

図4.ウォッチ式の値

式欄に、「Worksheets(“sheet1”).Range(“b3”).Value」がセットされます。また、型欄を確認すると、「Variant/String」となっています。Variant型はすべての型を受け入れることが出来ますが、Variant/の後に実際に入っている変数の型を表しています。つまり、ここではString型として扱われています。

3)Variant型について
ちなみに、Variant型とはあらゆるタイプの値を入れることができる型です。つまり、文字であろうが、数値であろうが、日付であろうが何でも良いのです。あらゆるタイプを選択できるというと一見便利に感じます。

しかし、世間でデメリットとしてよく言われる事としては、どのような値でも受け付けるためにPCのメモリなどに大きなスペースを取ってしまいがちであるということです。ただ、最近のパソコンは以前に比べるとそもそもハイスペックになってきていますので、実際のところExcelVBAで制作したプログラムで変数をVariant型で定義したところで、動作に影響を与えるほどの事はほとんどないように思われます。

ただし、型を明確に決めていると稼働状況もはっきりします。

例えば、前回にも出てきた通り文字型として定義した2つの変数に「10」と「20」が代入されている状態で、その2つの変数を「10」+「20」をすると、結果は文字が結合されて「1020」となります。ところが、同様に数値型として定義した2つの変数に「10」と「20」が代入されている状態で、「+」処理を行うと「30」になる訳です。

つまり、型が分からない2つの変数に「10」と「20」が入っている状態で、「+」処理を行うとどのような結果となるのか分からないということです。Variant型として定義したと言えども、内部的には代入された値が数値であるのか文字であるのかを判断して値を保持していますので、実際の型が数値型と認識されたのか、文字型として認識されたのかによって結果は変わってきます。

Variant型として定義すると処理内容がVBAの仕様任せになってしまう部分が出てきます。結果、予期せぬ動きになってしまう可能性が出てきます。よって、処理をきっちり記述したいと思うのであれば、Variant型は使用しない方が良いとも言えます。

95年頃に私がプログラムを学んだ際には、Variant型は使用するべきでないという論調が主流でした。つまり、プログラムを本職としない人が取り敢えず動けばいいやという目的でVariant型を使用するのは良いが、専門家は使用すべきではないということです。

現在の風潮としては型宣言をしなくても良いという考え方が主流となってきているのではないかと思います。例えば、最近の流行りの言語であるPython(パイソン)やRuby(ルビー)では、型宣言をしなくても利用できるようになっています。

これには、主に2つの理由が考えられます。

1つ目の理由としては、先ほどにも記述した通り、ハードウェアのスペックが非常に高くなったので、型宣言をしないことによるデメリットが小さくなったと考えられます。

2つ目の理由としては、技術の進歩は専門的な内容から一般的な内容へと進みがちであるということです。パソコンの初期の頃はプログラミングがそもそもマニアックな一部の人のものだったので、プログラミングをするためには色々な知識が必要でしたが、彼らはそれをクリアすることが出来ました。ところが、プログラミングが一般的になってその仕事に携わる人の母数が増えてくると、あまりにもマニアックな内容だと理解できない人が出てきてしまうため、小難しい事はプログラムの内部で処理してしまって、プログラミングする際にはそのようなことはあまり意識しなくても良いような方向に進んでいくということです。

従って、Variant型を使うことを否定はしませんが、少なくても内部的には変数の型が自動で割り当てて処理をされていることは理解しておいた方が良いでしょう。


ニコニコチャンネル(月額固定で見放題)
http://ch.nicovideo.jp/ai-light
本記事に関連する動画講座を閲覧できます。一部の動画は無料でも閲覧できます。

YouTubeチャンネル(無料動画配信中)
https://www.youtube.com/user/ailightcom
ITと経営に関する動画を配信しております。
よろしければ、チャンネル登録をお願い致します。

無料から学べる講座
https://www.ai-light.com/itkeiei/
本記事に関連する動画講座をセット販売しております。
その他、ITと経営に関する動画もセット販売しております。

格安ホームページ制作所
https://www.ai-light.com/hp2
インターネットマーケティングに関する記事が無料で閲覧可能です。

株式会社アイライト公式HP
https://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

ITでお困りのことがございましたら、まずはご相談(コンサルティング)
https://www.ai-light.com/itconsulting.html


弊社は、主に中小企業様向けの業務システム開発ホームページ制作パソコンサポートコンサルティングなど、ITに関する様々なサービスを格安で提供しております。
特に小規模な業務システム開発の分野では、主にAccess(アクセス)を利用した柔軟で効率的な開発を得意としており、関西でダントツの実績があります。

業務システム開発に関しては、以下のような内容で対応しております。
・顧客管理などの単機能なシステムは20万円~50万円が多い。
・受注から入金まで業務全体システムで100万円~350万円ぐらいが多い。
・Access(アクセス)-SQLserverで大規模システム開発は350万円~1500万円が多い。

詳細は、Access(アクセス)、Excel(エクセル)、WEBサイト製作による小規模システム開発のページをご参考ください。

大阪商工会議所からの推薦を受けて、中小企業庁運営の中小企業支援事業に専門家として登録されました。
通称ミラサポ。3回まで無料でのコンサルティングが可能です。ご興味がある方はご連絡ください。
https://www.mirasapo.jp/


(近畿大学にて非常勤講師も務めたバリバリの技術屋が経営する会社)

Access(アクセス)Excel(エクセル)SQL server バーコード Webシステムを使った業務システムのシステム開発の無料相談を受付中

株式会社 アイライト 担当:内藤 響(Naito Ko)
〒550-0005 大阪市西区西本町1丁目5番9号 日清ビル 5F
(四つ橋線 本町駅 24番出口すぐ)
まずは、メール・電話でご相談ください。
TEL : (06) 6599-8890 E-mail : info@ai-light.com
お電話が混んでいる場合が多いので、つながりにくい場合は
TEL : (06) 6535-5117までお願いします。