【Excelマクロ(VBa)】ローカル変数とグローバル変数について


 ローカル変数とグローバル変数


変数には、関数内(Sub~End Sub)でしか使えないローカル変数とプログラム内(1ファイル内のExcelマクロ)で使えるグローバル変数の2種類があります。

管理人がプログラムを始めた頃は、1プログラムをどのような関数の構成にするか見通せなかった事と、どんな変数・型が必要か読めなかった事もあり、試行錯誤しながら開発していました。

従って、関数毎にいちいち変数定義をしなければならない苦痛さから「全てグローバル変数にしてしまえ!」と乱暴な考え方をした時期がありました。(実際にはやりませんでしたが・・)

しかし、複雑なプログラムの小さな関数の中でしか使われない変数をグローバル化する意味はなく無駄なメモリを確保する等、デメリットしかありません。

Excelマクロ(VBa)は変数定義をしなくても変数として利用できる場合があり、初心者にはとっつき易い開発環境ですが、この環境に慣れてしまわないように変数定義は厳密にしましょう。[途中で型を変えたりすると影響箇所が大きいです!]



 ローカル変数の設定方法


ローカル変数は Sub ~ End Sub の中に [ Dim 定義した文字 As 型 ] で設定します。
定義した文字は、下記 intX, intY のようにカンマ区切りで複数定義する事ができます。

Sub test()
  Dim intX, intY As Integer '数値X, 数値Y
  Dim strUserID As String 'ユーザーID
     ・
     ・
End Sub



 グローバル変数の設定方法


グローバル変数は Dim の代わりに Globalを使い、 [ Global 定義した文字 As 型 ] で設定します。なお、グローバル定数は[ Global Const 定義した文字 [As 型] = (不変な)値 ]で設定します(参考「定数と変数について」)

定義する場所ですが、Microsoft Excel Objectsの中(Sheet や Book)の中に定義しようとすると、コンパイルエラーが発生します。(例として strTest という文字列変数を作成します)

  

エラーの内容は「定数、固定長文字列、配列、ユーザー定義型およびDeclareステートメントは、オブジェクトモジュールのパブリック メンバーとしては使用できません。」というものです。

  

従って、まず標準モジュールを作成します。
作成方法は、[プロジェクト エクスプローラー](表示されていなければ[表示]メニューから[プロジェクト エクスプローラー]を選択)上で右クリックを押し、[挿入] - [標準モジュール] を選択します。

  

[標準モジュール]のフォルダに[Module1]が作成されるので、その中にグローバル変数定義を行います。

  

これで、このExcelマクロ内ならば何処でも strTest という文字列変数を利用する事が可能となりました。



カテゴリー: VBa(Excelマクロ), システム開発 | コメントする

【ポケモンGO】アドベンチャーウィーク開催!(2018年)



2017年も開催されたアドベンチャーウィークが、2018年も開催されます!

開催時期は下記の通りです。

  日時 : 2018年5月25日 ~ 2018年6月5日


余り見かけない「リリーラ」「アノプス」「ココドラ」が沸くようです!(公式サイト)
(ひょっとしたら色違いも?!)

2017年の時は、当時余り見かけなかった「イシツブテ」「カブト」「サイホーン」が大量発生し、超レアな「プテラ」「ヨーギラス」が町中で見かけるようになりました。

という事で、ポケGOイベントの中でも、このアドベンチャーウィークは非常に期待が高いです!(^^)!


カテゴリー: ポケモンGO | コメントする

【ポケモンGO】第6回コミュニティ・デイ(2018/6/16)



第6回コミュニティ・デイのポケモンはヨーギラスです!(公式サイト)

第二世代が登場した時は、非常にレアなポケモンで、その当時は最強を誇っていたバンギラスの進化前のポケモン。お台場付近に出掛けてゲットしてましたが、いよいよ!時間は3時間と短いですが、大量発生です!!

その開催時期は下記の通りです。

  日時 : 2018年6月16日 土曜日 12:00 ~ 15:00

コミュニティ・デイに登場したポケモンで、過去に非常に人気のあった(レア)ポケモン「ミニリュウ」「メリープ」は(多分)参加者が非常に多かったためか、接続しにくく、延長がありました。今回は?!

さて、第6回のイベント内容ですが、
 ・(多分)色違いのヨーギラスが登場
 ・イベント中に進化するとバンギラスが特別な技を覚える
 ・ルアーモジュールの効果が3時間
 ・経験値(XP)が3倍
 ・(多分)リサーチにヨーギラス3体ゲットのお題が登場
です。

ちなみに過去のコミュニティ・デイは下記の通りです。

回数 日にち ポケモン
第5回 2018/05/19 ヒトカゲ
第4回 2018/04/15 メリープ
第3回 2018/03/25 フシギダネ
第2回 2018/02/24 ミニリュウ
第1回 2018/01/20 ピカチュウ



カテゴリー: ポケモンGO | コメントする

【Excelマクロ(VBa)】定数と変数について


 定数と変数


定数は、定義した文字(定数)に不変な値を保管する入れ物です。
逆に変数は、定義した文字(変数)に可変する色々な値を一時的に保管する入れ物です。

▽ 定数の定義方法
定数は [ Const 定義した文字 [As 型] = (不変な)値 ] で設定します。([As 型]は省略可能)
値は、数値であればダブルクォーテーションは不要ですが、文字列であればダブルクォーテーションで囲む("値")必要があります。

Const cnstAbsoluteZero [As Integer] = -273 '定数:絶対零度
Const cnstYen [As String] = "円" '定数:円


▽ 変数の定義方法
変数は [ Dim 定義した文字 As 型 ] で設定します。
定義した文字は、A, B, C とカンマ区切りで複数定義する事ができます。

Dim intX, intY As Integer '数値X, 数値Y
Dim strUserID As String 'ユーザーID

定数は不変な値が入るので宣言と同時にをセットしますが、変数の場合、どんな値が入るのか()が重要となりますので宣言と同時にをセットします。

簡単なプログラムを書いていると、使っている定義が定数なのか変数なのか?、変数でも型は何か?混乱する事は無いかもしれませんが、複雑で、複数人が共同で開発する場合、今後、メンテナンスが必要な場合は、プログラムを分かりやすく書く事が求められます。

管理人の場合、変数の定義の一部に型を記載するようにしています。上記のように string型であれば、変数定義の先頭に str~、int型であれば、変数定義の先頭に int~ と記載します。

このようにする事で「strUserID は文字列用の変数だから数字・文字混在に扱っても構わない」「intXは整数用の変数だから-32,768~32,767の整数だけしか扱えない」と瞬時に判断ができます。

プログラム開発をしている際は変数によるトラブルは少ないですが、何年も運用をしていると、特に数値に関わる変数でオーバーフローを起こして障害になるケースがあります。(例.通貨のインフレ等により桁数オーバー)

他人でも読めるプログラムを書きましょう。


 変数の型の主な種類


VBa(Excelマクロ)で使える型は下記表の通りです。

範囲
String 文字列
Byte(バイト型) 0 ~ 255
Boolean True / False
Integer -32,768 〜 32,767
Long (長整数) -2,147, 483,648 〜 2,147, 483,647
LongLong
(LongLong 整数)
-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807
(64 ビット プラットフォームでのみ有効)
Single
(単精度浮動小数点数)
(負の値) -3.402823E38 〜 -1.401298E-45
(正の値) 1.401298E-45 〜 3.402823E38
Double
(倍精度浮動小数点数)
(負の値) -1.79769313486231E308 〜 -4.94065645841247E-324
(正の値) 4.94065645841247E-324 〜 1.79769313486232E308
Currency -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Decimal (小数点がない) +/-79,228,162,514,264,337,593,543,950,335
(小数点以下が 28桁) +/-7.9228162514264337593543950335
(ゼロではない最小の値) +/-0.0000000000000000000000000001
Date(日付) 100 年 1 月 1 日 ~ 9999 年 12 月 31 日
Object(オブジェクト) 各種データ(オブジェクト)型
Variant(バリアント型) オールマイティ



カテゴリー: VBa(Excelマクロ), システム開発 | コメントする

【ポケモンGO】第5回コミュニティ・デイを終えて(2018/5/19)

ヒトカゲが大量に湧く第5回コミュニティ・デイが終わりました。

予定では全く参加できなさそうだったのですが、1時間半くらいは参加出来たかな(^^♪

色違いのヒトカゲは何とかゲット出来ましたが、高固体値では無かったので残念・・・。

メリープの時みたいに、1時間延長があれば とても良かったのですが・・・予定がある人も多いと思うので、9:00 ~ 17:00 あるいは 時間をずらして、12:00 ~ 20:00くらいまでやって欲しいなぁ・・・。

比較のため、アップしておきます。

■色違い


■ノーマル


黒リザードン、カッコイイ!!

そして、こうやって並べると違いが分かりますが、POPした直後のヒトカゲを比べても色違いを見落としてしまいそうでした。


カテゴリー: ポケモンGO | コメントする