2022年9月9日金曜日

マトリョーシカぐらいしかお土産のない露助より、ファンクション(関数)は入れ子ができるスグレモノ ー Function(エクセルVBA)

    
隔日でブログを更新しているのですが、今朝は寝ぼけて失念してしまいました。
なので、出社してきて投稿原稿を書いているなど、職務怠慢の極みであろうか。

いやあ、これから書いておくことは業務の忘備録なので、それに当たりません。
なぜなら、VBAで業務改善のプログラムで、最近発見したことを書き残します。

だから、さぼっていることにはならないと、我田引水をしてしまうことにした。
現在、VBAでプログラムを書いているのは、出荷シールを作成することなんだ。

ダウンロードしたデータをベースにしますが、エクセルのシートは使いません。
代わりにシート上を印刷領域に見立てて、そこにテキストボックスを配置する。

そのテキストボックスに印字する内容を流し込んで印刷するというプログラム。
ざっくり、説明するとこうなるのですが、圧縮ファイルの読み込み解凍が大変。

中でも、ダウンロードフォルダに必要なファイルが存在すれのか、確認します。
存在が認められれば、別のフォルダにある特定フォルダに移動させて解凍する。

それで、こういった手順のプログラムをコードに書けば、プロシージャが複雑。
記述を分解・簡素化する必要もあって、先ずは、別のプロシージャへコールだ。

それで、作業した結果の値を戻す必要もあり、ファンクション(関数)を多用。
このファンクションコードで、再度ファンクションを呼出すこともできました。

つまり、ロシアのマトリョーシカ人形のように、値戻しの階層化が可能なんだ。
コードでは、二段ぐらいの実施で済みましたが、それ以上でもできるでしょう。

Sub FleExstsRslt()
  If FleExsts() = True Then  ' ファンクション(関数)を読んで値を取得 
    MsgBox "あるよ"
  Else
   MsgBox "ないよ"
  End If 
End Sub

Public Function FleExsts() As Boolean
 Dim Str As String, b As Boolean
   Str = Dir(PthMkng)
     If Str <> "" Then
       FleExsts = True ' True なら存在している
     Else
       FleExsts = False
     End If
End Function

Public Function PthMkng() As String
Dim Strng As String
  Strng = ""
    Strng = Strng & "C:\Users\"
      Strng = Strng & Environ("username")
        Strng = Strng & "\Downloads\HOGEHOGE.csv"
            Strng = Strng & ""
  PthMkng = Strng 'ファイルをフルパスで定義
End Function

このコードでは、特定のフォルダーに必要なファイルがあるのか確認するもの。
プロシージャで、ファンクションを呼び出しますがて、その値がブーリアンだ。

調べた結果が正しければ、”真”で”True”になり、違うと”偽”で”False”を返す。
この変数の値戻しをするファンクションが、改めてファンクションを呼ぶんだ。

つまり、ファイルの存在するパスを、ファンクションに仕込んで値を返します。
この手の工夫は、使用する複数のパスを作って、ファンクションで呼べますな。

というわけで、このアイデアをVBAのマトリョーシカ戦術と呼ぶ事にしました。
これは、プロシージャから、プロシ―ジャをコールして作業させるようなアイデアなのですが、今回は、コードのパーツ化を一層進めてプログラム全体を作り込んでいく方法に特化して、まるでプラスチックモデルの作製みたいだなと思ったのでした。




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



0 件のコメント:

コメントを投稿