VBAの利用で、業務の属人化によるリスクが指摘されることがよくあります。そのため、誰かとVBAを含むExcelファイルを共有するような場合、業務変更が生じても少しExcelに詳しければ修正ができるようにと、初期値や設定情報をExcelのシートに記載などの対応をしています。
しかし、初期値や設定情報をExcelのシートのセルに記載する場合、セル位置を変更したり、意図せず変更されるとコードの修正が必要になります。
シート内のテキストボックスであれば、セル位置の変更に対応できそうだったので、試行の備忘録。
フォームコントロールやActiveXコントロール だと、VBAを知らない人の設定変更が難しいと思ったので、テキストボックスで試行してみました。
まず、セル位置から何かしらの初期値や設定情報を取得する場合は、次のようになる。
例:
設定値A = ThisWorkbook.Sheets("設定").Cells(2, 2).Value
図形の挿入で「テキストボックス」を追加し、その値を取得する場合は次のようになる。
例:
設定値A = ActiveSheet.Shapes.Range(Array("テキスト ボックス 1")).TextFrame2.TextRange.Text
※ テキストボックスの名前に応じて、赤字箇所を修正する。
テキストボックスの名前は、当該のテキストボックスを選択したときに数式バーの左側にある [名前] ボックスに表示される名称。「オブジェクトの選択と表示」でも確認可能。
ShapesRangeオブジェクトの詳細は次のとおり。
以上、VBAのメンテナンス性の向上のために設定情報をテキストボックスに記載の備忘録でした。
セルから設定情報を取得すると位置変更による修正が手間なケースや、レイアウトの影響を受けたくない場合には良さそうです。
VBAの利用で、業務が属人化しないように注意は必要です。しかし、組織内にプログラミングに関する能力やリソースが不足している環境で、Excelの業務を他に代替することが困難ならVBAの手段が最適となることが多い印象。
どのツールを使用するにしても、そのツールを活用するスキル、仕様書や手順書が不足すれば属人化します。使い方でしょうが、PythonやRPA、PowerQueryなどの方が属人化するリスクが高い組織もあり、VBAとで補完した方がメンテナンス含め費用体効果が高くなることが多いと思う最近です。