web-dev-qa-db-ja.com

VBAを使用せずにExcelでアクティブな行/列を強調表示しますか?

達成したいのは、アクティブな行または列を強調表示することです。 VBAソリューションを使用しましたが、毎回Selection_change event is usedワークシートの変更を元に戻す機会を失っています。

VBAを使用せずにアクティブな行/列を何らかの方法で強調表示する方法はありますか?

26
lowak

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」式に基づいてセルを強調表示します。

screen capture of conditional formatting rules

16
e.James

最良の方法は、条件付き書式設定を使用することです。

2つの式ベースのルールを作成します。

  1. =ROW()=CELL("row")
  2. =COLUMN()=CELL("col")

に示すように:

enter image description here

唯一の欠点は、セルを選択するたびにシートを再計算する必要があることです。 (「F9」を押すことができます)

29
hstay

_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/ に感謝)

12

まずはありがとう! Selection_Changeを使用してセルのコンテンツを変更し、セルを強調表示するソリューションを作成しました。元に戻すが無効になるとは知りませんでした。条件付き書式、Cell()、およびSelection_Changeイベントを組み合わせて使用​​する方法を見つけました。これは私がやった方法です。

  • セルA1に式を入力します= Cell( "row")
  • 行2は完全に空です
  • 行3にはヘッダーが含まれています
  • 行4以下はデータです
  • A1の数式を更新するには、シートを再計算する必要があります。 F9でそれを行うことができますが、Selection_Changeイベントを作成し、実行するコードはRange("A1").Calculateのみです。この方法は、ユーザーが動き回るたびに行われ、Selection_Changeはシート内の値/フォーマットなどを変更しないため、元に戻すは無効になりません。
  • ここで条件付き書式設定を入力して、セルA1と同じ行を持つセルを強調表示します。
    • 列B全体を選択します
    • 条件付き書式設定、ルールの管理、新しいルール、数式を使用して書式設定するセルを決定する
    • 次の式を入力します。= Row(B1 $ A $ 1)==
    • [書式]をクリックし、強調表示する方法を選択します
    • 準備完了。ポップアップで[OK]を押します。

これは私のために動作します。

6
Nybbe

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

2
Aato

シートの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

これは明確にするための長い形式です!

0
Colin Nunn

行と列全体を強調表示する代わりに、条件付き書式を使用して、以下のコードでセルの左側の行とセルの上の列を強調表示することができます。

=OR(AND(CELL("col")=COLUMN();(CELL("row")-1)>=ROW());AND(CELL("col")>=COLUMN();(CELL("row")-1)=ROW()))
0
Felipe Ribeiro