Excel関数は、セルが表示されるかどうかを決定します


12

条件付き書式設定では、現在のセルの上の行が非表示または表示されているかどうかを検出します。セルが表示されているかどうかを検出するにはどうすればよいですか?

私が考えることができる唯一のハックは:

  1. すべての1値を含む列を作成します。
  2. subtotal(109,c2:c2)=1(確認したいセル上など)のような式を使用して、それが表示されているか非表示になっているかを判断します。

行が表示されるときに表示されたままにする必要がある一時的な列なしでこれを行う方法はありますか?


XY問題を回避するために、私がしたいことは、行のカテゴリーである列を持つことです。特定のカテゴリを持つ最初のVISIBLE行には、異なるスタイルが必要です。同じカテゴリを持つ後の行はわずかに異なります。ASCIIの場合:

cat.   item
+AAA+  aaaa
(AAA)  bbbb
(AAA)  cccc
+BBB+  dddd
(BBB)  eeee
(BBB)  ffff

私のフィルターが行を非表示にする場合、代わりにddddeeeeを持つ+BBB+スタイルを設定します。

回答:


13

別の列の合計を使用する小計の代わりに、小計を使用countaして(既知の非空白)セルが非表示になっているかどうかを確認できます。たとえば、列Aが通常表示される場合(行が非表示でない場合)

= IF( SUBTOTAL(103,A2)=1, "VISIBLE", "HIDDEN (or blank)" )

この式は、非表示になっている可能性のある列に配置できますが、引き続き機能します。

条件付き書式設定では、次を使用するだけで= SUBTOTAL(103,$A2)=1行を表示できるかどうかを判断できます。


5

Phrogzの回答の補遺として、列のセルが非表示になっているかどうかを確認する必要がある場合は、次のいずれかを試してください。

条件付き書式

=CELL("width",TargetCell)=0

これは、列が非表示になるとすぐに自動的に更新されます。

フォーミュラチェック

=IF(CELL("width",TargetCell)=0, "Cell is hidden.", "Cell is visible.")

この式は自動的に更新されないため、メニューオプションを選択するか[F9]を押して、Excelを[今すぐ計算]に誘導する必要があります。


1

これは、ゲーリーの学生のアプローチに似ています。次のVBA関数を定義します。

Function MyRowHidden(ref As Range)
    MyRowHidden = Rows(ref.Row).Hidden
End Function

MS OfficeにVBAを追加する方法を参照してください あなたはそれで助けが必要な場合。これで 、含む行が非表示になっているかどうかを確認できます。MyRowHidden(cell)cell

この問題を解決するために考案した方法では、ヘルパー列を使用しますが、非表示にすることもできます。データがRow 2で始まり、カテゴリがColumn Aで始まると仮定すると、

=OR($A1<>$A2, AND(H1,MyRowHidden(H1)))

セルに移動しH2、下にドラッグします。この式は、次の場合にTRUEと評価されます。

  • この行のカテゴリ(A2)は、前の行のカテゴリ()とは異なりA1ます。つまり、これは新しいカテゴリの最初の行、または
  • 前の行は強調表示されているはずですが、非表示になっています。

次に、条件付き書式を使用して、trueのA2場合にセルを強調表示し=H2ます。

例:生データ:

        完全なデータセット

ええ、私は伝統主義者です。私はまだPl王星を惑星として数えています。ここでも、素数の行(2、3、5、7、11、13)が非表示になっています。

        フィルタリングされたデータ

もちろん、ブックでマクロを有効にする必要があります。


0

アクティブセルの上の行が非表示かどうかを検出するには、次のマクロを実行します。

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

1
条件付き書式設定からどのように実行しますか(質問で尋ねられます)?
チャーリーRB

0

このスレッドは少し古いですが、だれにも役立つ場合は、VBAを使用せずにフィルター処理されたテーブルで条件付きで重複をフォーマットする方法があります。

  1. 列に1を入力します
  2. 別の列を作成し、このような式をその中に入れます

    =IF(SUBTOTAL(103, [@ColumnWithOnlyOnesInIt])=1, [@ColumnYouWantToCheckForDuplicates], "")

  3. チェックする列に通常の複製条件付き書式を設定します。

手順2の式は、チェックする列から値をコピーしますが、行が表示されている場合のみです。そのようにして、重複がチェックされると、フィルタリングされたテーブルに適用可能なものだけを取得します。これはゼロ(または ""またはifステートメントで "else"値として選択したもの)では機能しない可能性があると思います。そのため、リスト内で重複として強調表示されている行ゼロ値を取得できる場合があります。それ以外は、私はこの方法で幸運を持っています。


0

私は次の式を使用することを提案します(例えば$ A:$ Aの範囲で):

=AND(A1=OFFSET(A1;-1;0);SUBTOTAL(103;OFFSET(A1;-1;0))=1)

それは何をしますか:

両方の場合

  1. セルは上のセルと同じです: A1=OFFSET(A1;-1;0)
  2. 上記のセルが表示されます: SUBTOTAL(103;OFFSET(A1;-1;0))=1

結果はTrueであるため、セルは真上の可視セルの複製であり、グレー表示する必要があります。

補足:OFFSET関数を使用すると、追加の行が挿入されたときに条件付き書式設定が壊れません。


-1

ここに私が使用したソリューションがあります:

新しい列C(および元の列(列B)をHID)を作成しました。新しい列では、式= SUBTOTAL(9、B2)を使用しました。これは、関心のある1つの行を合計します。その後、すべての行をコピーしました。

これで、高度なフィルターを使用してフィルター処理する場合。値は、表示されていない限り(フィルタリングされていない場合)、この列ではすべてゼロです。

次に、通常の= SUMIF()はチャンピオンのように機能します。誤って非表示の列を使用して合計しないでください。作成したSUBTOTAL()列全体で合計します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.