セル範囲をテーブルに設定すると、便利な反面いろいろな制約がかかりますが、その中でも実際の運用で困ってしまうのが入っている計算式を書き換えてしまうことができることです。
テーブルデータはセルの保護のロックができないので、誤って計算式を消してしまうということが発生しかねないです。
元々テーブルは計算式を入れることができますが、元データを蓄積するという意味合いが大きいので計算式に対してはそこまで保護するような運用には向いていないのかもしれません。
しかし、業務効率化ツールを作る時には大きな弊害となりますので何とかしたいところです。
そこで考えたのが、テーブルの中で計算式が入っている列をクリックしてしまった途端にそのセルの選択を外して、入力してもいい他の列のセルを選択するという仕組みです。
そのためには、そのシートに対して、アクティブセルが変わった時に動作し始めるWorksheet_SelectionChangeイベントを仕掛けることで実現します。
シート見出しを右クリックしてコードの表示をして、VBEの画面でWorksheetを選択するとWorksheet_SelectionChangeイベントが作成され、そこにイベントを書き込んでいくことになります。
テーブルの項目名が9行目にある場合、実際のデータは10行目から始まるのですが、そのB列とD列に計算式を入れている場合は、次のようなVBAで実現できます。
If Target.Row >= 10 ThenIf Target.Column = 2 Or Target.Column = 4 Then
Application.EnableEvents = False
MsgBox (Target.Address & “は数式セルのため書き込みできません”)
Range(“A” & Target.Row).Select
Application.EnableEvents = True
End If
End If
End Sub
10行目以降で、2列目か4列目が選択された場合、「Application.EnableEvents」で一時的に選択したら動き出すイベントを動作しないようにして、クリックしたセルの位置と「は数式セルのため書き込みできません」というメッセージを表示し、選択したら動き出すイベントを動作するようにする
という動作です。
Application.EnableEventsで一時的にイベントの動きを止めないと何度も自分の中で動いて始まるを繰り返してしまいますので、これは必ず入れるものです。
コメント