-
Posts
8 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por FASP
-
-
@osvaldomp Sem querer abusar, mas já abusando, que modificação eu teria que fazer no macro para que execute em SO de 64 Bits?
É que eu eu também preciso rodar a planilha em casa no FDs.
É o mesmo Windows, só que é de 64, ao invés de 32.
-
@osvaldomp Ficou quase perfeito.
Eu estava apanhando porque algumas células da planilha estão bloqueadas e isso estava impedindo o Macro.
Me arrisquei a fazer um pequeno ajuste, de forma que o resultado final foi esse:
#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As LongPtr)
#Else
Public Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
#End IfConst WM_CLOSE = &H10
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongSub CalculaCoeficientes()
Sheets("Plan1").Select
ActiveSheet.UnprotectDim cell As Range, hCalc As Long, cw
[C3:C18] = ""
cw = Shell("C:\windows\system32\calc.exe", vbNormalFocus)
Sleep 500
For Each cell In Range("B3:B18")
On Error GoTo out
cell.Copy
Sleep 100
SendKeys "^v", True
DoEvents
Sleep 200
Application.CutCopyMode = False
SendKeys "^c", True
DoEvents
cell.Offset(, 1).Select: ActiveSheet.Paste
ActiveCell.Value = ActiveCell.Value / (10 ^ Right(ActiveCell.Value, 2)): ActiveCell.NumberFormat = "General"
Next
out:
SendKeys "{NumLock}", True
hCalc = FindWindow(vbNullString, "Calculadora")
If hCalc <> 0 Then PostMessage hCalc, WM_CLOSE, 0&, 0&Sheets("Plan1").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=TrueEnd Sub
Agora atualiza os valores diariamente sem a necessidade de outros programas e mais rápido.
Agradeço muito pela colaboração!
valeu mesmo!
-
@osvaldomp Parece promissor.
Mas deu esse erro ao tentar executar:
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Erro de compilação:'Sub' ou 'Function' não definida
---------------------------
OK Ajuda
---------------------------Ao aparecer a mensagem de erro acima ele também deixa em evidência o termo "FindWindow" na linha:
hCalc = FindWindow(vbNullString, "Calculadora").
Não entendo nada do assunto.
Como proceder?
*OBS: Aqui o SO é W7 Ultimate, SP1 de 32 Bits.E o Excel é o 2010
-
@deciog Sim, eu coloquei lá.
Me indicaram o xlPrecision, um suplemento bem bacana.
O problema é que ele tem uma parte chata, onde aparece uma caixa de diálogo toda vez que ele calcula, o que me obriga a digitar um CAPTCHA de até 12 dígitos. Ao atualizar uma célula que alimenta as fórmulas ele recalcula todas as 900 células e para cada um desses cálculos sou obrigado a digitar o CAPTCHA. O que para mim é completamente inviável...
Tem a versão paga sem os captchas, mas sai por 90 dólares (R$ 361,42).
O suplemento é ótimo e as funcionalidades vão muito além das minhas necessidades.
O valor é justo, mas a relação custo-benefício, no meu caso, não são viáveis.
Continuo em busca de uma solução alternativa...
Por hora, estou utilizando a calculadora do windows em conjunto com o MACRO RECOVER, que copia um conjunto de ações e replica quantas vezes eu quiser em alta velocidade. Isso me permite:
Copiar a formula (Ctrl+C), Alternar para a calculadora do Windows (Alt+Tab), Colar a fórmula (Ctrl+V), Copiar o resultador (Ctrl+C), Retornar a planilha (Alt+Tab), Selecionar a célula ao lado (KeyRight), Colar o resultado (Ctrl+V), Deixar selecionada a próxima linha a ser calculada (KeyDown, KeyLeft).
Keyboard : ControlLeft : KeyDown
DELAY : 1
Keyboard : C : KeyPress
Keyboard : ControlLeft : KeyUp
Keyboard : AltLeft : KeyDown
DELAY : 1
Keyboard : Tab : KeyPress
Keyboard : AltLeft : KeyUp
Keyboard : ControlLeft : KeyDown
DELAY : 1
Keyboard : V : KeyPress
DELAY : 50
Keyboard : C : KeyPress
Keyboard : ControlLeft : KeyUp
Keyboard : AltLeft : KeyDown
DELAY : 1
Keyboard : Tab : KeyPress
Keyboard : AltLeft : KeyUp
Keyboard : Right : KeyPress
Keyboard : ControlLeft : KeyDown
DELAY : 1
Keyboard : V : KeyPress
Keyboard : ControlLeft : KeyUp
Keyboard : Down : KeyPress
Keyboard : Left : KeyPressDaí eu coloco para repetir o procedimento 900 vezes e ABRACADABRA!
Em 15 minutos ele resolve todas as 900 células comigo AFK.
Não é o ideal... mas quebrou o galho e reduziu bastante o tempo de execução.
-
Não sei se entendi, mas vamos lá...
Bem, como eu disse acima, na "linguagem de cálculo do Excel", o conteúdo da célula B3 ficaria da seguinte forma:
=(A3 ^ (1 / ($B$20 + (((((($B$21 * (A3 - 1)) / $B$22) ^ (1 / 0,38685))*18000) - $B$23) / $B$24))))
As células B21, B23 e B24 no formato "##e##" não são expressões. São apenas valores em notação científica aceitos no formato da calculadora do windows. O Excel também reconhece valores em notação científica, mas apenas até 1e308 devido a limitação.
Exemplos:
30 = 3*(10^1) = 3e10
Na linguagem aceita pelo excel ficaria 3E+10
80.000.000 = 8*(10^7) = 8e7
Na linguagem aceita pelo excel ficaria 8E+50
O excel resolveria a formula que coloquei acima facilmente, se não fosse pela limitação de valor máximo a 1e308. Daí o meu problema.
Mas se não é essa a informação de que precisa, pode tentar colocar novamente com outras palavras. É que eu sou meio lento mesmo kkk
Agradeço a paciência.
adicionado 35 minutos depois@deciog Agradeço, mas devido as limitações do meu "espanglês" (kkk) precário eu prefiro aguardar por aqui alguns dias antes de recorrer aos gringos.
E acredito que meu problema nem seja assim tão complexo.
Eu só preciso que o Excel reconheça e execute cálculos com valores MUITO altos (como 10^500 por exemplo).
Basicamente, meu sofrimento se resume a isso.
Se alguém me der um exemplo de como fazer isso com alguma célula, acredito que talvez eu consiga replicar a aplicação na minha planilha com as células que eu preciso.
Não conhecia esse Chandoo, vou deixar salvo aqui para utilizar como ultimo recurso.
Obrigado.
-
11 horas atrás, osvaldomp disse:
Talvez seja possível efetuar os cálculos via macro, mas para isso precisamos saber que cálculos são feitos com os conteúdos de B21, B23 e B24.
Os campos B20:24 são os valores referentes a Tcurrent, Fcurrent, Pbonus, Gcurrent e Gh.
São dados que sofrem alteração diariamente e precisam ser alimentados manualmente.Os quais são apenas as "variáveis" no cálculo da seguinte equação:
CV = (M^(1/(Tcurrent + ((((((Fcurrent*(M-1))/Pbonus)^(1/0,38685))*18000) - Gcurrent) / Gh))))
A3:18 são valores referentes a variável "M" nessa mesma equação.
No Excel, a fórmula, está como texto:
="("&A3&" yroot (1/("&$B$20&" + (((((("&$B$21&"*("&A3&"-1))/"&$B$22&") yroot (1/0,38685))*18000) - "&$B$23&") / "&$B$24&"))))"
O resultado é um "texto" que eu copio e colo na calculadora do Windows, que executa o calculo.
Atualmente, tenho que realizar o procedimento linha por linha em B3:18, colando cada resultado obtido na linha correspondente em C3:18
Na forma "original" o Excel não consegue executar o calculo, mas B3 ficaria assim:
=(A3 ^ (1 / ($B$20 + (((((($B$21 * (A3 - 1)) / $B$22) ^ (1 / 0,38685))*18000) - $B$23) / $B$24))))
De forma que o ideal para mim seria obter de forma automática todos os valores de M entre 1,01 ~ 10 com intervalo de 0,01, pois como eu disse atualmente eu faço isso de forma intuitiva dentro de determinado intervalo com ajuda da calculadora do Windows utilizando os campos A3:18.
A finalidade da planilha é apenas descobrir o valor de M para o qual a equação retorna o MAIOR CV.
CV é um coeficiente determinado pela equação inicial:
CV = (M^(1/Ttotal))
A grande dificuldade se encontra no fato de Ttotal ser uma variável de cálculo bem trabalhoso e que se altera diariamente.
Caso seja de alguma ajuda, o desmembramento da equação de forma bem detalhada segue abaixo:
Ttotal = (Tcurrent + Tmissing)
Portanto: CV = (M^(1/(Tcurrent + Tmissing)))
Tmissing = (Gmissing / Gh)
Portanto: CV = (M^(1/(Tcurrent + (Gmissing / Gh))))
Gmissing = (Ggoal - Gcurrent)
Portanto: CV = (M^(1/(Tcurrent + ((Ggoal - Gcurrent) / Gh))))
Ggoal = (((Fgoal/Pbonus)^(1/0,38685))*18000)
Portanto: CV = (M^(1/(Tcurrent + (((((Fgoal/Pbonus)^(1/0,38685))*18000) - Gcurrent) / Gh))))
Fgoal = (Fcurrent*(M-1))
Portanto: CV = (M^(1/(Tcurrent + ((((((Fcurrent*(M-1))/Pbonus)^(1/0,38685))*18000) - Gcurrent) / Gh))))
E é isso...
Me coloco a disposição para qualquer esclarecimento e agradeço a sua atenção.
-
Devido as limitações de valor máximo do Excel não consigo realizar os calulos que eu preciso.
Felizmente, a calculadora do windows tem me ajudado com isso.
Em B20:B24 eu tenho o valor das variáveis que alimentam a fórmula.
Eu preciso atualizar C3:18 diariamente conforme a alteração dessas variáveis.
Então eu tenho várias linhas (B3:18) com a fórmula:
="("&A3&" yroot (1/("&$B$20&" + (((((("&$B$21&"*("&A3&"-1))/"&$B$22&") yroot (1/0,38685))*18000) - "&$B$23&") / "&$B$24&"))))"
Onde A3:18 são 16 valores de 1,25 a 5 em ordem crescente com intervalo de 0,25 (1; 1,25; 1,5; 1,75; etc...).
Que retornam o resultado como texto:
(1,25 yroot (1/(0,9167 + ((((((8,68e178*(1,25-1))/1217160) yroot (1/0,38685))*18000) - 5,5e450) / 2,4e451))))
*OBS: "yroot" é na calculadora do windows o equivalente ao símbolo de potenciação, que no Excel é "^".
Daí eu copio esse conteúdo e colo na calculadora científica do windows, que me retorna o resultado que eu jogo na linha correspondente da coluna C3:18.
Por ser apenas 16 linhas, tem sido fácil realizar o cálculo e fazer a comparação.
A finalidade é encontrar o maior resultado (em C3:C18), e tem funcionado bem até o momento, apesar de trabalhoso.
O problema é que agora eu preciso fazer a mesma coisa, só que com 400 linhas, (valores de 1-5 com intervalos de 0,01)
E da forma atual é impraticável, devido a necessidade de atualização diária.
Gostaria de saber se tem alguma forma de simplificar esse trabalho, seja com macro, VBA ou qualquer coisa do gênero.
O ideal seria um "botão" que fizesse a mágica de calcular todas as linhas e colocar cada resultado na linha correspondente da coluna C3:C18.
Mas qualquer coisa já ajuda.
Desde já agradeço a colaboração da comunidade.
PS: A planilha está com células de fórmula "Bloqueadas" para proteção de dados. Mas está sem senha.PS2: Como solução alternativa tentei apelar para o "CAS Máxima" (programa especializado em calculos complexos) para tentar encontrar o vértice da função plotando o gráfico para (X = 1,1 ~10), mas ele não reconhece a função devido a erros que eu não soube interpretar, devido a minha total falta de experiência com o programa. Não sei se estou fazendo algo errado, com as variáveis já substituídas pelos valores numéricos de hoje a função seria essa:
f (x) := (x ^ (1/(3,1666666666666666666666666666667 + ((((((5,24e189*(x-1))/1217160) ^ (1/0,38685))*18000) - 9e478) / 1,44e479))))
Se alguém tiver experiência com o programa citado ou com qualquer outro que me ajude com esse calculo, já resolveria o problema também.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Cálculos com números acima 1E+308
em Microsoft Office e similares
Postado
@osvaldomp Aqui em casa dá esse erro assim que eu abro a planilha:
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Erro de compilação:
O código desse projeto deve ser atualizado para uso em sistemas de 64 bits. Analise e atualize as instruções Declare e, em seguida, marque-as com o atributo PtrSafe.
---------------------------
OK Ajuda
---------------------------
Alguma ideia do que poderia ser?