AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1814778
Accepted
tkp
tkp
Asked: 2023-10-31 10:52:23 +0800 CST2023-10-31 10:52:23 +0800 CST 2023-10-31 10:52:23 +0800 CST

Por que o Excel está rejeitando CHOOSECOLS(Array,Colnum) em uma fórmula onde aceita INDEX(Array,0,ColNum)?

  • 772

RESUMO

Alguém pode explicar por que o Excel - versões atuais no Mac e no Windows - às vezes se recusa a aceitar, na fórmula de uma célula, isto:

CHOOSECOLS(SomeArray,ColNum)

mas aceita isso:

INDEX(SomeArray,0,ColNum)

Dois exemplos específicos são quando esses formulários são usados ​​em uma função SUMIF() ou COUNTIF(). E quando digo que o Excel se recusa a aceitar o primeiro, quero dizer que nem consigo aceitá-lo como uma fórmula sintaticamente correta. Observo que versões não condicionais dessas funções não mostram o problema, nem funções como MAX(), MIN(), AVERAGE(), etc.

DETALHES

Suponha que eu tenha um array em B5:C10 (suponha que seja dinâmico, então posso me referir a ele como B5# nos exemplos a seguir; mas o problema também existe mesmo com intervalos não dinâmicos), e quero somar todos os itens maior que 0 na coluna 2 (ou seja, em C5:C10). Embora o Excel aceite o seguinte:

=SUMIF(INDEX(B5#,0,2),">0")

recusa-se a aceitar:

=SUMIF(CHOOSECOLS(B5#,2),">0")

No entanto, se eu primeiro extrair a coluna desejada em uma matriz auxiliar enraizada em C16 (digamos), da seguinte maneira:

=CHOOSECOLS(B5#,2)

então o seguinte é aceito como fórmula correta (e fornece o resultado correto):

=SUMIF(C16#,">0")

Tenho uma planilha Excel que mostra isso em ação, mas não tenho certeza da melhor maneira de anexá-la. Se for útil e alguém puder explicar como posso anexar um arquivo .xlsx, eu o fornecerei. Enquanto isso, aqui está uma captura de tela: insira a descrição da imagem aqui

microsoft-excel
  • 1 1 respostas
  • 79 Views

1 respostas

  • Voted
  1. Best Answer
    P.b
    2023-10-31T19:12:40+08:002023-10-31T19:12:40+08:00

    SUMIFe outras funções listadas são chamadas de funções RACON, que requerem uma entrada de intervalo. (você pode ler mais sobre isso aqui )

    O fato de funcionar com INDEX é uma pequena surpresa para mim, para ser honesto, mas acho que o Excel ainda interpreta isso como uma entrada de intervalo. Se você o tivesse usado, =SUMIF(INDEX(B5#,{1;2},2),">0")não seria mais aceito como um intervalo, mas será reconhecido como um array, que não é uma entrada aceita.

    Podemos contornar esse problema examinando outras funções do Excel que não estão limitadas à entrada de intervalo, como MMULT. Embora seja um pouco menos simples que SUMIFS, deixe-me tentar explicar a lógica:

    MMULTusa multiplicação de matrizes . se você tiver 2 matrizes:

    insira a descrição da imagem aqui

    MMULT multiplicará a primeira linha da matriz1 pelos valores transpostos da primeira coluna da matriz 2: ={1,2,3}*{10;20;30} a soma desses produtos é o primeiro resultado do MMULT:10+40+90= 140

    em seguida, multiplicará os valores da primeira linha da matriz1 para a próxima coluna transposta da matriz2: ={1,2,3}*{4;5;6}=4+10+18= 32

    a seguir, a segunda linha da matriz1 contra a primeira coluna transposta da matriz2: ={4,5,6}*{10;20;30}=40+100+180= 320

    e finalmente a segunda linha da matriz1 contra a segunda coluna transposta da matriz2: ={4,5,6}*{4;5;6}=16+25+36= 77

    Isto resulta em: insira a descrição da imagem aqui

    então mais visual: insira a descrição da imagem aqui

    Por que estou contando isso?

    SUMIFSnão podemos usar arrays como argumento de intervalo, mas MMULT pode e podemos usar uma lógica semelhante a SUMIFS dentro de MMULT, só precisamos multiplicá-lo por um array com a mesma altura (nº de linhas) que a largura (nº de colunas) de a matriz de entrada.

    Então, voltando B5#e traduzindo os argumentos SUMIFS para MMULT seria: =MMULT(TOROW(CHOOSECOLS(B5#,2)),N(CHOOSECOLS(B5#,2)>0)) ou =LET(b,CHOOSECOLS(B5#,2),MMULT(TOROW(b),N(b>0)))

    Ele transpõe os valores de CHOOSECOLS(B5#,2)para uma linha e os multiplica para uma matriz vertical de booleanos ( CHOOSECOLS(B5#,2)valores maiores que 0 VERDADEIRO ou FALSO), onde VERDADEIRO e FALSO são convertidos em sua representação numérica 1e 0respectivamente. Isso é então SOMADO.

    mas neste caso também poderíamos usar o booleano dentro de SUM: =LET(b,CHOOSECOLS(B5#,2),SUM(b*(b>0)))

    Então por que se preocupar com a explicação do MMULT?

    Como o MMULT também tem a capacidade de distribuir uma matriz de resultados:

    Portanto, no seu caso, se somarmos os valores maiores que 0 em linha, teríamos que arrastar manualmente a versão SUM ou usar uma versão BYROW LAMBDA, mas MMULT também pode fazer isso perfeitamente de uma só vez, sem arrastando manualmente:

    =MMULT((B5#>0)*B5#,{1;1})derramaria: insira a descrição da imagem aqui

    ou um equivalente em CONT.SE: =MMULT(N(B5#>0),{1;1}) insira a descrição da imagem aqui

    • 3

relate perguntas

  • Excel Pivot com operador "e"

  • Como usar a função LENGTH do Excel para uma coluna inteira?

  • Matriz do Excel (2 variáveis)

  • como abrir um arquivo de escritório do WSL

  • VBA para renomear planilha com base no nome do arquivo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve