Excelのボタンの可視性を管理するためのExcelマクロが、別のSOの質問hereに基づいて "Worksheet_Change"関数で使用されています。Worksheet_設定範囲の設定が遅い
マクロは動作しますが、Excelシートを更新するのに時間がかかります。私は、単一の行に遅さを突き止めるために管理している:
Set rUpdated = Range(Target.Dependents.Address)
これは後でスクリプト内で反復処理されるように、変数に更新セルの範囲を設定します。この行だけでスクリプトを呼び出すと、これがすべての遅延であることがわかりました。それはかなり簡単な行に見えますが、それを行うにはよりよい方法がありますか?
全開示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rUpdated As Range
Dim shp As Shape
Dim rCell As Range
Set rUpdated = Range(Target.Dependents.Address)
If Not rUpdated Is Nothing Then
For Each rCell In rUpdated
If rCell.Column = 1 Then
'Look at each shape in the sheet and cross-reference with rCell.
For Each shp In Target.Parent.Shapes
If shp.TopLeftCell.Row = rCell.Row Then
shp.Visible = (rCell.Value <> "")
Exit For 'Exit the loop - the correct button has been found.
End If
Next shp
End If
Next rCell
End If
End Sub
参照先のセルは常に同じ行にありますか?その場合、変更されたセルのアドレスを取得し、現在の行の式をチェックするカスタム関数を書く方が早いかもしれません。 – Zac
いいえ、参照されるセルはスプレッドシートの完全な高さになる可能性があります。しかし、私は本当にただ一つの行を気にします。 'Target.Dependents'を呼び出すよりも良い方法があります。 – fileinster