dicas excel1

Embed Size (px)

Citation preview

(Terceira vez que encaminho. Se voltar de novo, meu provedor t baleado...) Pessoal, Minha contribuio para o grupo. Segue um documento "html", que contm inmeras dicas de VBA para Excel. Espero que gostem! Foi... ps(*) - Tenho mais, quem quiser, mail-me. Gilson Bentos Encarregado CPD gilson.bentos@... 726-1214 R-7044 ^^^^^^^^^^^^^^^^^^^^^^^~ Se voce j conhece o Excel, ento colecione e utilize as DICAS, sempre renova das, incluidas neste SITE, que esperamos lhe acrescentaro valiosos conhecimen tos. E se voce suspeitava que o EXCEL era incapaz de executar certas tarefas ento esta uma boa oportunidade para que voce teste as solues encontradas e refaa seu trabalho aplicando as novidades que garimpou. As questes abaixo inauguram a seo Dicas e Macetes relativamente ao EXCEL e o (V)isual (B)asic for (A)pplications.Recomendaes :

As questes encaminhadas por e-mail devem ser descritas com mxima clareza. De nossa parte, consideramos estar demonstrando cortesia aquele que nos escreve procurando faze-lo corretamente. Escrever corretamente tem sido, conforme temos observado, a primeira grande barreira. Para contornar essa dificuldade temos trs sugestes a fazer : Rascunhar sua questo antes de ativar o browser, fazer uso de exemplos e subdividir seu problema em questes o 40 (080299Q40)">40. Transcrevendo dados em Multiplas colunas 41. Eliminando Lancamentos em Duplicidade 42. Como referir-se ao texto de uma TextBox 43. Permitindo o Usuario selecionar arquivos aps FileOpen 44. Lendo numeros por extenso 31. Construindo uma ListBox e Recuperando 32. Definindo-se o ltimo elemento 33. Diferena entre as funes IsNumber 34. Somando-se valores em 35. Encontrando-se o valor 36. Solucionando dvidas do 37. Usando o VBA para atribuir nomes 38. Resolvendo um Problema de 39. Selecionando um range desconhecendo-se o ltimo elemento 24. Identificando Numricos, Alfanumricos e Frmulas 25. Usando o Teclado para acionar Rotinas 26. Construindo ListBoxes 27. Selecionando Dados num Range e Formatando 28. Resolvendo uma questo com Edit Replace 29. Partindo de uma Lista, informar o numero de elementos diferentes 30. Usando a Estrutura Select Case para acionar Rotinas 18. Selecionando clulas especiais 19. Criando Menus via VBA que acionam Rotinas 20. Como ler uma frmula sem abrir o Arquivo ? 21. Como identificar via VBA as clulas que contem Comentrios ? 22. Como fazer um Sort e voltar atrs. 23. Como gerar um grfico "experto" 11. Identificando a linha que contem uma CheckBox 12. Obtendo Subtotais dado da e escolhido srie IsNumeric Databases mximo Usurio aos ranges Classificao

13. Obtendo o Diretrio em A1 14. Apontando um rro no uso da funo Sum 15. As vrias formas de obter-se um mesmo dado 16. Contornando problemas em arquivos corrompidos 17. Usando a funo DCount 1. Acrescentando um valor hora atual 2. Incluir um som avisando que a rotina chegou ao fim 3. Acrescentando worksheets aps a ltima 4. Operando com vrios arquivos de forma sequencial 5. Trabalhando com Datas 6. Acesso a Constante declarada em outro Arquivo 7. Somando e impondo condies 8. Eliminando Textos mas mantendo o resto 9. Operando com ranges variveis 10.Selecionando Worksheets a partir de certo ponto

Questo 45 (310100Q45) A Central de Help contribui com Gerentes que esto em apuros com questes de Arredondamento. E um caso muito comum em magazines de departamentos usar-se nos preos de certos produtos da categoria YY o valor 0,99 nas casas decimais. E a pergunta que se faz : Ser que o critrio usado para fixar estes valores tem sido uniforme ? Assim um produto hipottico pertencendo a essa categoria YY com custo de 12,56 e margem de 30% apontaria para um preo final de venda de 16,33. Ao ser no entanto colocado nas prateleiras, como pertence a categoria YY, seu valor inicial de venda igual a 16,33 seria alterado para 15,99 ou 16,99. O problema estabelecer para tal categoria de produtos YY, um critrio nico e uniforme, que fornea como resultado final valores com decimais 0,99. Soluo Sendo C o custo e =roundup(C*(1+m);0)-0,01 Questo 46 (310100Q46) Seria possivel fazer com que o Excel somasse seletivamente os valores de uma couna ? Exemplificando : Numa coluna (b26:b31) com os valores 100, 30,10,110,500,300 quero somar todos os valores abaixo de 50 com os valores acima de 200. Soluo 46 (310100S1Q46) A expresso a seguir resolve seu problema : =Sum(Sumif(b26:b31;{"200"})) O Excel aceita ws.Select end Next ActiveWindow.SelectedSheets.PrintOut End Sub Questo 49 (310100S1Q49) Queremos dividir os valores de uma extensa coluna de numricos por um certo valor.H como faze-lo automticamente ? Soluo 49 (310100S1Q49) Selecione uma clula vazia na planilha que contem a tal lista de numricos Suponhamos que o divisor comum seja 50. Escreva numa clula vazia =50, e acione Enter, Acione Edit Copy, Selecione a regio que contem os valores a serem divididos, Acione Edit Paste Special e selcione o option button Divide, e todos os valores sero divididos por 50 mais de dois p" then False if m a margem, a funo 45 abaixo fornece o (310100S1Q45) resultado pretendido

Questo 50 (310100Q50) Como que o VBA se comporta diante de questes de arredondamento ? Soluo 50 (310100S1Q50) Int(n) retorna Ex: Int(-2,1) retorna -3 o inteiro Int(4,7) mais prximo retona menor que n 4

Round(ValorNumrico,CasasDecimais) Floor e Ceiling agem em Ex: Floor(3,45;1) retorna 3 enquanto que Ceiling(3,45; 1) retorna 4 n\1 retorna Exemplos: 4,6\1 4,5\1 3,5\1 2,6\1 2,5\1 retorna 2 n arredondado para retorna retorna retorna retorna numrico 1) -1) -1) trunca o numrico retorna retorna retorna n retorna retorna retorna o

sentido inteiro mais

contrrio prximo 5 4 4 3

Converte o FIXED(1234,567; FIXED(1234,567; FIXED(-1234,567; FIXED(44,332) equals "44,33" Trunc funo TRUNC(8,9) TRUNC(-8,9) TRUNC(PI()) que

em

texto "1234,6" "1230" "-1230" parte inteira 8 -8 3

respeitando

a

A proc abaixo faz os testes : Sub Dim n MsgBox MsgBox End Sub Teste( = "Int "n\1 InputBox("Entre () retornar retornar com : : " um " & & ) n numrico") Int(n) n\1

Questo 51 (310100Q51) Inclu um boto(CommandButton1) na minha Sheet mas quero esconde-lo por ora. O comando abaixo no faz o que eu preciso. Como corrigir meu erro ? ActiveSheet.Shapes("CommandButton1"). Selection.Hide Soluo 51 (310100S1Q51) Use ActiveSheets.Shape("CommandButton1").Visible Questo 52 (310100Q52) Atribui ao range A1:A10 o nome "Despesas". Ocorre que preciso incluir mais dados. Ocuparei ento a clula a11. Em consequencia, o nome "Despesas" passa a no ter mais sentido. Como reaproveitar o antigo nome ("Despesas") para indicar o novo range A1:A11 Soluo 52 (310100S1Q52) Sub''''Despesas ''''Acrescentamos dados na celula

Select

=

False

AdicionandoNovaCelulaAoRange(o A11 e nome inicial do range com o nome

)Range

Range("A1:A10").Name

=renomeamos o novo

"Despesas"antigo.

Union(Range("Despesas"),Range("A11")).Name End Sub Questo 53 (310100Q53)

=

"Despesas"

Agradecemos esclarecer-nos com mais detalhes dos problemas que envolvem as datas bsicas adotadas pela Microsoft. Soluo 53 (310100S1Q53) Excel Os usurios de PCs sabem que o Excel usa a data base : 01 de Janeiro de 1900 e determina para esta data o valor serial (DateValue) igual a 1. No caso dos usurios do MacIntosh a data base diferente : 02 de Janeiro de 1904 cujo valor serial 1. Mas neste caso considera tambem que a data 01 de Janeiro de 1904 tem o valor serial igual a Zero. Caberia a pergunta : Porque a M$ usa o ano de 1900 como ano base? E a resposta : Para manter compatibilidade com o Lotus 123 (a M$ entendeu que manter o rro seria menos prejudicial que tentar conserta-lo). Mas da decorrem outros problemas. Assume vlida a data calendrio 29 de Fevereiro de 1900 e devolve para esta data o valor serial 60 (=DateValue ("29/2/1900")). Desta forma obteremos resultados com rros se calculamos por exemplo o nmero de dias entre 15 de maro de 1900 e 15 de janeiro de 1900. Se tentamos calcular os dias decorridos entre 2 de dezembro de 1898 e 7 de dezembro de 1999 tambem obtemos rro tendo em vista que a data 2 de dezembro de 1898 anterior a data base (1900). E datas anteriores a data base no Excel so tratadas como texto, e no podemos realizar a subtrao envolvendo simultneamente datas e texto. Finalmente, se um usurio de PCs (ano base 1900) abrir seus arquivos Excel(*.xls) num MacIntosh (ano base 1904), os mesmos sero abertos com a data base do MacIntosh (1904). A recproca verdadeira. Nesses casos em alguns clculos, dependendo das datas consideradas, constataremos diferenas de 4 anos e um dia. Access Da mesma forma o Access usa a data base 31 de dezembro de 1899 para compatibilizar-se com o Lotus 123 Funes Financeiras ACCRINT, COUPDAYBS, COUPDAYS, COUPDAYSNC, COUPPCD, COUPNCD, DURATION, MDURATION, ODDFPRICE, ODDFYIELD, PRICE,and YELD

As funes financeiras acima, fazem parte do pacote "Analysis ToolPack" da Microsoft e se encontram na biblioteca de funes do EXCEL. Se estivermos diante de um negcio onde a data 29 de Fevereiro de 2000 a data do primeiro pagamento de juros, (fato difcil de ocorrer, mas no impossvel) ento o uso destas funes acarretaro um rro que espera-se seja corrigido nas prximas verses.Questo 54 (14022000Q54)

O trabalho que eu estou desenvolvendo cria (conforme a situao) novas planilhas e posteriormente usa essas tais planilhas criadas via programa. Como encontrar ou saber se determinada planilha se encontra entre as demais ?Soluo 54 (14022000S1Q54) Suponhamos que voce esteja procurando pela criada pelo programa. As instrues abaixo resolvem seu problema Sub On error Worksheets("Asterix").Select Exit Ignoro: MsgBox "Essa End Sub Questo 55 (14022000Q55) planilha denominada "Asterix" ) Ignoro Sub planilha no existe"

ProcurandoFantasmas( GoTo

Como introduzir nas clulas valores tais como "00001" , "00002" , "00003" etc... Minhas tentativas tem sido frustradas pois o Excel coloca "1" , 2" , "3" sem os zeros que para o meu caso so importantes. Soluo 55 (14022000S1Q55) Tente a instruo : Range("MeuRange").Value = Format(Array(x,y) ; "@") Questo 56 (14022000Q56) Como posso alterar o diretrio de C:\My Documents\ para o diretrio que na verdade contem a minha aplicao ? Soluo 56 (14022000Q56) A instruo CHDir ir alterar o diretrio mas o drive que estiver ativo permanece inalterado A instruo CHDrive ir alterar o drive que estiver ativo A instruo ThisWorkbook.Path lhe devolve o path do workbook que contem a macro ou procedure. A instruo ActiveWorkbook.Path lhe devolve o path do workbook que estiver aberto. Havendo vrios workbooks abertos lhe devolver o path do workbook aberto que encabear a lista. Questo 57 (14022000Q57) A partir de determinada instruo, desejo interromper a execuo da minha procedure. Como faze-lo ? Soluo 57 (14022000S1Q57) A instruo STOP coloca um "freio" (break) na sua procedure. As instrues que se seguem a essa instruo ficam portanto em suspenso. A instruo END coloca um ponto final na sua procedure. Mas preciso cuidado. Se voce declarou variveis globais as mesmas sero resetadas quando o ponteiro do programa passar pela instruo END. Para no haver dvida declare suas variveis como Static (neste caso no haver modificao de valores quer voce use Stop ou End Para interromper uma Procedure recomendamos usar o modelo abaixo Sub Faa algo MsgBox ("Pare Agora Continue seu End Sub Questo 58 (14022000Q58) Escrev um texto explicativo para o usurio do meu programa. Para tanto, usei o Notepad (Windows98). Salvei o referido texto (arquivo) como "Texto Explicativo.txt" . Como posso abrir o referido arquivo a partir do Excel permitindo que o usurio tenha livre acesso as minhas informaes ? Soluo 58 (14022000S1Q58) : ou ProcedureModelo( ) declare Variveis e insira instrues clique OK para continuar", vbOkCancel, "Alerta") trabalho : Mais instrues

Antes de entrarmos no mrito da procedure, devo alerta-lo para alterar o nome do seu arquivo. Use "Explica.txt" que tem apenas 7 caracteres. Supondo que este seu arquivo texto est no diretrio C:\Meus Documentos\, a procedure abaixo resolve a questo. Sub Dim f Shell End Sub Exibindo_O_Notepad( f = "Notepad "c:\Meus " & f, as ) string Documentos\Explica.txt" vbNormalFocus

Questo 40 (080299Q40) Numa Planilha Excel tenho anotado regularmente Nomes, SobreNomes e Telefones de amigos e Clientes(sobretudo Clientes). Usei a Coluna B para fazer estas anotaes. Se uma pessoa tem mais de um telefone, eu repito o seu nome na linha de baixo com o respectivo telefone.

Ocorre que quando h uma alterao qualquer (quando um Cliente altera seu Sobrenome por exemplo ou quando h alteraes no nmero do telefone, ou quando um Cliente falece, se ausenta ou muda de Estado) sou obrigado a fazer um trabalho extra para colocar em dia essa minha coluna B, o que ocorre com frequncia. Como essa lista j est muito longa, pergunto se o VBA me faria a fineza de colocar em colunas diferentes a minha lista de Nomes SobreNomes e Telefones. Desde j agradeo por antecipao vossa atenao. Soluo 40 (080299S1Q40) Observao: Os leitores que acompanham essa seo devem observar que na maioria das vezes simplificamos a descrio do problema. A questo acima poderia ser resumida na frase : "Como colocar em colunas diferentes Nomes, SobreNomes e Telefones dispostos inicialmente numa nica coluna ?" Contudo, decidimos apresenta-la na ntegra para mostrar a ntima relao do VBA com os problemas do dia a dia. Selecione a sua lista(coluna B) e acione a Macro abaixo e voce ter separado em colunas diferentes Nomes, SobreNomes e Telefones(Obs: A Macro funcionar desde que at mesmo para os amigos ntimos voce tenha anotados Nome e SobreNome) Sub For Each Celula.TextToColumns Next End Sub Celula Destination:=Celula, In ReformulaListaDeNomes() Selection OtherChar:="-"

Questo 41 (080299Q41) Aps recebermos uma solicitao por telefone, codificamos o pedido lanando um cdigo na coluna A(Excel/97). Numa segunda oportunidade o Cliente confirma o pedido e informa-se quanto dever pagar, inclusive impostos e frete. Se quem o atende no momento da confirmao for o mesmo vendedor que o atendeu da primeira vez, provavelmente nada ocorrer de errado. Porem muitas vezes, quem o atende no o mesmo vendedor. Em consequencia, possivel que na nossa relao haja lanamentos (codigos) em duplicidade, fato que nos leva a ter prejuizo. Como a relao de pedidos (codigos) extensa, consultamos essa Central de Help sobre a possibilidade de eliminarmos da nossa relao, via Macro, os cdigos lanados em duplicidade. Ficamos gratos pelo Help Soluo 41 (080299S1Q41) Observao: Os leitores que acompanham essa seo devem observar que na maioria das vezes simplificamos a descrio do problema. A questo acima poderia ser resumida na frase : "Como eliminar numa mesma coluna os dados repetidos". Contudo, decidimos apresenta-la na ntegra para mostrar a ntima relao do VBA com os problemas correntes do dia a dia. Sub EliminaDuplicidades( ) Set rfonte = Application.InputBox("Informe Qual o Range?", _ Title:="Range(ColunaA)", Type:=8) rfonte.Select Selection.Copy Sheets("Sheet2").Select Range("a1").Select ActiveSheet.Paste Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, _ Header:=xlGuess, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom For Each c In Selection.Cells If c.Value = c.Offset(1, 0).Value Then c.Offset(1, 0).Delete Shift:=xlUp End If Next End Sub Questo 42 (080299Q42) Quero aplicar em Sheet1(que eu chamei "Minha Planilha") uma TextBox (vou nomea-la MeuTeste) e me referir a um texto ("Estou me Apresentando") no interior do objeto criado. Pergunto como faze-lo ?

Soluo 42 (080299S1Q42) 1.Na planilha Minha Planilha, ative ToolBar Control ToolBox, entre em DesignMode e aplique o objeto TextBox 2.Em Properties troque Name TextBox1 por Name MeuTeste. 3.Encerre DesignMode e ative o VBE Project Explorer 4.Clique duplo em Sheet1(Minha Planilha) 5.Escreva a macro abaixo e acione F5 Sub Sheets("Minha "Estou End Sub UsandoTextBoxes( Planilha").MeuTeste.Text me = ) _ Apresentando"

Questo 43 (080299Q43) possivel escrever-se uma Macro que abra no Drive A:\ a janela "File Open" para que o Usurio escolha um dentre os arquivos do tipo .xls disponveis ? E se o Usurio desistir da tarefa teclando Cancel ? Como proceder ? Soluo 43 (080299S1Q43) Sub ChDir "A:\" FileToOpen Application.GetOpenFilename(filefilter:="Excel MultiSelect:=True) z = MsgBox Select Case MsgBox "Voce Case MsgBox "Voce Fez End End Sub CapturandoFileName() = Files(*.xls),", _ _

Case Teclou uma

TypeName(FileToOpen) z z "Boolean" Cancel" "Variant()" Seleo Simples" Select

Questo 44(110299Q44) Usando-se o Excel / VBA seria possvel escrever-se uma funo que aps ler um numero na forma tradicional, o converta para forma "por extenso" ? Essa funo em outras palavras, dever ser capaz de ler um valor qualquer inteiro (ex: 4215) e escreve-lo por extenso (ex:"Quatro Mil Duzentos e Quinze"). Isso possvel ? Ficamos gratos pelo Help. Soluo 44 (110299S1Q44) Function Escr(n) Unid = Array("", "Um", "Dois", "Trs", "Quatro", "Cinco", _ "Seis", "Sete", "Oito", "Nove", "Dez", "Onze", "Doze", _ "Treze", "Quatorze", "Quinze", uot;, 1) = 0 Then Escr = Application.Substitute(Escr, "Vinte", "Vinte e ") End If End If End If End If If Num Mod 10 0 Then If InStr(1, Escr, "Vinte", 1) = 0 Then If InStr(1, Escr, "Trinta", 1) > 0 Then If InStr(1, Escr, "enta", 1) = 0 Then Escr = Application.Substitute(Escr, "Trinta", "Trinta e ")

End If End If End If End If If Num Mod 100 0 Then If InStr(1, Escr, "ento", 1) > 0 Then Escr = Application.Substitute(Escr, "Cento", "Cento e ") End If End If If Num Mod 100 0 Then If InStr(1, Escr, "entos", 1) > 0 Then Escr = Application.Substitute(Escr, "entos", "entos e ") End If End If If Num Mod 1000 0 Then If (Num - (Num \ 1000) * 1000) 0 Then Escr = Application.Substitute(Escr, "Mil", "Mil e ") End If End If End If End Function

Questo 31(010299Q31) Preciso construir uma ListBox com 4 Times (Flamengo, Botafogo, Fluminense e Vasco). Isto posto, ao selecionar manualmente quaisquer dos 4 times quero exibir uma mensagem com o Time escolhido. Como proceder ? Soluo 31 (010299S1Q31) Sub ExibindoOTimeEscolhido() 'MS Office95/97 Dim LB As ListBox Dim ListBoxDialog As DialogSheet Set ListBoxDialog = ThisWorkbook.DialogSheets("ListBoxDialog") Set LB = ListBoxDialog.ListBoxes("LB") LB.RemoveAllItems Worksheets(1).Select With LB .AddItem Index:=1, Text:="Flamengo" .AddItem Index:=2, Text:="Botafogo" .AddItem Index:=3, Text:="Fluminense" .AddItem Index:=4, Text:="Vasco" End With ListBoxOK = DialogSheets("ListBoxDialog").Show If Not ListBoxOK Then Exit Sub x = LB.ListIndex MsgBox "Voce Selecionou o Item: " & LB.ListIndex MsgBox "Voce Selecionou o Time: " & LB.List(x) End Sub

Questo 32 (010299Q32) Com muita frequncia preciso calcular a mdia e o desvio padro de sries. Aps o ltimo dado, costumo saltar duas linhas, escrever 2 labels : "Media : ", e na linha de baixo "Desvio: ". Quanto aos valores numricos da Mdia e do Desvio, escrevo-os na coluna B obedecendo evidentemente a direo dos Labels mencionados. Ocorre que minhas sries tem um numero varivel de elementos, de modo que sem saber

onde cair o ultimo elemento da srie, tambem no posso indicar onde ficaro os referidos Labels. H como contornar o problema ? Soluo 32 (010299S1Q32) Seu problema gira em torno do ltimo elemento da srie. Ento temos que defini-lo. Vamos supor que sua srie esteja na coluna A, a partir de a4 e que no haja "brancos". Sub ExibindoOSumrio() Dim ultElemento As Long ultElemento = Range("a4").End(xlDown).Row 'Inserindo os Labels: Range("A" & ultElemento + 2).Value = "Media: " Range("A" & ultElemento + 3).Value = "Desvio: " 'Colocando as Formulas: Range("B" & ultElemento + 2).Formula = _ "=Average(A4:A" & ultElemento & ")" Range("B" & ultElemento + 3).Formula = _ "=StDev(A4:A" & ultElemento & ")" End Sub

Questo 33 (010299Q33) Seria possivel explicar-me a diferena entre as funes IsNumber e IsNumeric ?

Soluo 33 (010299S1Q33) IsNumeric uma funo que opera somente no ambiente VBA. J IsNumber uma funo que se encontra na biblioteca do Excel. Ambas fazem no entanto o mesmo servio : Indicam True ou False caso se trate ou no de um numrico

Questo 34 (010299Q34) Tenho uma coluna de valores numricos. No h "vazios". Numa coluna diferente somo esses valores usando =Sum(.....) obtendo uma resposta R = Sum(...). Agora fao uma filtragem usando AutoFilter. Ocorre que o valor R no recalculado para refletir a soma dos elementos que foram selecionados. Como proceder para termos sempre renovado o valor da soma dos elementos, antes ou depois da filtragem ?

Soluo 34 (010299S1Q34) No seu caso particular, abandone a funo Sum e passe a usar a funo =Subtotal( 9; Ax:Ay) onde x e y correspondem ao incio e fim da srie antes da filtragem. Supondo sua srie de valores no range A5:A20 e no range A4 o Label da Srie, sua frmula ser : =Subtotal( 9;A5:A20)

Questo 35 (010299Q35) Tenho duas colunas A e B de valores numricos. Quero escrever um programa que me calcule na coluna C adjacente(que est vazia) e nas linhas correspondentes aos valores dados, o valor do Mximo. Exemplificando : se meus nicos valores nas colunas A e B forem 12 e 45 respectivamente, quero escrever um programa que coloque o valor 45 na coluna C.

Soluo 35 (010299S1Q35) Escrevendo um programa que identifique em c1, o mximo entre dois valores a1 e b1.

Sub ExibeValorMaximo() Cells(1, 3).Formula = _ Application.Max(Range(Cells(1, 1), Cells(1, 2))) End Sub Se voce tem vrios valores nas colunas A e B, o programa abaixo preencher a coluna C com os valores mximos encontrados. Sub ExibeValorMaximo() Cells(1, 1).CurrentRegion.Select For linha = 1 To Selection.Rows.Count Cells(linha, 3).Formula = _ Application.Max(Range(Cells(linha, 1), Cells(linha, 2))) Next End Sub Questo 36 (010299Q36) Tenho valores numericos no range c5:c10. Em c11 tenho um valor X que no exatamente a soma (c5:c10). Se a diferena entre o valor exato (sum(c5:c10)) e X for menor que 1, no h nada a fazer, caso contrrio, quero que a rotina escreva em d7 a palavra "ERRO" Para chegar a soluo desse problema, que no apresenta dificuldades maiores, usei a expresso : "=If(sum(c5:c10)-c11200" e criterio2 "