A função do Excel determina se uma célula é visível

10

Na formatação condicional, desejo detectar se a linha acima da célula atual está oculta ou visível. Como posso detectar se uma célula é visível ou não?

O único hack que posso pensar é:

  1. Crie uma coluna com todos os valores 1 .
  2. Use uma fórmula como subtotal(109,c2:c2)=1 (ou seja, apenas na célula que desejo verificar) para determinar se ela está visível ou oculta.

Existe alguma maneira de fazer isso sem uma coluna temporária que deve ser deixada visível quando a linha é mostrada?

Para evitar um problema XY , o que eu quero fazer é ter uma coluna que seja a categoria da linha. A primeira linha VISÍVEL com uma categoria específica deve ter um estilo diferente; linhas posteriores com a mesma categoria são ligeiramente diferentes. Em ASCII:

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

Se meu filtro ocultar a linha com dddd , quero que a linha com eeee tenha o estilo +BBB+ .

    
por Phrogz 03.03.2015 / 22:08

6 respostas

10

Em vez de subtotal usando uma soma em outra coluna, você pode usar o subtotal usando counta para ver se uma célula (não-branca) está oculta ou não. Por exemplo, se a coluna A estiver normalmente visível (a menos que a linha esteja oculta)

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

Você pode colocar essa fórmula em uma coluna que pode estar oculta e ainda funcionará.

Na formatação condicional, você pode simplesmente usar: = SUBTOTAL(103,$A2)=1 para determinar se a linha está visível.

    
por 03.03.2015 / 23:09
5

Como um adendo à resposta de Phrogz, se você precisar verificar se uma célula em uma coluna está oculta, tente um dos seguintes,

Formatação condicional

=CELL("width",TargetCell)=0

Isso é atualizado automaticamente assim que uma coluna é ocultada.

Verificação de fórmulas

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

Esta fórmula não será atualizada automaticamente e você deverá direcionar o Excel para "Calcular agora" escolhendo a opção de menu ou pressionando "F9".

    
por 28.04.2015 / 04:54
1

Isso é semelhante à abordagem do Gary's Student. Defina a seguinte função VBA:

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

Veja Como adiciono o VBA no MS Office? se você precisar de ajuda com isso. Agora você pode usar MyRowHidden(cell) para verificar se a linha que contém cell está oculta.

A maneira que eu criei para resolver o problema usa uma coluna auxiliar, mas você pode ocultá-lo. Supondo que seus dados comecem na Linha 2 , com as categorias na Coluna A , insira

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

na célula H2 e arraste para baixo. Esta fórmula é avaliada como TRUE se

  • a categoria nessa linha ( A2 ) é diferente da categoria na linha anterior ( A1 ); ou seja, esta é a primeira linha de uma nova categoria ou
  • a linha anterior deve estar destacada, mas está oculta.

Em seguida, basta usar a formatação condicional para destacar a célula A2 se =H2 for verdadeira.

Exemplo: dados brutos:

Sim,soutradicionalista;EuaindacontoPlutãocomoumplaneta.Aquiestánovamentecomaslinhasnumeradasprimárias(2,3,5,7,11e13)ocultas:

É claro que você terá que ativar macros em sua pasta de trabalho.

    
por 04.03.2015 / 01:05
0

Para detectar se a linha acima da célula ativa é Oculto , execute esta macro:

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
    
por 03.03.2015 / 22:19
0

Esse segmento é um pouco antigo, mas caso seja útil para qualquer pessoa, aqui está uma maneira de formatar condicionalmente duplicatas em uma tabela filtrada sem precisar usar o VBA.

  1. Crie uma coluna preenchida com 1's
  2. Faça outra coluna e coloque uma fórmula como esta nela

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

  3. Coloque na formatação condicional duplicada normal na coluna que deseja verificar.

A fórmula da etapa 2 copiará o valor da coluna que você deseja verificar, mas somente quando a linha estiver visível. Dessa forma, quando as duplicatas são verificadas, você recebe apenas as aplicáveis à tabela filtrada. Eu acho que isso pode não funcionar para zeros (ou "" ou o que você escolher como o valor "else" em sua instrução if). Por isso, pode ser possível obter um valor de linha zero na sua lista que esteja destacado como duplicado. Além disso, estou tendo boa sorte com esse método.

    
por 16.11.2017 / 21:14
-1

Aqui está a solução que acabei de usar:

Eu criei uma nova coluna C (e a HID original (Coluna B)). Na nova coluna eu usei a fórmula = SUBTOTAL (9, B2) Em qual SUMA linha você está interessado. Eu então copiei todas as linhas!

Agora, quando você filtra usando o filtro avançado. Os valores são todos ZERO nesta coluna, a menos que sejam visíveis (não filtrados).

Então, o normal = SUMIF () funciona como um campeão. Apenas não use acidentalmente a coluna oculta para somar. Soma na coluna SUBTOTAL () que você acabou de criar.

    
por 21.08.2016 / 04:30