導入:なぜ「数式を隠す」必要があるのか
業務で作成した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のクラスモジュール内に隠蔽するなど)も併せて検討しましょう。
これらの設定をマクロに組み込んでおくことで、配布用ツールの品質が一段と向上します。ぜひ、現場のツールに組み込んでみてください。
