久々に仕事で使ったので、いくつか。
○シートにボタンを貼り付ける方法
いつも調べる度に忘れるのでメモ。
「表示(V)」→「ツールバー(T)」→「フォーム」でツールバー出して、適当に貼り付け。
ちなみに Alt + ドラッグでグリッドにスナップ可。
○シートの保護+マクロ操作
マクロで計算を行う場合、レイアウト変更されると計算結果がおかしくなったりして困るわけで。
そこでシートの保護を使うわけですが、ロックされたセルはマクロからも操作できなくなったりして。
ユーザは編集不可だけどマクロからは編集可にする方法とかないのかなー?と調べてみると、やっぱりあった。
Excel豆知識39-2:エクセル:シートの保護をマクロで
Office TANAKA - VBA講座:ファイルの操作(保護/解除する)
このへんを参考に、
Private Sub Workbook_Open()
' シートの保護(ユーザによる操作のみを保護)
Sheet1.Protect UserInterfaceonly:=True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' シートの保護を解除
Sheet1.Unprotect
End Sub
こんな感じで OK。
○Worksheet_Change ハンドラ
わざわざ計算ボタン押さずに済むように、Worksheet の Change イベントで処理したいような場合。
とりあえず何も考えずに Worksheet_Change に計算式書けばいいんですが。
でもそれだとパフォーマンス低下しまくりそうなので、「A1 か B2 か C3 が変更されたときだけ動く」みたいな処理がやりたいわけで。
とりあえず、
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Union(Range("A1"), Range("B2"), Range("C3"))) Then
'なんかやりたい処理
End If
End Sub
みたいにすれば OK。もっといいやり方あるかも。
○循環抑制
Change イベント内でセルの値を変更した場合、そこからさらに Change イベントが発生したりして、無限ループになってしまうことがあります。
これは、
'イベントの抑止
Application.EnableEvents = False
'なんかやりたい処理
'イベントの抑止解除
Application.EnableEvents = True
みたいにすればいいらしいです。(未検証)
○範囲名
上のを色々調べてる過程で、セルや範囲に別名つけられることを思い出した。
これだとレイアウトの変更とかにも強いし、お客さんに出すようなものなら、これくらいのことはやっておくべきかな、とか思ったりもした。