ブーリアンじゃない西城秀樹の歌 |
最近、自分で書いた便利な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 件のコメント:
コメントを投稿