Ir ao conteúdo
  • Cadastre-se

Midori

Membro Pleno
  • Posts

    3.577
  • Cadastrado em

  • Última visita

Tudo que Midori postou

  1. Bem observado, se fosse 1006 já apresentaria o resultado errado. Outra alternativa é fazer o teste da condição antes. Algoritmo "Numero" Var Num: Inteiro Inicio Num <- 1006 Enquanto não (Num Mod 11 = 5) Faca Num <- Num + 1 FimEnquanto Escreval("O Numero e ", Num + 11 * 4) FimAlgoritmo
  2. @Eli Almeidaa O que o @JorgeGus comentou faz sentido. Dá para resolver sem loop, mas uma das formas com contador é iniciado com 1001 para fazer loop até o primeiro. E depois um cálculo para mostrar o quinto que é 1050 como comentou, Algoritmo "Numero" Var Num: Inteiro Inicio Num <- 1001 Repita Num <- Num + 1 Ate (Num Mod 11 = 5) Escreval("O Numero e ", Num + 11 * 4) FimAlgoritmo
  3. @GENECIOFICIAL Usei DATADIF na fórmula, mas não precisava. Dá para fazer um cálculo simples da diferença entre as datas, =SE(-1^QUOCIENTE(B6-$B$2;12)>0;"PROG."&(MOD(B6-$B$2;12)+1);"REGRE." &12-(MOD(B6-$B$2;12)))
  4. @Eli Almeidaa Testou o seu código? Ele apresenta erro de execução e também não está como sugeri. O Repita é mais simples do que tentou fazer. A leitura tem que ficar dentro do loop ou será feita apenas uma vez. Algoritmo "Numero" Var Num: Inteiro Conta: Inteiro Inicio Repita Leia(Num) Se(Num > 1000) E (Num Mod 11 = 5) então Conta <- Conta + 1 FimSe Ate Conta >= 5 Escreval("O numero e ", Num) Fimalgoritmo
  5. @GENECIOFICIAL Veja se é isto. Ao arrastar a partir da linha 6, inicia o incremento com o prefixo PROG. Quando chegar a 12 passa a decrementar com o prefixo REGRE, =SE(-1^QUOCIENTE(DATADIF($B$2;B6;"d");12)>0;"PROG."&(MOD(DATADIF($B$2;B6;"d");12)+1);"REGRE." &13-(MOD(DATADIF($B$2;B6;"d");12)+1))
  6. @Diegodcr No parâmetro After de Add passe a primeira planilha, Set Nova = Planilha.Worksheets.Add(After:=Planilha.Sheets(1))
  7. @Diegodcr Faça um teste, se transpor aparecer na última coluna não terá numeração. Para pegar todas as planilhas faça um loop no diretório passando os nomes como argumento para o procedimento. Sub MacroTransporValores() Call TransporValores(Workbooks.Open("C:\planilhas\planilha base1.xls")) End Sub Sub TransporValores(Planilha As Workbook) Dim Aba As Worksheet Dim Nova As Worksheet Dim Area As Range Dim Linha As Long Dim Conta As Long Set Aba = Planilha.ActiveSheet Aba.[A:A].EntireColumn.Delete Aba.[1:3].EntireRow.Delete Set Nova = Planilha.Worksheets.Add Call Aba.[1:1].Copy Call Nova.[A1].PasteSpecial(Transpose:=True) If WorksheetFunction.CountIf(Nova.[A:A], "transpor") Then Linha = WorksheetFunction.Match("transpor", Nova.[A:A], 0) Conta = Nova.[A1].CurrentRegion.Rows.Count If Conta - Linha > 0 Then Set Area = Nova.Cells(Linha + 1, "B").Resize(Conta - Linha) Area.Formula = "=ROW()-" & Area.Cells(1).Row - 1 Area.Value = Area.Value End If End If End Sub
  8. Edit. Agora vi que transpor aparece na coluna D da correta, mas nas bases não.
  9. @Eli Almeidaa Antes de começar a escrever o código é preciso entender quais passos seguir para chegar na solução. Seu programa deve ler o número indefinidamente até, pela quinta vez, ser maior que 1000 e com resto 5 para a divisão por 11. O comando Para não é o mais adequado já que ele repete uma sequencia até chegar a um determinado valor. O outro laço para esse caso pode ser o Repita, p.ex, Repita Leia(Num) Ate Num >= 5 Assim vai ficar em loop até a entrada receber um valor maior ou igual a 5. No seu é quase isso já que você deve pegar a entrada e a partir dela testar se chega nas condições pedida no enunciado. Para isso tem aquele Se que comentei. E o Repita não é para o valor da entrada, mas para um contador que mostre que chegou na condição cinco vezes.
  10. @Diegodcr Se o problema é o tempo talvez resolva com um delay antes fechar as planilhas. Este é de 5s. Call Application.Wait(Now + TimeValue("00:00:05"))
  11. @Diegodcr Faça um teste com este código no fim da sua Sub fora do loop. Assim vai tentar fechar todas as planilhas abertas. Sub FecharPlanilhas() Dim Planilha As Workbook For Each Planilha In Workbooks If Planilha.Name <> ThisWorkbook.Name Then Call Planilha.Close(False) End If Next Planilha End Sub
  12. @Diegodcr O erro pode ser porque na planilha está xls e a extensão é xlsx (o anexo que postou é xlsx). Mas se o literal deu certo sem extensão, tenta remover a extensão do nome na célula ou via código.
  13. @Diegodcr Não tenho esse ambiente SAP aqui para testar o código. Mas em vez de especificar o nome literal, tenta passar a variável nomesalvar para Workbook já que o nome muda de acordo com a coluna E. Workbooks(nomesalvar).Close SaveChanges:=False
  14. Um contador nada mais é que qualquer variável que pode ser incrementada ou decrementada. Normalmente é usado em loops. Incremento é quando aumenta o valor, p.ex: i <- i + 1. E o decremento: i <- i - 1. A condição Se que falei será verdadeira para o que o enunciado pede. Então dentro dela vai esse contador que pode ser verificado depois se chegou a cinco (o quinto número).
  15. @Diegodcr Se possível anexe o arquivo com a macro. Pode ser com dados fictícios.
  16. A questão do título também é com loop. Como o enunciado não especifica mais nada entendo que deve terminar quando chegar nas condições: Quinto número maior que 1000 e com resto 5 para a divisão por 11 (o número 1006 p.ex). Para pegar o resto da divisão tem o operador Mod e o teste pode ser assim: Se((Num > 1000) E (Num Mod 11 = 5)). Você pode colocar um contador nessa condição para depois verificar se chegou a 5.
  17. @João Marcos C Silva Aplique novamente a fórmula SEERRO. Ela tem dois parâmetros, SEERRO(valor; valor_se_erro) Veja como usei essa fórmula. Para valor passei o PROCV que busca na coluna A e, caso encontre algo, esse será o valor apresentado na célula. Mas se esse PROCV der erro o retorno será o que tiver no outro passado para valor_se_erro. Então é só pegar toda a fórmula e passar como primeiro argumento de SEERRO. E no segundo você pode colocar um texto informando que nada foi encontrado.
  18. @João Marcos C Silva Com a busca na coluna A se o valor não for encontrado, PROCV vai retornar um erro. Esse pode ser o critério para tentar fazer a busca na B. Para isso tem a fórmula SEERRO, =SEERRO(PROCV(A3;'1'!$A:$K;4;0);PROCV(A3;'1'!$B:$K;3;0)) Caso o primeiro PROCV retorne erro, vai para o segundo.
  19. @Eli Almeidaa Está correto. Outra forma com loop poderia ser assim, Algoritmo "Media da Classe" Var Nota1: Real Nota2: Real Total: Real Nome: Caractere Conta: Inteiro Aprov: Inteiro Inicio Para Conta <- 1 ate 6 faca Escreva("Nome ", Conta, ": ") Leia(Nome) Escreva(" Nota 1: ") Leia(Nota1) Escreva(" Nota 2: ") Leia(Nota2) Se((Nota1 + Nota2)/2 > 7) então Aprov <- Aprov + 1 FimSe Total <- Total + Nota1 + Nota2 FimPara Escreval("MEDIA DA CLASSE: ", Total/12) Escreval("APROVADOS: ", Aprov/6 * 100, "%") Escreval("REPROVADOS: ", (1 - Aprov/6) * 100, "%") Fimalgoritmo
  20. @Eli Almeidaa Da forma que fez essas estruturas condicionais (Se), a média do segundo aluno só será testada se a do primeiro for maior que 7; A do terceiro se a do segundo for maior que 7... Até chegar no último. Isso significa que se p.ex a média do primeiro não for maior que 7, nenhuma outra será verificada porque você está condicionando a média do anterior para testar os próximos. Então faça as condicionais para cada aluno ter o seu próprio bloco Se...FimSe independente dos outros, Se((Nota1 + Nota2)/2 > 7) então Aprov <- Aprov + 1 FimSe Se((Nota3 + Nota4)/2 > 7) então Aprov <- Aprov + 1 FimSe ...
  21. @Eli Almeidaa A média é a soma das notas dividida pela quantidade 12. Mas o seu cálculo está primeiro dividindo a nota12 pela quantidade e depois somando com as outras notas. É por isso que deve colocar os parênteses, p.ex: (nota1 + nota2 + ... + nota11 + nota12)/12
  22. @Eli Almeidaa O cálculo da média ainda está errado como no código anterior, note o que comentei sobre a ordem das operações. Se quer usar a estrutura condicional (Se) dessa forma faltou colocar dentro de um laço. Chegou a ver loop/laço nas aulas de programação? Se vai usar um só duas variáveis para a nota serão necessárias (Nota1 e Nota2).
  23. @Eli Almeidaa Com laço só precisa de duas variáveis para as notas, p.ex, Se((Nota1 + Nota2)/2 > 7) então Aprov <- Aprov + 1 FimSe Esse teste é só para incrementar a variável dos aprovados que será usada para mostrar o percentual. E para calcular a média acumule o total das notas no laço, Total <- Total + Nota1 + Nota2 Aí é só mostrar os resultados no fim (fora do laço), Escreval("MEDIA DA CLASSE: ", Total/12) Escreval("APROVADOS: ", Aprov/6 * 100, "%") Escreval("REPROVADOS: ", (1 - Aprov/6) * 100, "%")
  24. @Eli Almeidaa Não precisa de vetores, mas se já viu loop/laço alguma vez poderia aplicar no seu código para ficar mais simples. Aí serão 6 ciclos onde terá que: 1) Calcular a média de cada aluno e incrementar uma variável para aprovados (ou reprovados) que deverá ser usada no fim para o percentual; 2) Acumular o total das notas para calcular a média da classe no fim. No cálculo da média faltou colocar os parênteses para somar as notas antes. Lembre-se da ordem das operações matemáticas. Assim só está tentando pegar a média de um aluno. Esse teste deve ser feito para cada aluno. E aí também faltou parênteses como comentei acima.
  25. @Pablo.Mascarenhas Agora é só pegar as duas variáveis e efetuar a soma desses resultados. Obs: Veja o alerta do seu compilador sobre a função gets. No lugar dessa prefira fgets que é mais segura por ter um parâmetro para limitar a quantidade de caracteres.

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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!