web-dev-qa-db-ja.com

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

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

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

  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
_

フィルターがddddを含む行を非表示にする場合、eeeeを含む行に_+BBB+_スタイルを設定します。

12
Phrogz

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

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

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

条件付きフォーマットでは、次のように使用できます:= SUBTOTAL(103,$A2)=1行が表示されているかどうかを確認します。

13
Phrogz

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

条件付きフォーマット

=CELL("width",TargetCell)=0

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

式チェック

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

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

5
Tom Bombadil

これは、ゲイリーの学生のアプローチに似ています。次の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_を強調表示します。

例:生データ:

 full data set

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

 filtered data

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

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

  1. 1が入力された列を作成する
  2. 別の列を作り、それにこのような数式を入れます

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

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

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

0
JFrizz

次の数式を使用することをお勧めします($ 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関数を使用すると、追加の行が挿入されたときに条件付き書式が解除されません。

0
Joma

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

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
0
Gary's Student