Agrupar e ordenar as linhas de uma tabela

2

Eu tenho uma tabela em que a coluna A contém um valor exclusivo em cada célula. A coluna B está vazia ou contém um número.

   |    A    | B 
---+---------+---
 1 | Gamma   | 1 
 2 | Echo    | 5 
 3 | Alpha   |   
 4 | Foxtrot | 3 
 5 | Bravo   |   
 6 | Charlie | 1 
 7 | Delta   |   

Gostaria de classificar a tabela de forma que as linhas com um valor não em branco na coluna B apareçam antes daquelas com um espaço em branco nessa coluna. As linhas com valores não vazios em B também precisam ser classificadas em ordem alfabética pela coluna A . A ordem de classificação das outras linhas é irrelevante.

O resultado deve ser algo como isto:

   |    A    | B 
---+---------+---
 1 | Charlie | 1 
 2 | Echo    | 5 
 3 | Foxtrot | 3 
 4 | Gamma   | 1 
 5 | Alpha   |   
 6 | Bravo   |   
 7 | Delta   |   

A partir de agora, as células em branco na coluna B estão completamente vazias, nem mesmo contendo uma fórmula avaliada como uma cadeia nula. No futuro, isso provavelmente mudará. Não sei se isso afetará as respostas.

    
por John Doe 16.07.2018 / 08:15

4 respostas

1

Existe uma solução de ausência de linhas, sem filtragem e simples . Apenas requer que uma simples fórmula de formatação condicional seja adicionada à coluna B :

SelecioneB2:B8,certificando-sedequeB2sejaacélulaativaeadicioneumanovaregradeformataçãocondicionaldefórmula.AltereacordafontedaregraparaalgodiferentedeAutomaticeinsiraoseguintecomoafórmula:

=B2=""

Observe que, enquanto uma linha de cabeçalho é mostrada, ela não é necessária. (Veja as notas na parte inferior da minha outra resposta para mais detalhes.)


Agora, tudo que você precisa fazer para obter o resultado desejado é essa classificação de dois níveis:

  1. ClassificarpelacolunaBonFontColorordenadaporAutomaticOnTop
  2. ClassificarpelacolunaAonValuesordenadaporAtoZ

OmesmoefeitopodeserobtidousandoumacordepreenchimentoemvezdeumacordefonteparaaregradeformataçãocondicionaleclassificaçãoemCellColor.(Aousaracordafonte,émaissimplesnãofazernenhumaalteraçãovisívelnosdados.Euuseivermelhoparaqueficasseclaronacapturadetela,masamelhorcoraserusadanocasogeralseriapreto.)

NotequeaclassificaçãopodeseracessadaatravésdomenuDataSort&FilterSort,oatalhoequivalenteAlt+A+S,oudequalquerdosmenussuspensosnacélulaquandooMododeFiltro(Alt+A+T)estáligado(desdeque,naturalmente,existaumalinhadecabeçalho,vaziaounão,casocontrárionãosepodegarantirqueaclassificaçãofuncionecorretamente):

Emessência,classificarporcoradicionaumrecursode"agrupamento" ao classificar, semelhante ao que está disponível no SQL.

Esse agrupamento pode ser bastante complexo, incluindo o uso de várias colunas para os critérios, embora seja necessário apenas uma classificação de dois níveis. Mesmo agrupamentos "aninhados" podem ser realizados - eles exigem apenas níveis de classificação extras.

    
por 22.07.2018 / 13:31
1

Aqui está a solução sem-ocultação de linhas, sem filtragem, sem coluna auxiliar, sem formatação condicional, dois -sort, três etapas que mencionei em um comentário sobre a auto-resposta do OP. Foi confirmado como trabalhando no Excel 2007.

Etapa 1

Classificar pela coluna B on Values ordenada por Smallest to Largest :

Observeque,enquantoumalinhadecabeçalhoémostrada,elanãoénecessária.(Vejaasnotasparamaisdetalhes).

Etapa2

SelecioneapartesuperiordatabelaatéaúltimalinhacomumvalornãoembranconacolunaB.Paraatabeladeexemplo,issoseriaA1:C5.

Amelhormaneiradefazerissoparaumgrandenúmerodelinhase/oucolunas(masaplica-seigualmenteatabelasmenoreseevitaarolagemmanualouusandoomouse)éaseguinteseqüênciadeatalhosdeteclado,começandoemqualquercélulanãovazianacolunaB:

  • Ctrl+Abaixo;
  • Ctrl+Direitaquantasvezesforemnecessáriasparachegaràcolunamaisàdireitadatabela(ouapenaspressioná-laparachegaràbordadireitadaplanilha);
  • (Ctrl+Esquerdasevocêultrapassareacabarnoiníciodapróximatabelaounacolunamaisàdireitadafolha);
  • Ctrl+Deslocamento+Início;

Senãohouveroutrosdadosàdireitadatabela,essasequênciaalternativapodeserusadaemvezdisso:

  • Ctrl+Abaixo;
  • Ctrl+Deslocamento+Acima;
  • Shift+Espaço

Etapa3

ClassificarpelacolunaAonValuesordenadaporAtoZ:

Notas:

  • A classificação na etapa 1 pode ser executada por meio do item de menu DataSort & FilterSort (ou seu equivalente de atalho Alt + A + S ) ou na lista suspensa na célula quando o Modo de filtro está ativado (desde que haja uma linha de cabeçalho, é claro).
  • A classificação é a etapa 3, e somente pode ser executada por meio do item de menu.
  • É garantido que esse método funcionará mesmo se os dados da tabela começarem na linha 1 e não tiverem linha de cabeçalho. Somente minhas duas soluções (mais os OP's, é claro) funcionarão para este caso. Na verdade, essas soluções são as únicas que funcionarão ou podem até funcionar, para uma tabela 1 de linha sem cabeçalho, se a primeira célula da coluna B for um espaço em branco.
  • Ele também funcionará, independentemente do estado do Modo de filtro. (A menos, é claro, que a tabela seja sem cabeçalho, comece na linha um e, por algum motivo, o Modo de filtro esteja ativado. Nesse caso, desligue-a e deixe-a já pronta!)
por 22.07.2018 / 20:17
0

Parece que não há uma maneira de fazer o que eu quero estritamente através da classificação, mas eis o que funciona para mim:

  1. Classifique as linhas da coluna B de pequena para grande

  2. Ocultar todas as linhas que fazem não tem um valor na coluna B

  3. Classificar linhas por coluna A em ordem alfabética

por 21.07.2018 / 01:26
-2

Uma solução seria combinar classificação e filtragem. Funciona melhor se você tiver cabeçalhos de coluna na primeira linha, mas não precisa necessariamente deles.

Não é "apenas ordenação", como você solicitou, ele usa o filtro. Mas você pode apenas "selecionar" a tabela inteira (na verdade, ligando o modo de filtro vai fazer isso por você), siga os passos e voilà. Também é bastante fácil "convertê-lo" em uma macro. Em relação às outras soluções, essa solução não exige que você oculte (ou "desmarque") manualmente as linhas indesejadas. Também não é necessário introduzir uma fórmula adicional (por meio da formatação condicional da coluna A ou B ou pela adição de outra coluna).

De qualquer forma aqui vai:

Ative o filtro:

  • selecione qualquer célula na sua lista e ative o modo de filtro (na faixa de opções você o encontrará na aba "Data", ele deve ser chamado de "Filtro"). Você verá um pequeno triângulo aparecer na primeira linha de cada coluna que você usa

    (nota: se você não tiver cabeçalhos de coluna, basta adicionar uma linha vazia no início e selecionar todas as colunas usadas manualmente, neste caso A e B, em vez de "apenas" selecionar uma célula na lista)

Mova as linhas sem valor B para o final da lista:

  • classifica a coluna B em ordem crescente (clicando no pequeno botão de triângulo na primeira linha da coluna B e selecionando ordenar por valor crescente)

Classifique a coluna A e desative / remova o filtro

  • filtre as linhas que têm células vazias na coluna B (novamente clicando no botão triângulo e desmarcando o valor "vazio" na parte inferior da lista)
  • classifica a coluna A em ordem crescente (da mesma forma que você classificou a coluna B)
  • desativar a filtragem avançada (da mesma forma que você ligou), isso removerá automaticamente o filtro para células vazias na coluna B

Isso deve lhe dar o resultado certo, tanto quanto eu entendi você. Você também não terá que esconder as linhas manualmente, o Excel irá esconder todas as linhas para você.

(observe que ocultar as linhas manualmente é diferente de usar o filtro para "ocultá-las")

    
por 16.07.2018 / 11:14