Excel: Como dar células escolhidas por alguns critérios como um parâmetro na variância (ou qualquer outra) fórmula?

0

Para a seguinte tabela do Excel:

           A          B           C
1        Score     Category   VariancePerCategory(Calculated)
2       0.3146      Orange      0.034214             
3       0.5711      Orange      0.034214     
4       0.7129      Apple       0.0          
5       0.8426      Lemon       0.000215
6       0.1194      Orange      0.034214     
7       0.8719      Lemon       0.000215

Preciso da coluna C para ter automaticamente a variação de todas as pontuações (coluna A), mas apenas para a categoria dessa linha (coluna B). O que significa que as linhas 2,3,6 terão todas o mesmo valor (todas compartilham Orange categoria), que é VAR.P(A2, A3, A6).

Eu gostaria que todas as células da coluna C tivessem a mesma fórmula, que terá VAR.P sempre é executado apenas nas células da coluna A que têm uma coluna B igual à coluna B. Como posso escrever essa fórmula?

Idealmente, eu teria algum equivalente de SUMIF() e AVERAGEIF() para variância, mas como não existe, estou procurando uma solução mais genérica (que poderia funcionar com qualquer função que receba um conjunto de células). Eu tentei fazer isso com IF(), LOOKUP(), etc, mas nada se encaixa.

OferBr
fonte
Eu pensar você precisará do VBA se quiser retornar uma lista de valores com base em um if condição. Caso contrário, você precisará utilizar uma coluna para gerar os números.
Raystafarian

Respostas:

0

Abra o editor de macro, na árvore da esquerda, em Módulos, insira um novo módulo e, no lado direito, cole isto:

Function cond_Variance(Condition As String, Data As Range, Categories As Range) As Double
    Dim numbers() As Double
    DataRows = Data.Rows.Count
    CategoriesRows = Categories.Rows.Count
    firstDataRow = Data.Row
    firstDataColumn = Data.Column
    firstCategoriesRow = Categories.Row
    firstCategoriesColumn = Categories.Column
    ReDim numbers(DataRows)
    counter = 1
    Total = 0
    For i = firstCategoriesRow To firstCategoriesRow + CategoriesRows - 1
        selectedcell = Cells(i, firstCategoriesColumn)
        If selectedcell = Condition Then
            numbers(counter) = Cells(i, firstDataColumn)
            counter = counter + 1
            Total = Total + Cells(i, firstDataColumn)
        End If
    Next i
    counter = counter - 1
    mean_value = Total / counter
    vTotal = 0
    For i = 1 To counter
        nDiff = (numbers(i) - mean_value) * (numbers(i) - mean_value)
        vTotal = vTotal + nDiff
    Next i
    cond_Variance = vTotal / counter
End Function

Agora, para o seu exemplo, na célula C2 você escreve:

=cond_Variance(B2,$A$2:$A$7,$B$2:$B$7)

Sobre os parâmetros:

  • A primeira é a condição, neste caso B2 is Orange.
  • O próximo campo é o intervalo de dados numéricos, neste caso $A$2:$A$7
  • A última é a lista de categorias, neste caso $B$2:$B$7
jcbermu
fonte