質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

7回答

16937閲覧

VBAで開発したxlsmを市販する場合に採りうるプロテクト

neet_studier

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/03/09 21:10

よろしくお願いいたします。

MicrosoftOfficeに付属しているVBAというのは、パッケージソフトを開発する目的で存在しているのではないということは承知しているのですが、それでも、中小規模の事務所において、作業の効率化や人件費抑制に大きく貢献しているという事例はたくさんあると思います。
そして、少し検索してみると、特に会計方面や、労務管理方面などで、市販(店舗では販売していないまでも、ネット等で広く一般を対象に有償で公開されている、という意味)されているエクセルVBAで開発されたxlsmファイルを見つけることは難しくありません。
たしかに、「自分の部署で使うために作ったマクロだけど、せっかくだから必要な人に販売してお小遣いを稼ごう」という雰囲気のものもありますが、プロと自覚しているような開発者が本気で「市販に足る有用なソフトである」という自信のもと、販売されている例もたくさんありますし、「オンデマンドでのエクセルやアクセスVBA開発を承ります」と謳ってる企業も多く見つけることができます。

前置きが長くなりましたが、質問したいのは、こういう、「お金を取って販売しているVBA開発成果品って、どういうコピープロテクトをしているのか」ということです。
もっと言えば「VBA開発品で施せる最大のプロテクトの方法」はどういうものか、というのを教えていただきたいです。
「そのxlsmファイルがVBAでの機能定義の集合であって内包するシートのなかの1セルですら、編集されることはない」ということは少数派だと思います。ある程度は中のシートの値が編集されたりすることは前提になっているとして、だとするとかっちりとプロテクトしてしまうこともできないはずです。

私も、市販とまではいかないまでも、せっかく作ったVBAプログラムを安易にコピーされたくないというのがこの質問の動機です。
私が考えているのは、

  • VBAコードの閲覧編集にパスワード保護をかける
  • ブックをパスワード保護して、シートのほとんどを非表示にする
  • VBA命令で、起動時にブック保護をするようにしているが、そのパスワードは、ある非表示シートの、非表示列に書いてある
  • パスワードが書いてあるシートのパスワードもその非表示列に書いてあり、そのパスワードで行なう保護じたいはVBAに命令として書いてある

というものです。
VBAコードを閲覧するには、VBA用のパスワードを知る必要があるだけですが、シートやブックの保護は多重になっている、という方法です。
つまり、そのファイルを構成する全シートを見るには、ブックの保護を解除する必要があるのだけど、そのためのパスワードはブックの保護を解除しないと見られないシートに書いてあり、しかもそのシートの保護を解除してシートの非表示列を再表示しないとそのパスワードを見ることはできない、というものです。

どうでしょうか?
私の考えている方法は野暮ったい方法だとは思います。やはり、もっと強力で、スマートなプロテクト方法ってあるのでしょうか?

みなさま、自分の身に置き換えて考えていただければと思うのですが、自分が一生懸命作ったVBA開発ファイルを(本当に売れるかどうかは別として)広く有償で提供してみたいとするなら、コピーなどによる不正使用を防止して確実に適正な対価を得るべくできることってどんなことがあるでしょうか?
野暮ったいとしても、例えばパスワードを数百文字の全角テキストにするなどすれば、コピー使用防止にかなり有効と考えていいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

エクセルの保護は破られてなんぼ、の世界なので、
素人では無理というレベルで妥協しないと...

ついでに、.xlam にするのも追加しようか。

投稿2019/03/10 00:29

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neet_studier

2019/03/12 06:38

ご回答ありがとうございました。 破られてなんぼなんですね。ありがとうございました。
guest

0

自分が一生懸命作ったVBA開発ファイルを(本当に売れるかどうかは別として)広く有償で提供してみたいとするなら、コピーなどによる不正使用を防止して確実に適正な対価を得るべくできることってどんなことがあるでしょうか?

個人的感覚かもしれませんが、頒布して保護をかけたいという前提では、Excel VBAは選択肢にならないと考えます。

xlsxxlsmXMLを圧縮したzipファイルなので、zipとして解凍すればOOXMLのXMLファイルを直接読むことができます。バイナリのプログラムを解析するより圧倒的に楽です。

投稿2019/03/10 00:17

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neet_studier

2019/03/12 06:38

ご回答ありがとうございました。 おっしゃるとおり、VBAで作っておいて人には見られたくないというのが間違いなのだと思います。
guest

0

ベストアンサー

途中ちょっと何言ってるのかわからないのですが…、
「もしシートをちょっと変更することもあるからVBAをユーザーが変更する必要があるよね?」
と言っているのであればコードの作り方が悪いです、
ユーザにより変更される可能性がある部分については、
セルに名前をつけたり処理の起点のシート/セル名や処理する項目数等を設定として記入するシートを作る、
項目名が記入されたセルを探してその下から処理、
処理個数を決め打ちせずにループは何もないセル検出を検出するまで処理、
関数で処理してる部分はマクロ実行時にマクロから関数を上書きする、等の手段により、
行列の挿入等によりシートの構造に手を加えられてもコード側の変更は必要のないようにするべきです。

コードを見られる事を防止したいだけであれば、
基本はコード難読化(ツールがあります)、VBAパスワード、等での対応となりますが、
これらは基本的には脆弱です。
さらにもう一歩進んで…コードの一部をDLL化してしまう等の方法もありますが、
いずれにせよ「どのレベルの技術者」なら手が出せるか、といった違いでしかなく、
あまねくすべてのプログラムは基本的にはリバースエンジニアリングが可能です。

基本的に「ちょっとコード書ける」といったレベルの人間に勝手に使用されるのを防止するのであれば、
難読化+パスワードで良いかと思われます。
(わざとあちこちスパゲッティにするのもありですね)

それを超えたレベルの技術者が違法に複製するほどの価値のあるコードを作成する場合は、
VBAで行うのがそもそも間違っております。

投稿2019/03/10 15:49

shinobu_osaka

総合スコア456

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neet_studier

2019/03/12 06:44

ご回答ありがとうございました。 勉強になります。 とりあえず難読化ツールを探してみます。ありがとうございました。
guest

0

シートの保護は意味が薄いと思われます。
パスワードを知らなくても、Windowsの機能だけで無理矢理外すことができます。
また、VBAを使えば保護を解除しなくても、値の取得はできます(非表示シート・非表示列とかもVBA経由の操作なら無意味)。

また、標準モジュールの広域定数でパスワードなどを設定→Option Private Moduleを設定しておらず、オブジェクトブラウザから各種パスワードが丸見え
という例も見たことがあります。

他の方の回答にもありますが、その気でやられれば外される前提。
基本的な保護として、VBA プロジェクトにパスワード設定、外側から意図したものしか見えない状態にする、ぐらいだと思われます。

投稿2019/03/10 07:02

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neet_studier

2019/03/12 06:42

ご回答ありがとうございました。 Option Private Moduleというものじたい知りませんでした。勉強になりました。
guest

0

http://srcedit.pekori.jp/tool/vbalckunl.html
上記の保護&保護解除ツールの作者ですが、このツールでの保護をお勧めします。
強めの保護、特に拡張子xlamに対しては相当強固な保護を行うことができます。
絶対に解除できないものではありませんが、余程の有識者でない限り解除はできないと思います。
このツール本体にもxlamの強固な保護をかけてるので、解除できるか確認してみてください。

投稿2023/07/08 00:06

K.Hiwasa

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コピー自体を防ぐのはVBAでは無理だと思いますが
自分は キーファイルを任意の場所に使用者が知らないうちに作成させ
本ファイルの起動時に そこにそれがあるかを判断し
無ければ開けないという仕掛けを利用しています

あとは、起動回数や、パスワード間違いの回数、
起動日などの制限を設け
それにひっかかったら killコマンドで本ファイルを削除(ゴミ箱にも
残らない)という仕掛けにしています

VBAで作ったエクセルブックの販売は、
MS的にはNGだったように思います

ソフト会社なんかは ”開発” に対しての課金であり
マクロブックの販売ではない というところなんでしょうか?

投稿2019/11/19 08:22

kitashina3

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA プロジェクトにパスワードを設定するだけ十分だと思います。

もしそれ以上にソースコードの保護に気を使うのであれば、VBA 以外の言語(C#、VB.NET など)で開発するのが無難な気がします。

投稿2019/03/10 00:38

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toshi17922062

2019/03/10 06:43

C#,VB.Netあたりに移植してexcelから呼び出すとかならできそうですよね。内容にもよるのでしょうけど。
neet_studier

2019/03/12 06:40

ご回答ありがとうございました。 C#への移植、とても難しそうですが将来的には検討してみたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問