Array como sintaxe no MS Excel

0

Como posso selecionar uma célula usando subscrito como na maioria das linguagens de programação - a [x]?

Ou seja, não sei quais dados da linha eu quero, mas conheço a coluna. Esse tipo de coisa provavelmente pode ser útil em fórmulas de validação como seguir

= IF(A[row()] = "X", TRUE, FALSE) 
    
por Holysmoke 14.09.2009 / 11:45

5 respostas

2

Use a função INDIRECTO :

=INDIRECT("A"&C2)

se C2 for a célula que contém o número da linha.

Você pode usar isso na sua fórmula de IF:

= IF(INDIRECT("A"&C2) = "X"; TRUE; FALSE)
    
por 14.09.2009 / 13:11
2

Concordo, INDEX é definitivamente uma resposta melhor para isso do que INDIRECT, na verdade, é realmente a coisa mais próxima de um seletor de elemento de matriz que existe no Excel. (NB: não há nenhum elemento zero como existe em muitas linguagens de programação, o Excel trabalha em linhas e colunas, então o primeiro é sempre 1 em qualquer direção)

Observe que você pode usar a versão simples para selecionar o enésimo elemento em uma matriz de uma coluna:

= ÍNDICE (A1: A100,27) daria o 27º elemento de A1: A100, ou seja, A27 ou uma matriz de uma linha:

= INDEX (A1: G1, 5) fornece o conteúdo da quinta coluna na matriz, então E1 neste caso (observe a vírgula dupla para mostrar que nenhum valor para a linha é fornecido)

você pode fazer matrizes bidimensionais:

= INDEX (A1: D100,27,4) seria o conteúdo de D27 (linha 27, coluna 4 da matriz) e

= ÍNDICE (C19: X43,5,7) dá I23

Agora, se você tiver uma matriz bidimensional e fornecer apenas um parâmetro, o resultado será uma coluna ou linha inteira. Enquanto isso não faz sentido por conta própria, é bem incorporado dentro de outra função. Assim: = INDEX (A1: C5,1) - retorna um erro #REF, pois nem sequer entende se o 1 se refere à linha ou à coluna.

= INDEX (A1: C5,1,) - retorna #VALUE porque não pode exibir o arrary resultante em uma célula, mas observe que a vírgula extra agora está explicitamente definindo que o 1 significa a primeira linha.

= SUM (INDEX (A1: C5,1,)) - retorna a soma de todos os valores em A1: C1, a primeira linha da matriz.

No entanto, tendo dito tudo isso, talvez você não precise selecionar explicitamente um elemento de matriz. Parece a partir do seu exemplo que você está tentando testar o valor em uma coluna conhecida para a mesma linha em que a fórmula foi inserida. Você pode fazer isso usando a interseção implícita do intervalo e a corrente linha, por exemplo, se você inserir essa fórmula na célula B13:

= SE (A: A="X", "Sim, isto funciona", "X não encontrado") então você pode copiar isso para qualquer outra linha simplesmente arrastando-a para fora e em cada linha implicitamente significa "o elemento da coluna A que está no mesmo número de linha que esta fórmula". Nota: o intervalo não precisa ser uma coluna inteira, pode ser A4: A104, ou mesmo em outra planilha, mas em todos os casos, ela usará a célula na mesma linha real do Excel que a fórmula. Vou dizer o último bit novamente: Se você tiver a fórmula na célula B5 usando um intervalo A4: A104, você não obterá o quinto elemento desse intervalo (A8), mas sim a célula A5. Se você usar a fórmula na célula B3 contra A4: A104, você obterá um erro porque o intervalo não tem nada na linha 3 (não há interseção). Portanto, se suas linhas estiverem alinhadas, essa célula implícita de um intervalo será realmente útil (e ainda mais limpa quando você usar um intervalo nomeado para a coluna), mas, se não forem, você precisará de INDEX para obter uma verdadeira replicação de um [ n] para qualquer elemento da matriz.

    
por 30.10.2009 / 11:48
0

Você poderia tentar

=if(A & trim(text(something that evaluates to a number))="X",true,false)

Eu acho que, se você pudesse ser um pouco mais específico sobre como a sua linha get () seria útil.

    
por 14.09.2009 / 11:55
0

Se você souber o intervalo em que os valores estão em uso, use a função INDEX.

por exemplo,

= IF(INDEX(A:A, ROW()) = "X", TRUE, FALSE)

Ao contrário da função INDIRETO, ela não é volátil e, portanto, não será recalculada sempre que algo mudar.

    
por 14.09.2009 / 16:25
0

Aqui estão mais duas opções para você:

Ativar o estilo de referência R1C1

No Excel 2003, por exemplo:

  1. Clique em Opções no menu Ferramentas e, em seguida, clique na guia Geral.
  2. Em Configurações, marque a caixa de seleção Estilo de referência R1C1.

Então, na sua fórmula, você faria isso:

=R1 = "X"

que retornará automaticamente um verdadeiro ou um falso. Por favor, note que em suas fórmulas, sempre que você usar If () para retornar true e false, você pode simplesmente se livrar do If () inteiramente, já que qualquer comparação já retorna um valor booleano.

Infelizmente, com esse método, você não pode usar o estilo de referência A1, portanto, esse truque pode ser de utilidade limitada para você.

Use intervalos nomeados

Os intervalos nomeados são realmente poderosos e fáceis de usar. Digamos que você tenha rotulado a coluna com os Xs na bandeira. Então você selecionaria toda a coluna e selecionaria Inserir - > Nome - > Definir. Dê-lhe o nome Flag (se ainda não o encontrou com base no seu marcador) e, em fórmulas, use a palavra Flag como se fosse uma referência de célula, assim:

=Flag = "X"

Isso usará o valor da mesma linha, mas a coluna correta.

Além de definir nomes manualmente, se você quiser adicionar rótulos a um conjunto inteiro de dados de uma só vez, selecione seu intervalo de dados e escolha Inserir - > Nomes - > Crie e escolha a posição das etiquetas (geralmente Linha Superior para mim). Agora você definiu um intervalo nomeado para cada coluna em sua planilha e pode começar a usá-los em suas fórmulas.

Mais um petisco

Não perca o operador de interseção, que é um espaço. O operador union é uma vírgula como em =Sum(A1, B1) e o operador intersect é usado da mesma forma como =Sum(Flag 2:10) . Se o intervalo nomeado Flag referir-se à coluna 1, por exemplo, isso resolveria o intervalo A2: A10, a interseção dos dois intervalos listados. Você pode usar várias interseções uma após a outra, como em range range range range . A:A 1:1 resolve a mesma referência que A1 .

Se os dados de sua linha também forem marcados de forma significativa, como em regiões ou anos ou outros valores, adicionar intervalos nomeados e usar o operador intersect pode fazer coisas maravilhosas, como, se o intervalo nomeado TotalSales refere-se a uma coluna com valores de vendas, e o intervalo nomeado Califórnia refere-se a todas as linhas (inteiras) com dados da Califórnia - não necessariamente contíguas - e a fórmula =Sum(TotalSales California1) seria a soma de o cruzamento desses dois.

    
por 18.02.2010 / 01:29