エクセル雑感
VBAマクロと操作対象データの分離について

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2022-08-11 最終更新日:2022-08-12

VBAマクロと操作対象データの分離について


ツイッターの連続ツイートのまとめです。


VBAマクロを作成していく上で、マクロと操作対象のデータがどのような関係になるか。
そして、マクロとデータをどのように分離していくかについて連続ツイートした時のまとめです。


連ツイの内容

Excel VBA マクロとデータの分離s

https://twitter.com/yamaoka_ss/status/1557624821898706944


【VBAマクロとデータのお話】
はじめてマクロを作成する時は、
データブック&マクロブック
つまり、データの入っているブックにマクロを書くことが多いと思います。
1つのブックで完結しているので管理しやすいですね。
その中でさらに他のブックを使う事も可能です。


しかし、データとマクロが同居していると何かと不便なことがあります。
ブックを複製して複数使われている場合、マクロに変更を加えたい時・・・
全ての複製されたブックのマクロを直さなくてはならなくなります。
さすがにこれは大変なことに・・・


そこで、マクロとデータを分離したくなります。
・マクロブック → データブック
・アドイン → データブック
これは起動方法の違いだけなので同じことです。
ここで問題になってくるのがマクロの動作を制御する設定情報をどうするかです。
マクロブックやアドインのシートに保存することは可能です。

ここで特に記載しませんでしたが、
個人用マクロブックもありましたね。
これも考え方は同じことです。


ですが、全ユーザー共通の設定なら問題ないのですが、ユーザーが自由に設定できる情報の場合、この設定情報をどこに保存するかが問題になります。
マクロの入れ替え時にこの設定情報をいかに引き継ぐかを検討しなければならないからです。


そこで、
・さらに別ブックを用意してそこに書き込む。
・テキストファイル(形式は問わず)に書き込む。
マクロブック → データブック
       → 設定ファイル(ブックorテキスト)
このようにしておけば、マクロブックのみ再配布できるようになります。


設定情報にバージョンを入れておくことでバージョン管理もできますし。
バージョンアップ時にデータブックを自動変更したりと言ったことも可能になります。
もちろん大幅変更の場合は全部入れ替えが必要になる場合もでてくることはありますが。


さらに順番を入れ替えて、設定情報を書き込むブックから起動する方法も考えられます。
起動ブック → マクロブック → データブック
起動ブックを作りこめばバージョン管理やマクロブックの自動入れ替えに対応するように作ることもできますね。

追記
マクロブックは1つである必要はなく、複数のブックでも構いません。
場合によってはアドインも含まれます。
アドインの有効化無効化を制御することもあります。
ただし起動ブックは最小限のマクロにして、具体的な処理はマクロブックで行います。
起動ブックは極力変更が発生しないようにします。


話しが終わらなくなるのでお終いにしましたが、さらにいろいろな方法があります。
起動ブックは読み取り専用にしてしまう方法もあります。
その後は前の話しと合流していきます。
読み取り専用ブック → マクロブック → データブック
                   → 設定ファイル


当然ここまでくると、データブックをDBにしたくなります。
起動ブック → マクロブック → DB
設定情報はDBにユーザーごとに入れられます。
この場合は起動ブックもマクロも全て読み取り専用にします。
そしてこれはクライアントサーバーシステムそのものですね。


以上何パターンかを書きましたが、
いろいろと工夫することで、管理コストを下げることが出来るようになります。
是非ご自身の業務に合った良い方法をいろいろと検討してみてください。


ついでにVBAのセキュリティについて

Excel VBA マクロ セキュリティ
https://twitter.com/yamaoka_ss/status/1557647741119254530


別件としてVBAのセキュリティ云々の話しをついでにしておきます。
前記の起動ブックやマクロブックは共有フォルダなりにいれることになります。
このファイルにアクセスしている時点でセキュリティの内側にいるのですから、それ以上何を論じる必要があるのでしょうか。


VBAで注意すべきなのは、
出所不明(メール等できたよう)なものは、完全に安全を確認できない限り絶対にマクロ有効にしてはいけないという事です。
判別に困った時は、専門家に確認するようにしてください。




同じテーマ「エクセル雑感」の記事

ローカル版エクセルが「Office Scripts」に変わる日

ツイッターでエクセルのマクロ言語がVBAからOfficeScripts変わるかについて連続ツイートした時のまとめです。https://twitter.com/yamaoka_ss/status/1404122608287698944 ローカル版のExcelがVBAからTypeScriptになろうがPythonになろ…
エクセルVBA 段級位 目安
ツイッターで3日間に渡って順次ツイートしたもののまとめです。筆者の独断と偏見で書いているものですし、かつ、たたき台・原案なので、変更することがあります。各級位の内容は「VBA入門」に解説ページがあります。
DXってなんだ? ITと何が違うの?
ツイッターでDXはITとどう違うのかを問うツイートをしました。最初は反応がほとんどなかったのですが、再度引用ツイートしたところ、いろいろな話を伺えました。それを受けて、私なりの考え(ほぼ単なる感想)を連続ツイートしました。
在庫を減らせ!毎日棚卸ししろ!
これはフィクションです。ツイッターで深夜に在庫と棚卸しについて昔話として語ったものの「まとめ」になります。https://twitter.com/yamaoka_ss/status/1411734968343040004 ツイートまとめ 在庫は少なくてすむなら少ない方が良いですからね。
エクセル馬名ダービー
ツイッターで競走馬の変わった名前についてツイートしたところから話が大きくなって、、、ついに「エクセル馬名ダービー」を開催することになりました。ツイッターで寄せられたエクセルに関する馬名(と言えない名前もw)で競馬を行う事に相成りました。目次 発端となったツイート 登録馬一覧(五十音順) 登録馬一覧(馬主別) レース…
VBA学習のお勧めコース
ツイッターで「VBA学習のお勧めコース」について連続ツイートしたので、そのまとめです。【VBA学習のお勧めコースその1】 ✅VBA再入門:まずは第24回まで頑張って https://excel-ubara.com/excelvba1r/ ✅VBA100本ノック:とにかくチャレンジ…
コンピューターはブラックボックスで良い
ツイッターで、「コンピューターはブラックボックスで良いのです。」として書き始めた連続ツイーをまとめたものです。ツイート https://twitter.com/yamaoka_ss/status/1426458359079706630 コンピューターはブラックボックスで良いのです。
VLOOKUPを使うことを基本としてシートを設計すべきか
これはツイッターで、VLOOKUPを使うことを基本としてシートを設計すべきかどうかについて連続ツイートしたものをまとめたものです。下書きもなく、深夜に思うがままにツイートしたので、論理的に細かいところや話のつながりについてはご容赦ください。
VBAマクロと操作対象データの分離について
IF関数の論理式で比較演算子を省略したCOUNT系関数を書くのは
ツイッターの連続ツイートのまとめです。ツイートを見ていると、IF関数の第一引数の論理式で、比較演算子を省略してCOUNT系関数だけを書いている数式をちょくちょく見かけます。IF(COUNTIF(...),真の処理,偽の処理) これはエクセルでは、0がFalse、0以外がTRUE これを利用して、COUNT系関数が1…
VBAでの式と文の違い
ツイッターで投票を行い、その後に解説したものです。式とは文とは 式と文の違いについての解説です。投票ツイート https://twitter.com/yamaoka_ss/status/1575865356924526592 式と文 改めて聞かれると説明が大変ですよね。


新着記事NEW ・・・新着記事一覧を見る

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ