Categories: VBA基礎

EXCEL VBA 計算式の保護・計算式の非表示・数式を隠す・数式バーに表示させない(FormulaHiddenプロパティ・Lockedプロパティ)

 

 

EXCEL VBA 計算式の保護・計算式の非表示・数式を隠す・数式バーに表示させない(FormulaHiddenプロパティ・Lockedプロパティ・Protectメゾット)

 

 

●はじめに

今回説明するのは、セルに登録されている数式(計算式)を隠す事が出来るFormulaHiddenプロパティの利用方法を説明いたします。普段EXCELに表を作成しますと、計算式・関数などを入力しますが、その数式内容を見せたく無い場合や関数内容を隠したい時に使用するのが、FormulaHiddenプロパティを利用します。それでは、順番にサンプルプログラムを交えて説明いたします。

 

 

●【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に登録されている数式を隠します。
【プログラム例】

'
'
'
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プロパティ)

 

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、アクティブシートに作成している表の計算式(数式)部分を隠し、数値部分は入力変更可能として、それ以外の部分については、変更出来ないよう保護をかけるサンプルプログラムです。計算式(数式)部分や、数値部分などは、自動的に判断して隠したり保護をかけますので、同じシート内に表を複数作成しても同様に設定します。

【プログラムの流れ】
① アクティブシートの保護を解除します。(シートの保護を解除しないと変更できません)
② アクティブシートの全てのセルに保護ロックのチェックを付けます。
③ アクティブシートで使用しているセルに対して順番に繰り返します。(作成している表が対象・複数の表に対しても可能)
④ アクティブシートで使用しているセル内で数式かつ文字列以外は、セルの保護ロックを外します。(数値部分は、入力変更を可能とするため)
⑤ 使用している表の部分内に数式が入力されている場所は、数式を隠します。
⑥ アクティブシートの保護をします。

 

 

 

'
'
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(サンプルプログラム)

 

 

'
'
'
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に関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA