EXCEL VBA 計算式の保護・計算式の非表示・数式を隠す・数式バーに表示させない(FormulaHiddenプロパティ・Lockedプロパティ)
EXCEL VBA 計算式の保護・計算式の非表示・数式を隠す・数式バーに表示させない(FormulaHiddenプロパティ・Lockedプロパティ・Protectメゾット)
今回説明するのは、セルに登録されている数式(計算式)を隠す事が出来るFormulaHiddenプロパティの利用方法を説明いたします。普段EXCELに表を作成しますと、計算式・関数などを入力しますが、その数式内容を見せたく無い場合や関数内容を隠したい時に使用するのが、FormulaHiddenプロパティを利用します。それでは、順番にサンプルプログラムを交えて説明いたします。
●【EXCEL VBA ワークシートの保護・ワークシートの保護解除(Protect : Unprotect:ProtectContents)、下記を参照して下さい】
EXCEL VBA ワークシートの保護・ワークシートの保護解除(Protect : Unprotect:ProtectContents)
●【FormulaHiddenプロパティ (Excel)、下記を参照して下さい】(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.formulahidden
● FormulaHiddenプロパティを利用するには、下記の通りに設定を行います。
・ Rangeオブジェクト.FormulaHidden = Boolean(True/False)
・ Range(”A1”).FormulaHidden = True ・・・指定セルを非表示
・ Range(”A1”).FormulaHidden = False ・・・指定セルを表示
※ EXCELでは、ここにチェックを付けて、シートを保護することで、数式(計算式)が表示されません。
【使用例】※セルB5~D5に登録されている数式を隠します。
【プログラム例】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' ' ' Sub FormulaHidden01() '数式を隠す(非表示) Range("B5:D5").FormulaHidden = True '数式を非表示にする。 ActiveSheet.Protect 'アクティブシートを保護します。 End Sub ' ' ' Sub FormulaHidden02() '数式を表示 ActiveSheet.Unprotect 'アクティブシートの保護を解除します。 Range("B5:D5").FormulaHidden = False '数式の表示 End Sub ' |
【注意事項】
FormulaHiddenプロパティを利用する場合は、シートを保護(Protectメゾット)を行う必要があります。シートが保護されていないと、【.FormulaHidden = True(非表示) 】の設定を行っても数式が表示されます。
EXCEL VBA ワークシートに登録されている数式・計算式(関数)を全て非表示にする。数値の部分は入力可能(FormulaHiddenプロパティ)
下記のサンプルプログラムは、アクティブシートに作成している表の計算式(数式)部分を隠し、数値部分は入力変更可能として、それ以外の部分については、変更出来ないよう保護をかけるサンプルプログラムです。計算式(数式)部分や、数値部分などは、自動的に判断して隠したり保護をかけますので、同じシート内に表を複数作成しても同様に設定します。
【プログラムの流れ】
① アクティブシートの保護を解除します。(シートの保護を解除しないと変更できません)
② アクティブシートの全てのセルに保護ロックのチェックを付けます。
③ アクティブシートで使用しているセルに対して順番に繰り返します。(作成している表が対象・複数の表に対しても可能)
④ アクティブシートで使用しているセル内で数式かつ文字列以外は、セルの保護ロックを外します。(数値部分は、入力変更を可能とするため)
⑤ 使用している表の部分内に数式が入力されている場所は、数式を隠します。
⑥ アクティブシートの保護をします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
' ' Sub FormulaHidden10() '数式を隠すして、数値部分は入力可能とする。 Dim Num As Range With ActiveSheet .Unprotect 'アクティブシートの保護を解除します。 .Cells.Locked = True 'アクティブシートの全セルに保護ロックのチェックを付けます。 For Each Num In ActiveSheet.UsedRange 'アクティブシートで使用しているセルに対して順番に繰り返します。 If Not Num.HasFormula And IsNumeric(Num.Value) Then '使用しているセル内で数式及び文字列以外は、 Num.Locked = False 'セルの保護ロックのチェックを外します。 End If Next Num .UsedRange.SpecialCells(Type:=xlCellTypeFormulas).FormulaHidden = True '使用しているセル内の数式が入力されている箇所は、数式を隠します。 .Protect 'アクティブシートを保護します。 End With End Sub ' |
(画面クリックして拡大)
EXCEL VBA ワークシートに登録されている数式・計算式(数式)を全て非表示にする。数値の部分は入力可(ブック全体・全ワークシートを対象)(FormulaHiddenプロパティ)
下記のサンプルプログラムは、サンプルプログラム①の応用になります。サンプルプログラム①同様にワークシート上に作成している表の計算式(数式)部分を隠し、数値部分は入力変更可能として、それ以外の部分については、変更出来ないよう保護をかけるサンプルプログラムですが、今回は、ブックに登録されている全てのシートも同様の処理を行います。
【プログラムの流れ】
① 全てのワークシートを繰り返します。(ブック全体)
② 現在のワークシートの保護を解除します。(全てのワークシートに対して順番に行います)
③ 現在のワークシートにの全てのセルに保護ロックのチェックを付けます。
④ 現在のワークシートで使用しているセルに対して順番に繰り返します。(作成している表が対象・複数の表に対しても可能)
⑤ 現在のワークシートで使用しているセル内で数式かつ文字列以外は、セルの保護ロックを外します。(数値部分は、入力変更を可能とするため)
⑥ 使用している表の部分内に数式が入力されている場所は、数式を隠します。
⑦ 現在のワークシートの保護をします。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● FormulaHidden02(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
' ' ' Sub FormulaHidden20() '数式を隠すして、数値部分は入力可能とする。(全てのワークシートが対象) Dim Ws As Worksheet Dim Num As Range For Each Ws In ThisWorkbook.Worksheets '全てのワークシートを繰り返します。 With Ws .Unprotect '現在のワークシートの保護を解除します。 .Cells.Locked = True '現在のワークシートの全セルに保護ロックのチェックを付けます。 For Each Num In Ws.UsedRange '現在のワークシートで使用しているセルに対して順番に繰り返します。 If Not Num.HasFormula And IsNumeric(Num.Value) Then '使用しているセル内で数式かつ文字列以外は、 Num.Locked = False 'セルの保護ロックのチェックを外します。 End If Next Num .UsedRange.SpecialCells(Type:=xlCellTypeFormulas).FormulaHidden = True '使用しているセル内の数式が入力されている箇所は、数式を隠します。 .Protect '現在のワークシートを保護します。 End With Next Ws End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。