特定のセルだけ書式の変更のみ許すには?(書式設定ダイアログボックスの表示方法)
Question 37.1 Previous Next
特定のセルだけ書式の変更のみ許すようにするには、どのようにするのでしょう?
セルの書式でロックを掛けてしまうと、値や式のみならず書式も変更できないですよね。セルの名前を取得して、それが一致していたら変更するのでしょうか?
そうすると・・・わかりません。 ご指導願います。
Answer   Copyright (C) 2000.12.25 永井善王
値や式を変更しないで、書式だけを変更したいのですね。しかも、特定のセルだけで。
いろいろ考えてみましたが、なぜ、そうした操作をして、何をしようとしているのか想像できないので、回答が技術的になってしまいます。
セルの書式設定ダイアログボックス 左図は、セルの書式設定ダイアログボックスです。日常使い慣れているでしょうから、簡単にポイントだけ復習しておきます。
(1) ワークシートが保護してあると使えない
(2) 設定できる項目は「表示形式」から「保護」までの 6項目

Excelの組み込みダイアログボックスは、VBAマクロから開いて使うことが可能です。そこで、上図のダイアログボックスを呼び出すことができないか調べてみましたが、どうやら、そっくり同じものはないようです。しかし、6項目のうちの 1項目ずつ単独のダイアログボックスならば、呼び出すことが可能です。

あなたの希望は、6項目のすべてを自由に変更したいのか、1項目だけ変更できればよいのか(例えばパターンつまり色だけ)が分からないので、全部解説します。関心のないところは読み飛ばしてください。
パターンの設定ダイアログボックス VBAマクロから開く場合は、セルの書式設定のうちのどの項目のダイアログボックスかを指定します。

例えば、右図はパターンだけのダイアログボックスですから、フォントや罫線などは設定できません。
不便そうに感じるかも知れませんが、ほかの設定は変えて欲しくない場合には好都合です。
このダイアログボックスを開くマクロは、次のとおりです。
'------------------------------------------------------------------------------
Sub パターンダイアログボックスを表示する()
    ActiveSheet.Unprotect                           'シート保護を解除する
    Application.Dialogs(xlDialogPatterns).Show  'パターンダイアログボックスを表示する
    ActiveSheet.Protect                             'シートを保護する
End Sub
'------------------------------------------------------------------------------
ダイアログボックスを表示するためのコードは、3行目にあります。Dialogsプロパティの定数に xlDialogPatterns と指定しています。この定数を変えれば他のダイアログボックスを呼び出すことができます。
表示形式なら xlDialogFormatNumber、配置なら xlDialogAlignment、フォントなら xlDialogFontProperties、罫線なら xlDialogBorder、保護なら xlDialogCellProtection と指定します。

特定のセルを選択してから、このようなマクロを実行してダイアログボックスを表示すれば、ユーザーが希望の設定を選択して[OK]ボタンをクリックしてくれます。大掛かりなマクロを組まなくても、書式設定することが可能です。
これで目途がつきましたが、もう 1つ考えることがあります。
このマクロをどのようにして起動するかを考えます。
手がかりとしては、質問文に「セルの名前を取得して、それが一致していたら変更するのでしょうか?」と書かれています。乱暴な想像かも知れませんが、特定のセルが選択されたら起動するように、マクロを組んでみましょう。

Excel97以上では、それぞれのワークシートにイベントマクロを組み込むことができます。選択範囲が変更されたときに発生するイベントを利用するため、次のようなマクロをワークシートのコード画面で作成します。
'------------------------------------------------------------------------------
 選択範囲が変更されたときに実行するマクロ
'------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If 5 = Target.Column And 10 = Target.Row Then 'E10セルなら
        UserForm1.Show                      'ユーザーフォームを表示する
    End If
End Sub
'------------------------------------------------------------------------------
変更希望項目選択 このマクロは、E10セルが選択されたときだけ、右図のようなユーザーフォームを表示します。「表示形式」がオプションボタン1、「配置」が同2、・・、「保護」が同6の構成です。
ユーザーは、変更したい項目のオプションボタンをクリックします。

オプションボタンがクリックされるとイベントが発生します。次のようなマクロを、ユーザーフォームのコード画面で作成しておきます。
パターンの設定ダイアログボックス このマクロはオプションボタン5、つまり「パターン」がクリックされると、右図のダイアログボックスを表示します。
実際のマクロは、ほかのオプションボタンにも対応するため次のマクロより、もっとたくさんあります。見たい場合は、後述するサンプルブックをダウンロードしてください。
'----------------------------------------------------------
 オプションボタンがクリックされたときに実行するマクロ
'----------------------------------------------------------
Private Sub OptionButton5_Click()
    選択 = 5
    指定されたダイアログボックスを表示する
End Sub
'------------------------------------------------------------------------------
Private Sub 指定されたダイアログボックスを表示する()
    UserForm1.Hide                            'ユーザーフォームを非表示にする
    ActiveSheet.Unprotect                     'シート保護を解除する
    Select Case 選択
        Case 1
            Application.Dialogs(xlDialogFormatNumber).Show  '表示形式
            OptionButton1.Value = 0           'オプションボタン1をリセットする
        Case 2
            Application.Dialogs(xlDialogAlignment).Show     '配置
            OptionButton2.Value = 0
        Case 3
            Application.Dialogs(xlDialogFontProperties).Show 'フォント
            OptionButton3.Value = 0
        Case 4
            Application.Dialogs(xlDialogBorder).Show        '罫線
            OptionButton4.Value = 0
        Case 5
            Application.Dialogs(xlDialogPatterns).Show      'パターン
            OptionButton5.Value = 0
        Case 6
            Application.Dialogs(xlDialogCellProtection).Show '保護
            OptionButton6.Value = 0
    End Select
    ActiveSheet.Protect                       'シートを保護する
    Range("M19").Select                       'カーソルを定位置へ移動する
End Sub
'------------------------------------------------------------------------------
随分大掛かりなマクロになってしまいましたが、最初に述べたように 6項目すべてに対応するためであり、どれか 1項目でよいならば、項目選択用のユーザーフォームを表示するマクロは不要ですし、指定されたダイアログボックスを表示するためのマクロは、すごくシンプルで短くなります。
なお、ユーザーがユーザーフォームの「×」ボタンをクリックしたときの処理をしておかないと、特定のセルの値や式が変更できてしまいます。そのマクロについては、このページでは解説しませんが、サンプルブックで見てください。
サンプルブックのダウンロードは ここをクリック (YNxv9584_DialogBox.xls 75KB)
※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。

Excel VBA Macro