Sie sind auf Seite 1von 23

(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;{"<50"; ">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 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) <= 100 Then If InStr(1, Escr, "Mil", 1) > 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)-c11<1, "", "ERRO")" Ocorre que a frmula acima contem erros, Agradeo Central de Help em Excel / VBA a ajuda. razo pela qual o programa no roda.

Soluo 36 (010299S1Q36) O problema da sua frmula reside na utilizao das aspas simples. Portanto substitua na sua frmula as aspas simples por aspas duplas : "=If(sum(c5:c10)-c11<1, """", ""ERRO"")"

Questo 37 (010299Q37) Quero atribuir nomes a dois ranges. Como proceder usando-se o VBA ?

Soluo 37 (010299S1Q37) Suponhamos que seus ranges sejam repectivamente b4:c4 e b5:c5 Sub AtribuindoNomesAosRanges( ) Worksheets(1).Range(Cells(4, 2), Cells(4, 3)).Select set Selecao1 = Selection ActiveWorkbook.Names.Add Name:="MeuRange1", _ RefersTo:=Selecao1 Worksheets(1).Range(Cells(5, 2), Cells(5, 3)).Select set Selecao2 = Selection ActiveWorkbook.Names.Add Name:="MeuRange2", _ RefersTo:=Selecao2 End Sub

Questo 38 (010299Q38) Trabalhando em alguns colegios, perco muito tempo ao ter que classiicar as notas dos meus alunos. Cada uma das minhas classes tem cerca de 30 a 40 alunos, e as notas, exigencia da direo, devem ser fracionarias com uma casa decimal. Preciso ento comparar cada nota com as demais estabelecendo a classificao

( claro que notas repetidas tem a mesma classificao). A titulo de exemplo, transcrevo abaixo, as notas e sua classificao final. Notas: 2,3; 3,4; 0,0; 5,6; 6,1; 2,5; 2,5; 3,5; 3,7 Classificao: 8; 5; 9; 2; 1; 7; 7; 4; 3 Observando-se as duas linhas ao mesmo tempo, indiquei que quem tirou 6,1 ficou no primeiro lugar, quem tirou 5,6 ficou em segundo lugar, quem tirou 2,5 ficou em stimo lugar, etc... Quando a lista de notas grande, a classificao fica penosa,difcil, sujeita a erros. J recorri a outras fontes sem resultados. Teria a Central de Help em Excel / VBA como solucionar este caso ?

Soluo 38 (010299S1Q38) Tudo o que se indicar abaixo, a ttulo de exemplo, se aplica integralmente a qualquer range de dados. (soluo interativa) 1.Escreva suas 9 notas no range b6:b14 2.Escreva em c6 a frmula : {=sum(if(b6>=$b$6:$b$14;1))} e arraste-a at c14 3.Em c3 escreva =Min($c$6:$c$14) 4.Em d6 escreva a frmula =b6-Min($c$6:$c$14) e arraste at d14 5.Em e6 escreva a formula {=sum(if(d6<=$d$6:$d$14;1))} e arraste at e14 Os valores no range e6:e14 correspondero classificao sem o perigo de erros. Obs : No se esquea do Ctrl Shift Enter Caso V.Sa queira fazer um programa, leve em conta as seguintes observaes : 1.O range b6:bn tem as caractersticas de um range dinmico, capaz de espichar ou de encolher dependendo do numero de notas lanadas. O numero de notas lanadas por sua vez tambem no igual ao de alunos de mesma classe, pois pode ocorrer faltas aos exames. 2.Para resolver o problema do range dinmico : 1)em sheet1 selecione os dados na coluna b (b6:bn) 2)<Insert <Name <Define Name: RangeDinamico Refers to: =Offset(Sheet1!$b$6;0;0;CountA(Sheet1!$B:$B);1)) <Add <OK 3.Em module1 escreva a rotina : Sub ClassificandoNotas( ) Worksheets(1).Select RangeDinamico.Select ....Neste ponto escreva o que for necessrio. End

Questo 39 (010299Q39) Na coluna B a partir de b5, tenho valores numricos, textos e vazios(clulas que no foram preenchidas) se alternando. Quero selecionar nessa coluna B tudo que estiver entre b5 e a ltima clula preenchida, sobre a qual no tenho detalhes. Isto possvel? Se positivo, peo a Central de Help em Excel / VBA que me instrua a respeito. Desde j fico grato pela colaborao.

Soluo 39 (010299S1Q39) Sub SelecionandoNaCol( ) ...........iniciando seu programa Range("b5", Cells(Cells.SpecialCells(xlLastCell).Row, 2)).Select ............. End

Questo 24 (190199Q24) Na minha Folha de Dados, quero identificar se determinado elemento numrico ou alfanumrico. Como proceder ? Como saber tambem se deteminada clula contem uma frmula ? Soluo 24 (190199S1Q24) Respondendo a primeira pergunta, introduza o segmento abaixo no seu programa Cells(x,y).Select If IsNumeric(ActiveCell) = True Then MsgBox "Celula contendo Numerico" Else MsgBox "Celula contendo Dado no Numrico" End If Soluo 24 (190199S2Q24) Respondendo a segunda pergunta, introduza o segmento abaixo no seu programa Cells(x,y).Select If Instr(ActiveCell, "=") <> 0 Then MsgBox "Esta Celula contem uma Frmula" MsgBox ActiveCell.Address 'Localizando a Frmula End If

Questo 25 (190199Q25) Quero acionar uma Rotina em VBA usando as teclas Alt + a. Isso possvel ?

Soluo 25 (190199S1Q25) Sim, possvel. Na rotina Trap( ) voce deve indicar que combinao de teclas usar para acionar "ExecutoARotinaOK" Transcreva as rotinas abaixo e na Planilha (Sheet1) por exemplo acione Alt + a (Mantendo a tecla Alt calcada, acione a tecla a) Sub Trap() Worksheets(1).Select Application.OnKey "%a", "ExecutoARotinaOK" End Sub Sub ExecutoARotinaOK() MsgBox "OK" End Sub

Questo 26 (190199Q26) Quero construir uma ListBox contendo os nomes dos estados do Brasil. Como Proceder ? Soluo 26 (190199S1Q26) Escreva os nomes dos Estados numa nica coluna (exemplo "a3:a26" ) , em seguida faa : <View; <Toolbars; <Forms; <ListBoxes ><Format Control ; <Input Range: a3:a26 <Cell Link : "A1" (escolha A1 para Cell Link) Notas : < (este sinal indica que voce est acionando o boto esquerdo do mouse) > (este sinal indica que voce est acionando o boto direito do mouse)

Na caixa de dilogo Input Range escreva a2:a25 Na caixa de dilogo Cell Link escreva A1

Questo 27 (190199Q27) A minha Planilha contem valores numricos no range a5:a300. Quero testar algumas rotinas tomando por base os valores iguais ou acima de 500 Primeiro : Quero que esses valores especiais mudem de cor e sejam formatados com duas casas decimais Segundo : No s mudem de cor mas assumam o formato ITALICO e fiquem em Negrito Soluo 27 (190199S1Q27) Respondendo a Primeira pergunta Option Explicit 'Declare todas as Variveis Const Blue = 5 'Usando Constantes em Visual Basic Const Red = 3 Const Green = 4 Const Yellow = 6 Sub MudandoDeCor( ) Dim CellObject as Object 'Definindo a varivel CellObject ActiveSheet.Range("a5:a300").Select 'Selecionando o Range For each CellObject in Selection If CellObject.Value >=500 Then CellObject.NumberFormat = "0.00" CellObject.Font.ColorIndex = 7 End if Next End Sub

Respondendo a Segunda pergunta


Option Explicit Const Blue = 5 Const Red = 3 Const Green = 4 Const Yellow = 6 Sub xMudandoDeCor( ) Dim CellObject as Object ActiveSheet.Range("a5:a300").Select For each CellObject in Selection If CellObject.Value >=500 Then With CellObject.Font .ColorIndex = 7 .Bold = True .Italic = True End With End If Next End Sub

Questo 28 (190199Q28) Originalmente na minha Planilha, deixamos em branco grande quantidade de dados . Para indicar referidos claros usei (*). Agora quero que tudo que for (*) seja transformado em Zero. Usei <Edit <Replace Find What: * Replace With: 0 e o que ocorreu que a planilha inteira foi zerada porque o Excel entendeu que quando escrevi "*" estava indicando "qualquer dado". Como proceder nestes casos ? Soluo 28 (190199S1Q28)

Faa o seguinte : Edit Replace Find What: * Replace With: ~ Search By: Columns Replace: All

Questo 29 (190199Q29) No Range b5:b12 tenho os seguintes valores er Case "btn1" myRoutine = Application.Run("Chamada1") Case "btn2" myRoutine = Application.Run("Chamada2") End Select End Sub Sub Chamada1() MsgBox "SSS" End Sub Sub Chamada2() MsgBox "XXX" End Sub Notas: Ao introduzir objetos numa Planilha, o Excel lhes aplica nomes. Voce deve ter o cuidado de trocar esses nomes para btn1 e btn2. Atribua (Assign) a Macro QuemChamou() aos dois botes btn1 e btn2 Ativando btn1 ou btn2 as macros Chamada1() ou Chamada2() sero executadas

Questo 18 (110199Q18) Minha Planilha("Informx") no range a1:k5000 contem celulas com informaes importantes que eu costumo destacar alterando-lhes a cor do fundo. "Pinto-as" de vermelho. Estas informaes esto "espalhadas" de uma forma desordenada em linhas e colunas no range citado. H linhas com uma, ou mais de uma clula com interior vermelho, assim como h linhas sem que nenhuma clula esteja demarcada. O uso das facilidades "AutoFilter ou Advanced Filter" pouco me acrescentam para investigar que clulas esto pintadas de vermelho. Como resolver o impasse para mostrar-me apenas as linhas que possuem clulas marcadas "pintadas" de vermelho? Soluo 18 (110199S1Q18) Sub MostrandoCelulasEmFundoVermelho( ) Dim MeuRange as Range Dim Celula as Range, Linha as Range Worksheets("Informx").Select 'A variavel MeuRange abaixo est apontando para o range 'a1:k5000 Set MeuRange = ActiveSheet.Range("a1:k5000") 'Acelerando a pesquisa desconectando a atualizao da Tela Application.ScreenUpdating = False 'Escondendo as linhas do range a1:k5000 MeuRange.EntireRow.Hidden = True 'Iniciando a pesquisa em cada linha do range MeuRange For Each mLinha In MeuRange.Rows 'Iniciando a pesquisa em cada celula de uma mesma linha For Each Celula In mLinha.Cells If Celula.Interior.ColorIndex = 6 Then Celula.EntireRow.Hidden = False Exit For End If Next Next 'Desfazendo a Atualizao da Tela

Application.ScreenUpdating = True End Sub

Questo 19 (110199Q19) Como criar Menus em VBA de tal forma que eu possa acionar minhas duas Rotinas (uma de Importao e outra de Exportao)

Soluo 19 (110199S1Q19) Sub IntroduzMenusESubMenus() Set MBarraDeMenus = CommandBars.ActiveMenuBar '===As instrues abaixo introduzem novo Menu na '===Barra de Menus : "Importao /Exportao" Set novoMenu = MBarraDeMenus.Controls.Add _ (Type:=msoControlPopup, Temporary:=True) novoMenu.Caption = "Importao/Exportao" '===Criando os SubMenus Controle1 e Controle2: Set Controle1 = novoMenu.CommandBar.Controls.Add _ (Type:=msoControlButton, Id:=1) Set Controle2 = novoMenu.CommandBar.Controls.Add _ (Type:=msoControlButton, Id:=1) '===Agora temos o SubMenu "Importao" Controle1.Caption = "Importao" Controle1.OnAction = "ExecutaRotina1" '===Agora temos o SubMenu "Exportao" Controle2.Caption = "Exportao" Controle2.OnAction = "ExecutaRotina2" End Sub Sub ExecutaRotina1() '===Introduza o cdigo MsgBox "Executando a Rotina de Importao" End Sub Sub ExecutaRotina2() '===Introduza o cdigo MsgBox "Executando a Rotina de Exportao" End Sub

Questo 20 (110199Q20) O arquivo AA.xls; Sheet1 contem uma frmula em A11 possivel ler esta frmula sem que eu abra o referido arquivo ? Soluo 20 (110199S1Q20) Sim possivel. Faa : Sub LendoSemAbrir( ) Range("A11").Formula = "=[AA.xls]" & "Sheet1" & "!A1" End Sub

Questo 21 (110199Q21) Em determinada clula da minha Planilha h Comentrios. Pergunto como posso identificar se uma celula contem ou no Comentrios ?

Soluo 21 (110199S1Q21) Sub VeComentario() On Error Resume Next Set Com = ActiveCell.Comment If Com Is Nothing Then MsgBox "No h Comentrios", vbExclamation Else MsgBox "O comentrio :" & Com.Text, vbExclamation End If End Sub

Questo 22 (110199Q22) Minha Coluna C contem valores numricos inteiros. Preciso fazer um Sort nessa Coluna e mais tarde voltar atrs, desfazendo esse Sort. Ativando o Recorder, Sorteando a Coluna de Dados e aplicando Undo a Macro no se completa. Como resolver o problema usando o VBA ? Soluo 22 (110199S1Q22) Estamos supondo seus dados no range C2:Cn Adicione a Coluna Dummie B adjacente sua Coluna de dados. Essa coluna B dever conter a srie de valores 1,2,3,4,5...etc no range B2:Bn Selecione as colunas B:C e execute a macro abaixo que prescinde Da funo UNDO. Sub SortDesfazSort( ) Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("B2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom '[insira seu cdigo complementar] Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom End Sub

Questo 23 (110199Q23) Minha coluna A Range("a1:an") contem valores das cotaes de determinada Ao. Quero traar um grfico linear de tal forma que quando o valor da ao cair a linha deve ficar vermelha, e quando a ao subir a linha deve ficar verde. Soluo 23 (110199S1Q23) Sub ColorLine() ActiveSheet.ChartObjects("Chart 1").Activate AChart = ActiveChart.SeriesCollection(1).Values For i = 2 To ActiveChart.SeriesCollection(1).Points.Count With ActiveChart.SeriesCollection(1).Points(i).Border If AChart(i) >= AChart(i - 1) Then .Color = RGB(0, 255, 0) Else .Color = RGB(255, 0, 0) End If End With Next End Sub

Questo 11(040199Q11): Quero preparar para o meu Cliente uma Worksheet com vrias CheckBoxes. Para deflagrar a tarefa A, ele precisar ativar as CheckBoxes (x, z e w) Para deflagrar a tarefa B, ele precisar ativar as CheckBoxes (s e g) e assim por diante. Pergunta : possvel identificar a linha correspondente a uma CheckBox que acabou de ser ativada ? Soluo 11(040199S1Q11): Sim possvel. Tente a macro abaixo: Sub Qual_Linha() Linha = ActiveSheet.CheckBoxes(Application.Caller).TopLeftCell.Row MsgBox "Voce Selecionou a CheckBox da Linha : " & _ Linha, vbExclamation End Sub

Questo 12 (040199Q12) Minha planilha contem duas colunas adjacentes. Uma coluna contem cdigos. A outra coluna contem Valores em Reais. No h linhas em branco. Os cdigos diferem no nmero de caracteres. Alem disso h cdigos repetidos, mas no possvel dizer a priori quantos cdigos diferentes h, nem quantos elementos h relativamente a cada cdigo. possvel programar-se a obteno de subtotais ? H trs respostas possveis para sua questo. O numero de caracteres do cdigo no relevante. O que importa que cdigos iguais pertencentes ao mesmo grupo formem blocos. Aplicar um Data Sort na sua tabela deve ser ento o primeiro passo. Soluo 12 (040199S1Q12) Mostrando a Tabela Se voce quer obter Subtotais relativamente a cada grupo de cdigos e um Total Geral escreva : .Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2) Soluo 12 (040199S2Q12) Escondendo a Tabela Se voce quer mostrar apenas os Subtotais por grupo de cdigos e um Total Geral relativamente a soma do conjunto escreva : .Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2) .Parent.Outline.ShowLevels RowLevels:=2 Soluo 12 (040199S3Q12) Escondendo a Tabela Se voce quer obter somente um SubTotal relativamente ao conjunto, sem levar em conta os cdigos escreva : .Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2) .Parent.Outline.ShowLevels RowLevels:=1 Imaginemos que na sua tabela (na Sheet1), as clulas B4 e C4 contenha os Labels (Cdigo, Valor em Reais) e os demais dados estejam no range B5:Cn (onde n indeterminado). A rotina abaixo lhe servir de guia : Sub TestandoSubTotais() Worksheets(1).Activate Cells(4, 2).Select With Worksheets(1).Cells(4, 2).CurrentRegion .Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2)

End With End Sub

Questo 13 (040199Q13) Como fazer com que a clula A1 apresente o meu diretrio ? Soluo 13 (040199S1Q13) possivel escrever : NomeAnterior = "C:\MeuDIR\OLDFILE" NomeAtual = "C:\SeuDIR\NEWFILE" Name NomeAnterior As NomeAtual ' Move o arquivo e Renomeia Respondendo sua questo : Sub testePath() x = CurDir("C") Cells(1, 1).Value = x 'retornar C:\MyDocuments MsgBox x, vbExclamation End Sub

Questo 14 (040199Q14) Quero somar os valores constantes do range C3:C27800 e obter o resultado na clula C2. Usei a expresso abaixo, mas no obtive sucesso. Onde est o meu rro ? Range("c2").Value = Application.WorksheetFunction.Sum("c3:c27800") Soluo 14 (040199S1Q14) Modifique sua expresso para : Range("c2").Value = Application. WorksheetFunction.Sum(Range("c3:c27800"))

Questo 15 (040199Q15) Como obter os valores: (a) 1,5 escrito como texto em a10 (alinhado esquerda) (b) "1,5" entre aspas duplas em a11 (c) 1,5 escrito como valor numrico em a12 (alinhado direita) (d) =1,5 escrito como frmula em a13

Soluo 15 (040199S1Q15) 1.Usamos o caracter (,) como separador de casas decimais(Windows\Regional Settings como nosso equipamento est configurado). 2.Quando se escreve 1.5 em VBA obtem-se o numrico 1,5 em EXCEL Cells(n,1).Select 'Substitua n por 10,11,12,13 em cada um dos casos ActiveCell.Value = X Onde : (a) n = 10, X = "1,5" (b) n = 11, X = " ""1,5"" " (c) n = 12, X = "1.5" ou X = 1.5 (d) n = 13, X = "=1.5"

Questo 16 (040199Q16)

Provavelmente (cometi algum rro) perdi meu trabalho. No consigo saber quais eram as Sheets que o mesmo continha. possivel usar o Windows Explorer ? H algum modo para contornar essa situao ? Soluo 16 (040199S1Q16) possvel, mas voce no encontrar no Windows Explorer Properties as informaes que precisa. Tente no entanto : Com File Open aponte para o arquivo corrompido selecionando-o sem tentar abri-lo. Com o Mouse direito ative "Properties", o Excel deflagra uma caixa de dilogo com 5 tabs. Ative a tab "Contents" e voce ver as sheets e dialogSheets do arquivo corrompido.

Questo 17 (040199Q17) Preciso saber quantos valores h nas colunas A(range(a1:a65)), B(range(b1:b100)) e na coluna C (range(c1:c185)) que satisfaam a condio : Maiores que 50. No tocante aos ranges, dou preferncia a frmulas que usem indices.

Soluo 17 (040199S1Q17) A funo Dcount pede trs argumentos : Range, Field e Criteria. Como h preferncia por expresses com ndices, sugerimos usar tambem a ont> Selecione uma clula qualquer da planilha e escreva =NovoTempo("00:00:05") Soluo 2(231298S2Q1): Se voce quiser acionar uma rotina decorridos 05 segundos faa : Sub Inicio() MsgBox "Al Brasil" Application.OnTime Now + TimeValue("00:00:05"), "Decorridos5Segundos" End Sub Sub Decorridos5Segundos() MsgBox "Feliz Ano Novo" End Sub A mensagem "Feliz Ano Novo" ser apresentada 5 segundos aps voce ter execu tado a rotina Inicio( )

Questo 2(231298Q2) : Ao cabo da minha rotina quero acrescentar um som de forma a alertar o usurio de que o programa chegou ao fim. Isso possvel ? Soluo 2(231298S1Q2) : Declare function sndplaysound Lib "winmm.dll" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As String, ByVal uFlags as Long) as Long Sub TestandoSom( ) Call sndplaysound ("c:\windows\media\chimes.wav",0) End Sub

Questo 3(231298Q3) : Meu projeto compreende vrias Worksheets. possivel acrescentar uma nova Worksheet de tal forma que se posicione aps a ltima ?

Soluo 3(231298S1Q3) : Tudo bem se voce estiver usando a ltima verso do Excel. Neste caso use o mtodo Count, que contar o numero de worksheets no seu Workbook. Se o seu Workbook contem por exemplo 3 Worksheets ento Worksheets.Count ser igual a 3 e portanto Worksheets(Worksheets.Count) ser o mesmo que escrever Worksheets(3) Insira no seu programa a instruo : Worksheets.Add. Move After:=Worksheets(Worksheets.Count)

Questo 4(231298Q4) : Tenho quatro arquivos. Para simplificar vamos chama-los de AA.xls, BB.xls, CC.xls e DD.xls. Executo uma macro para o arquivo AA.xls. Fao o mesmo em relao ao arquivo BB.xls. Grupo os resultados obtidos quando abro o arquivo CC.xls. O arquivo DD.xls importa os dados anteriores e executa outra srie de calculos. Este processo, alem de demorado trabalhoso. possivel fazer um programa que execute o mesmo servio sem interrupo ? Soluo 4(231298S1Q4) : Suponhamos que a macro que manipula os dados do arquivo AA.xls seja a macro MacroAA, da mesma forma, seja MacroBB a macro que manipula os dados do arquivo BB.xls, e assim por diante. Suponhamos que seus arquivos AA.xls ... DD.xls esto no diretrio C:\My Documents Abra um novo arquivo (NovoArquivo.xls) e use como modelo de desenvolvimento a macro TestandoOperao( ) que abre o arquivo AA.xls faz os clculos necessrios e fecha o arquivo quando conclui o servio. O modlo abaixo para o arquivo AA.xls deve ser extendido aos demais arquivos. Sub TestandoOperao( ) Dim Arquivo as string, diretorio as String Arquivo = "AA.xls" diretorio = "C:\My Documents\" Workbooks.Open diretorio & Arquivo Application.Run Macro:=Arquivo + "!MacroAA" Windows(Arquivo).Close End Sub

Questo 5(231298Q5) : Tenho uma coluna com datas na forma dia/mes/ano. Preciso escrever na coluna ao lado o dia da semana e o numero de ocorrncias desse dia no mes. Exemplificando : 28/05/98 ; Quinta Feira; 5 (onde o valor 5 indica que nesse mes de maio tivemos 5 Quintas Feiras at o dia 28) Soluo 5(231298S1Q5): Supondo que B:B seja sua coluna de datas e que sua primeira data est em b4 escreva em c4 : = text(b4, "dddd") (que lhe devolve Quinta Feira) escreva em d4 : =int(day(b4)/7 + 1) (que lhe devolve 5) Selecione c4:d4 e arraste enquanto houver dados na coluna B

Questo 6(231298Q6) : Como posso ter acesso a uma constante que foi declarada em outro arquivo .xls ? Soluo 6(231298S1Q6):

Ao declarar a constante X como Public no arquivo AAA.xls, voce poder acess-la de qualquer mdulo desde que nesse mesmo arquivo AAA.xls. Mas no lhe ser possvel acessa-la se voce estiver num dos mdulos do arquivo BBB.xls.

Questo 7(231298Q7) : Numa coluna com 500 valores numricos preciso fazer uma soma complexa, ou seja somar valores que atendam a diferentes critrios. Somar por exemplo os valores da coluna B quando aqueles da coluna A superarem 200 subtraindo esse resultado dos valores da coluna B quando aqueles da coluna A forem inferiores a 53. Isso possivel ? Soluo 7(231298S1Q7): Sim, possvel : Supondo seus dados no range a1:a500 escreva ento a frmula : =sumif(a1:a500; criterio1 ; b1:b500) (Expresso A) ir somar os valores da coluna B todas as vezes que os valores da coluna A superarem 200 =sumif(a1:a500; criterio2 ; b1:b500) (Expresso B) ir somar os valores da coluna B todas as vezes que os valores da coluna A no superarem 53 criterio1 ">200" e criterio2 "<=53" Calcule ento : ExpressoA - Expresso B Satisfeito ?

Questo 8(231298Q8) : Seria possivel escrever-se uma rotina que elimine da minha planilha os textos, mantendo no entanto as datas e demais valores numricos ? Soluo 8(231298S1Q8): Sub EliminaTextos( ) Worksheets("Sheet1").Select On Error GoTo fim With Columns .SpecialCells(xlTextValues,xlConstants).ClearContents End with fim: Exit Sub End Sub

Questo 9(231298Q9) : Na coluna A, no range A1:An disponho de caracteres numricos sob a forma de strings. Tenho ento dois problemas a resolver : a)preciso converter os strings em nmeros para operar com os mesmos b)o range a1:an variavel de forma que n pode assumir quaisquer valores. Exemplificando : n pode assumir a sequencia de valores 15; 150; 76 ... resultando nos ranges a1:a15(n = 15) ; a1:a150(n =150) ; a1:a76(n=76) ; etc... Como solucionar esse problema. Soluo 9(231298S1Q9): O range a1:an tem as caractersticas de um range dinmico, capaz de espichar ou de encolher. Para resolver o problema do range dinmico : 1)em sheet1 selecione os dados na coluna A (A1:An)

2)<Insert <Name <Define Name: RngDyn ser o nome do range; Refers to: =Offset(Sheet1!$A$1;0;0;COUNTA(sheet1!$A:$A);1) <Add <OK Em module1 escreva a rotina : Sub TransfSeuString( ) Worksheets(1).Select RngDyn.Select For Each Cell in Selection Cell.Value = CDBL(cell.value) Next End Sub

Questo10(231298Q10) : Tenho 7 Worksheets na seguinte ordem: Worksheets(1) = Sheet7, Worksheets(2) = Sheet6, Worksheets(3) = Sheet5, Worksheets(4) = Sheet4, Worksheets(5) = Sheet1, Worksheets(6) = Sheet2, Worksheets(7) = Sheet3 Como selecionar todas as Worksheets a partir da Worksheets(4) ? A Proc abaixo no faz exatamente o que eu quero. Onde est o rro ? Sub SelecionandoTeste() Dim i As Integer prim = 4 With ActiveWorkbook For i = prim To .Worksheets.Count .Worksheets(i).Select Next End With End Sub Soluo10(231298S1Q10): Sua Proc seleciona somente a ltima Worksheet. e no todas as Worksheets (a partir da Quarta) como voce deseja Para selecionar todas as Worksheets a partir da quarta, a linha de comando deve ser reescrita como .Worksheets(i).Select (i=prim) Outra Soluo10(231298S2Q10): Sub testandoSeleo() Dim MeuArray, c As Integer, i As Integer c = ActiveWorkbook.Sheets.Count ReDim MeuArray(4 To c) For i = 4 To c MeuArray(i) = i Next i Sheets(MeuArray).Select End Sub Outra Soluo10(231298S3Q10) : Sub XTesteSeleo() VamosSelecionar ActiveWorkbook, 4 End Sub Sub VamosSelecionar(wb As Workbook, ByVal MeuIndice As Integer) Dim sh As Worksheet wb.Worksheets(MeuIndice).Select For Each sh In wb.Worksheets If sh.Index >= MeuIndice Then sh.Select False Next End Sub

.Worksheets(i).Select

Retorno ao tpo dessa pgina

Das könnte Ihnen auch gefallen