Cálculo do Excel com base na entrada de qualquer célula

0

Eu preciso de uma coluna de números que são gerados com base na entrada de QUALQUER das células. Digamos que eu preciso que cada célula seja 50% da anterior, assim:

1000
500
250
125

Percebo que posso multiplicar com base na entrada de uma célula de entrada designada. Nesse cenário, talvez a primeira célula seja a célula de entrada e o restante será = input * 0.5

A questão é que eu gostaria de poder usar qualquer célula como entrada e TODAS as outras células serão alteradas automaticamente de acordo com as mesmas regras, mas com base nesse número. Por exemplo, tomando o exemplo acima, se eu digitar 40 no lugar de 250, a coluna resultante ficaria assim:

160
80
40
20

Isso faz sentido? Agradeço qualquer ajuda nisso!

danieljkahn
fonte
Uma célula não pode conter uma fórmula e um valor de entrada. Você pode usar uma fórmula para descobrir o valor da célula com base em outras células, mas se você a substituir por um valor de entrada, você perderá a fórmula. Você pode fazer isso com o VBA, mas a abordagem mais simples é separar a entrada dos resultados.
precisa saber é o seguinte

Respostas:

0

Sem VBA

O mais próximo possível do VBA é fornecendo a coluna de entrada e resultado.

=INDEX($A$1:$A$10, MATCH(FALSE, ISBLANK($A$1:$A$10), 0))*2^(MATCH(FALSE, ISBLANK($A$1:$A$10), 0)-ROW())

Mude $A$1:$A$10para o intervalo desejado e pressione Ctrl + Shift + Enter em vez de Enter ao inserir esta fórmula. Você pode preenchê-lo automaticamente.

Opcional: coloque essa validação de dados no seu intervalo / coluna de entrada. Adapte o intervalo à sua necessidade, mas lembre-se dos sinais de $ . Isso fará com que o intervalo aceite apenas uma entrada.

=COUNTA($A$1:$A$3)<=1

O resultado:

400  | 400*2^(1-1) => 400 | First non-blank value is 400
     | 400*2^(1-2) => 200 | First non-blank row number is 1, current row is 2
     | 400*2^(1-3) => 100 | Current row is 3

     | 300*2^(2-1) => 600 | First non-blank value is 300
300  | 300*2^(2-2) => 300 | First non-blank row number is 2, current row is 2
     | 300*2^(2-3) => 150 | Current row is 3

Explicação

A fórmula pega o valor da primeira célula da coluna de entrada (A) que não está em branco (veja aqui ). É então multiplicado por 2 powered by the row number of first non-blank cell minus current row number.

Com VBA

Adaptado desta pergunta

Private Sub Worksheet_Change(ByVal Target As Range)

Dim InputRange As Range, cell As Range
Dim BaseValue As Double
Set InputRange = Range("B1:B4")

If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Intersect(Target, InputRange) Is Nothing Then Exit Sub

BaseValue = Target.Value*2^(Target.Row - InputRange.Row)

Application.EnableEvents = False
For Each cell In InputRange
 cell.Value = BaseValue
 BaseValue = BaseValue/2
Next cell
Application.EnableEvents = True

End Sub

Adapte seu alcance a Set InputRange = Range("B1:B4")

Explicação

If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Intersect(Target, InputRange) Is Nothing Then Exit Sub

Somente a alteração de uma célula é avaliada. Somente a alteração de valor que não ocorre devido à operação de exclusão é avaliada. Somente as alterações feitas no InputRange são avaliadas.

BaseValue = Target.Value*2^(Target.Row - InputRange.Row)

Estabeleça o BaseValue, que é o valor da célula mais alta do intervalo. Isso é feito multiplicando o valor de entrada por 2, alimentado pela diferença entre a linha superior e a linha de destino (exemplo: se você inserir B8 e o intervalo cobrir B3: B9, multiplique por 2 power (8-3))

Application.EnableEvents = False
...
Application.EnableEvents = True

Impede que eventos sejam acionados devido a essa alteração a seguir.

For Each cell In InputRange
 cell.Value = BaseValue
 BaseValue = BaseValue/2
Next cell

Altera o valor de cada célula, começando da parte superior do intervalo definido, para uma proporção do BaseValue.

Vylix
fonte
11
Uma solução mais simples não-VBA se você quiser incorporá-lo: B1: =A1+2*A2+4*A3+8*A4; B2: =A1/2+A2+2*A3+4*A4; B3: =A1/4+A2/2+A3+2*A4; B4: =A1/8+A2/4+A3/2+A4. (questão tem quatro entradas)
fixer1234
0

Neste exemplo, você pode usar uma célula de entrada ( C6) junto com uma célula auxiliar ( B6), na qual é necessário colocar um índice em uma lista de valores: o valor de entrada aparecerá nessa posição de índice em uma lista.

A fórmula é apenas

=$C$6*$E$2^(D4-$B$6)

Observe que o valor percentual é armazenado em E2.

Comece com 1000a 0posição:

insira a descrição da imagem aqui

Em seguida, mude para 40a posição 2:

insira a descrição da imagem aqui

Você também pode se livrar da coluna de índice, mas acho que é útil tê-la.

g.kov
fonte