達成したいのは、アクティブな行または列を強調表示することです。 VBAソリューションを使用しましたが、毎回Selection_change
event is usedワークシートの変更を元に戻す機会を失っています。
VBAを使用せずにアクティブな行/列を何らかの方法で強調表示する方法はありますか?
VBAを使用せずに実行できるとは思いませんが、元に戻す履歴を失うことなくcanを実行できます。
VBAで、次をワークシートオブジェクトに追加します。
Public SelectedRow as Integer
Public SelectedCol as Integer
Private Sub Worksheet_SelectionChange(ByVal Target as Range)
SelectedRow = Target.Row
SelectedCol = Target.Column
Application.CalculateFull ''// this forces all formulas to update
End Sub
新しいVBAモジュールを作成し、次を追加します。
Public function HighlightSelection(ByVal Target as Range) as Boolean
HighlightSelection = (Target.Row = Sheet1.SelectedRow) Or _
(Target.Column = Sheet1.SelectedCol)
End Function
最後に、条件付き書式を使用して、「HighlightSelection」式に基づいてセルを強調表示します。
最良の方法は、条件付き書式設定を使用することです。
2つの式ベースのルールを作成します。
=ROW()=CELL("row")
=COLUMN()=CELL("col")
に示すように:
唯一の欠点は、セルを選択するたびにシートを再計算する必要があることです。 (「F9」を押すことができます)
_Shift+Space
_を押すと、現在の行を一時的に強調表示できます(選択範囲を変更せずに)。 _Ctrl+Space
_を含む現在の列。
Excel、Google Sheets、OpenOffice Calc、Gnumeric(試したすべてのプログラム)で動作するようです。 (おかげで https://productforums.google.com/forum/#!topic/docs/gJh1rLU9IRA これを指摘してくれた)
残念ながら、カーソルを移動すると強調表示が消えるので、式やマクロベースのソリューションほどではありません(これは私にとってはうまくいきました)が、毎回それを設定したり、それを持つテンプレート(私は仕事をすることができませんでした)。
また、他のソリューションの条件付き書式設定式(Excel用)を、次のように1つのルールの1つの式に単純化できることもわかりました。
=OR(CELL("col")=COLUMN(),CELL("row")=ROW())
トレードオフとして、この方法で行うと、強調表示された列と行は同じフォーマットを使用する必要がありますが、ほとんどの場合、これはおそらく十分であり、作業が少なくなります。 (略式の https://trumpexcel.com/highlight-active-row-column-Excel/ に感謝)
まずはありがとう! Selection_Changeを使用してセルのコンテンツを変更し、セルを強調表示するソリューションを作成しました。元に戻すが無効になるとは知りませんでした。条件付き書式、Cell()、およびSelection_Changeイベントを組み合わせて使用する方法を見つけました。これは私がやった方法です。
Range("A1").Calculate
のみです。この方法は、ユーザーが動き回るたびに行われ、Selection_Changeはシート内の値/フォーマットなどを変更しないため、元に戻すは無効になりません。これは私のために動作します。
Range.Calculate
の代替手段はActiveWindow.SmallScroll
を使用することです。唯一の欠点は、新しい選択を行った後、画面が一瞬ちらつくことです。手動でスクロールしている間、新しい選択が機能するためには、画面(ウィンドウ)から完全に移動することを確認する必要があります。そのため、以下のコードでは、表示されているすべての行を画面ビューから取り出してから同じ位置にスクロールして、条件付き書式設定の画面を強制的に更新するのに十分なスクロールが必要です。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ScreenUpdating = False
ActiveWindow.SmallScroll Down:=150 'change these values to total rows displayed on screen
ActiveWindow.SmallScroll Down:=-150 'change these values to total rows displayed on screen
'DoEvents 'unable to use this to remove the screen flicker
ScreenUpdating = True
End Sub
クレジット:Rory Archibald https://www.experts-exchange.com/questions/28275889/When-is-Excel-conditional-formatting-refreshed.html
シートのSelection_changeイベントで、次を呼び出します。
Function highlight_Row(rngTarget As Range)
Dim strRangeRow As String
strRangeRow = rngTarget.Row
strRangeRow = strRangeRow & ":" & strRangeRow
Rows(strRangeRow).Select
rngTarget.Activate
End Function
これは明確にするための長い形式です!
行と列全体を強調表示する代わりに、条件付き書式を使用して、以下のコードでセルの左側の行とセルの上の列を強調表示することができます。
=OR(AND(CELL("col")=COLUMN();(CELL("row")-1)>=ROW());AND(CELL("col")>=COLUMN();(CELL("row")-1)=ROW()))