【VBAリファレンス|実務向け】数式を数式バーに表示させないようにする(FormulaHiddenプロパティ)|Excel VBA

スポンサーリンク

導入:なぜ「数式を隠す」必要があるのか

業務で作成したExcelツールにおいて、複雑な計算式やロジックを「ユーザーに見せたくない」「誤って書き換えられたくない」というケースは多々あります。特に、計算ロジックが知的財産となる場合や、計算式の内容を隠すことでユーザーの混乱を防ぎたい場合に、このテクニックは非常に有用です。今回は、VBAを使って特定のセルの数式を非表示にする方法を解説します。

基礎知識:FormulaHiddenプロパティとは

Excelには、セルのプロパティとして「数式を隠す」という設定項目があります。これが「FormulaHiddenプロパティ」です。
ただし、重要な注意点が一つあります。このプロパティをTrueに設定しても、それ単体では効果を発揮しません。「シートの保護」が有効になっているときのみ、数式バーから数式を隠すことができるという点に注意してください。

実装/解決策:保護とプロパティのセット運用

数式を隠すための論理的な手順は以下の通りです。
1. シートの保護を一時的に解除する(保護中はプロパティ変更が不可のため)。
2. 対象セルのFormulaHiddenプロパティをTrueにする。
3. シートを再度保護する。

これを行うことで、ユーザーがセルを選択しても、数式バーには何も表示されず、中身を読み取ることができなくなります。

サンプルプログラム:全数式セルの自動保護

以下のコードは、シート内の数式が入っているセルを自動的に検出し、一括で非表示にする実用的なサンプルです。

Sub ProtectFormulas()
‘ パスワードを定義(運用に合わせて変更してください)
Dim myPass As String
myPass = “secret123”

‘ 1. シートの保護を解除
‘ 保護を解除しないとFormulaHiddenプロパティを変更できません
On Error Resume Next
ActiveSheet.Unprotect Password:=myPass
On Error GoTo 0

‘ 2. 一旦、全セルの設定をリセット
Cells.FormulaHidden = False

‘ 3. 数式が入力されているセルのみを検索して保護を適用
‘ SpecialCells(xlCellTypeFormulas)で数式セルのみを特定します
On Error Resume Next
ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).FormulaHidden = True
On Error GoTo 0

‘ 4. シートの保護を再設定
ActiveSheet.Protect Password:=myPass

MsgBox “数式の保護が完了しました。”
End Sub

応用・注意点:現場で陥りやすい罠

実務でこの機能を活用する際、以下の3点に注意してください。

1. Lockedプロパティとの関係:
FormulaHiddenをTrueにしても、セルのLockedプロパティ(保護時のロック設定)がFalseになっていると、ユーザーは数式を削除・変更できてしまいます。計算式を完全に守るなら、Lockedプロパティも併せて管理してください。
2. VBAからの参照:
シートが保護されている状態では、VBAから数式を取得(.Formula)することも制限されます。もしVBA側で数式を操作する必要がある場合は、処理の冒頭と最後で保護の解除・再設定を確実に行うフローにしてください。
3. パスワード管理:
この保護はあくまで「簡易的な閲覧防止」です。強力な暗号化ではないため、極めて機密性の高い情報を扱う場合は、別の手法(計算ロジックをVBAのクラスモジュール内に隠蔽するなど)も併せて検討しましょう。

これらの設定をマクロに組み込んでおくことで、配布用ツールの品質が一段と向上します。ぜひ、現場のツールに組み込んでみてください。

タイトルとURLをコピーしました