条件付き書式設定で、現在のセルの上の行が非表示になっているか表示されているかを検出したいと思います。セルが表示されているかどうかをどのように検出できますか?
私が考えることができる唯一のハックは:
1
_値を含む列を作成します。subtotal(109,c2:c2)=1
のような数式を使用して(つまり、チェックしたいセルのみ)、それが表示されているか非表示になっているかを判断します。行が表示されるときに表示されたままにする必要がある一時的な列なしでこれを行う方法はありますか?
XY問題 を回避するには、行のカテゴリである列を作成します。特定のカテゴリの最初のVISIBLE行は、異なるスタイルにする必要があります。同じカテゴリーを持つ後の行は少し異なります。 ASCIIの場合:
_cat. item
+AAA+ aaaa
(AAA) bbbb
(AAA) cccc
+BBB+ dddd
(BBB) eeee
(BBB) ffff
_
フィルターがdddd
を含む行を非表示にする場合、eeee
を含む行に_+BBB+
_スタイルを設定します。
別の列で合計を使用する小計の代わりに、counta
を使用して小計を使用し、(空白でないことがわかっている)セルが非表示かどうかを確認できます。たとえば、列A
が通常表示される場合(行が非表示でない場合)
_= IF( SUBTOTAL(103,A2)=1, "VISIBLE", "HIDDEN (or blank)" )
_
この数式を非表示になっている可能性のある列に配置しても、引き続き機能します。
条件付きフォーマットでは、次のように使用できます:= SUBTOTAL(103,$A2)=1
行が表示されているかどうかを確認します。
Phrogzの回答の補足として、columnのセルが非表示かどうかを確認する必要がある場合は、次のいずれかを試してください。
条件付きフォーマット
=CELL("width",TargetCell)=0
これは列が非表示になるとすぐに自動的に更新されます。
式チェック
=IF(CELL("width",TargetCell)=0, "Cell is hidden.", "Cell is visible.")
この数式は自動的に更新されないため、メニューオプションを選択するか[F9]を押して、Excelに「今すぐ計算」を指示する必要があります。
これは、ゲイリーの学生のアプローチに似ています。次のVBA関数を定義します。
_Function MyRowHidden(ref As Range)
MyRowHidden = Rows(ref.Row).Hidden
End Function
_
それに関してサポートが必要な場合は、 MS OfficeにVBAを追加するにはどうすればよいですか を参照してください。これで、MyRowHidden(cell)
を使用して、cell
を含む行が非表示になっているかどうかを確認できます。
この問題を解決するために考案した方法ではヘルパー列を使用していますが、非表示にすることもできます。データが行_2
_で始まり、列A
にカテゴリがあると仮定すると、次のように入力します。
_=OR($A1<>$A2, AND(H1,MyRowHidden(H1)))
_
セル_H2
_にドラッグして、下にドラッグします。この式は、次の場合にTRUEと評価されます。
A2
_)は、前の行のカテゴリ(_A1
_)とは異なります。つまり、これは新しいカテゴリの最初の行です。次に、_A2
_がtrueの場合、条件付き書式を使用してセル_=H2
_を強調表示します。
例:生データ:
ええ、私は伝統主義者です。私はまだ冥王星を惑星として数えています。ここでも、素数の行(2、3、5、7、11、13)が非表示になっています。
もちろん、ワークブックでマクロを有効にする必要があります。
このスレッドは少し古いですが、誰かに役立つ場合に備えて、VBAを使用せずに、フィルター処理されたテーブルの複製を条件付きでフォーマットする方法を次に示します。
別の列を作り、それにこのような数式を入れます
=IF(SUBTOTAL(103, [@ColumnWithOnlyOnesInIt])=1, [@ColumnYouWantToCheckForDuplicates], "")
チェックする列に通常の条件付き書式を複製します。
手順2の数式は、チェックする列から値をコピーしますが、行が表示されている場合のみです。このようにして、重複がチェックされた場合、フィルターされたテーブルに適用可能なもののみが取得されます。これはゼロ(または ""またはifステートメントの "else"値として選択したもの)では機能しない可能性があると思います。そのため、重複として強調表示されているリストの行0の値を取得できる場合があります。それ以外はこの方法で頑張っています。
次の数式を使用することをお勧めします($ A:$ Aなどの範囲)。
_=AND(A1=OFFSET(A1;-1;0);SUBTOTAL(103;OFFSET(A1;-1;0))=1)
_
それは何をしますか:
両方の場合
A1=OFFSET(A1;-1;0)
SUBTOTAL(103;OFFSET(A1;-1;0))=1
その場合、結果はTrueになるため、セルは真上に表示されるセルの複製であり、たとえばグレーアウト。
補足:OFFSET
関数を使用すると、追加の行が挿入されたときに条件付き書式が解除されません。
アクティブセルの上の行が非表示かどうかを検出するには、次のマクロを実行します。
Sub WhatsAboveMe()
Dim r As Range
Set r = Selection
With r
If .Row = 1 Then
Exit Sub
End If
If .Offset(-1, 0).EntireRow.Hidden = True Then
MsgBox "the row above is hidden"
Else
MsgBox "the row above is visible"
End If
End With
End Sub