2022年10月25日火曜日

VBAでプログラムを書いていて、どんどんパーツ化すると使い回しできるから便利だな ー Boolean変数(VBA) 

ブーリアンじゃない西城秀樹の歌
         
最近、自分で書いた便利なVBAコードは、部品化してテキスト保存しています。
ファイル名も、”ファイル削除”みたいな機能を説明したタイトルのネーミング。

特に、シェイプにあるTetxBoxの書式変更は、色々複雑なので忘備録が欲しい。
こうして、部品化したサンプルプロシージャを大量に作っている保存する分け。

この中で、部品化しようと思ったのは、FileSystemObjectのファンクション化。
ドライブ、フォルダ、ファイル等を操作できるオブジェクトで、使い道がある。

使い方は、他のサイトを参考してもらうとして、今回は判定する方法の変数だ。
例えば、コードを書いて、指定したファイルが存在すれば、”True”が返される。

無ければ”False”が返されますが、これがブーリアン型の変数で少しややこしい。
だって、文字の判定ならブーリアン型で、値では”0”と”-1”の判定になる不思議。

ちなみに、Excelシート上では、True=1、False=0になるのでこんがらかるわ。
なので、”True” と ”False” のような英単語で、条件判定するのが無難だろうな。

それで、FileSystemObjectの機能をファンクションプロシージャに仕込みます。
このファンクションンの戻り値は、ブーリアン型の変数で返す工夫をしてみた。

Sub test() ’特定のファイルが存在していたら実行する
  If FleExsts = True Then
    MsgBox "あるよ"
  ElseIf FleExsts = False Then 
    MsgBox "ないよ"
  End If
End Sub

Function FleExsts() As Boolean ’特定のファイルが存在するか判断
Dim fso As Object
  Set fso = CreateObject("Scripting.FileSystemObject")
  FleExsts = fso.FileExists(Pth())
End Function

Function Pth() As String '特定のファイルが存在するフルパス
Dim Str As String
  Str = ""
    Str = Str & Environ("HOMEDRIVE") 
      Str = Str & Environ("HOMEPATH")
    Str = Str & "\Documents\tmp.txt"
  Str = Str & ""
    Pth = Str
End Function

上記のサンプルコードは、”test”がプロシージャで残り二つはファンクション。
つまり、ファイルの存在を判定する関数にしており、ここが部品化したコード。

次に、ファイルの存在するパスもファンクションにして、必要な値を渡します。
まあ、これぐらい細かくパーツ化すれば、色々なプログラミングに使えますな。

ところで、このブーリアン型変数は、TrueやFalseの値で比較するのが普通です。
でも、わざわざTrueやFalseで比較しないで、次のように書くことができるんだ。

Sub test()
  If FleExsts Then '= True を省略しても判定している
    MsgBox "あるよ"
  ElseIf Not FleExsts Then '= False の代わりに Not を使って否定形
    MsgBox "ないよ"
  End If
End Sub

それで、わざわざ記述する人は比較派で記述を省力する人は面倒くさがり屋か。
実際、上級者にも冗長なのは承知の上であえてTrueやFalseと比較する人もいる。

まあ、If文の条件式で判定をTrue・Falseで比較するのが論争の種だったみたい。
これに決着をつける気はありませんが、自分の好きなコード記述すればいいよ。

というわけで、ファンクションは、値を戻すので一種の変数みたいだと思うな。
ファイルのパスを設定するような変数は、値を戻すプロシージャとしてファンクションを作り込んでおいて、必要な時に呼び出せば、その値が活用できるわけですから、ブーリアン変数と共に使い道のある存在だなと思ったのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿