Ir ao conteúdo
  • Cadastre-se

SuperBond

Membro Pleno
  • Posts

    113
  • Cadastrado em

  • Última visita

Tudo que SuperBond postou

  1. Estou tentando fazer uma macro na qual ela verificará os valores em uma coluna e fará certas operações com esses valores. Inicialmente eu tinha feito uma estrutura com For e Next(abaixo), Sub Final() Dim m As Long, n As Long, N2 As String For m = 2 To 61 N1 = Cells(m, 2) Cells(i + 1, 16) = N1: i = i + 1 Next m ActiveSheet.range("P:P").RemoveDuplicates Columns:=1, Header:=xlNo End Sub mas como a quantidade de valores nas colunas irá sempre variar, não é prático ficar trocando o valor final da variável m. Eu preciso que a macro verifique automaticamente até a última célula preenchida. Tentei fazer usando a estrutura Do While Loop, mas o resultado não é o desejado, ela não escreve todos os valores, mas vai tipo escrevendo um e apagando o anterior, é até difícil de explicar. O código com Do While Loop: Sub Final() Dim m As Long, n As Long, N1 As String m = 2 N1 = 2 Do While N1 <> Empty Cells(i + 1, 16) = N1: i = i + 1 m = m + 1 ActiveSheet.range("P:P").RemoveDuplicates Columns:=1, Header:=xlNo Loop End Sub
  2. É isso, mas pode me explicar como funciona essa formula? Após habilitar a edição, como faço para modificar essa fórmula? Acho que para minha planilha teria que alterar a1 (marcado em vermelho na imagem) para AF2.
  3. Tenho duas colunas com dados diferentes: e quero uni-los, intercalando-os numa só coluna. Dessa forma: Gostaria de uma forma de fazer isso para muitos dados.
  4. Bacana, Osvaldo só não entendi esse trecho {"";"A";"B";"";"C";"";"D";"E"}. Deve ser colocado "" entre todas as letras? {0;1;10;22;60;86;90;118} é o vetor procurado, isto é as faixas de valores. Mas como tenho mais de 2000 valores, como ficaria esse campo da fórmula?
  5. Estou com inumeros valores que gostaria de organizar e classifica-los em diferentes grupos: Este é apenas uma amostra para exemplo, na verdade tenho que tratar de mais de 2000 valores. Para cada faixa de valor, corresponderá uma letra: para faixa de 1 a 9: letra A para faixa de 10 a 21: letra B para faixa de 60 a 85: letra C para faixa de 90 a 117: letra D para faixa acima de 118: letra E Então precisava de uma macro que substituísse os valores pelas letras correspondentes ou que escrevesse as letras correspondentes ao lado dos respectivos numeros. Dessa forma: Se houver função do excel que faça isso para muitos argumentos também serve.
  6. @osvaldomp obrigado Nesse código abaixo estou usando o comando MID com a intenção de extrair o último algarismo de cada produto AxB ( sempre multiplicando os algarismos da mesma linha). Se o ultimo algarismo do produto for igual a algum numero na coluna D, então esse algarismo do produto sai na coluna L. 1 * 4 = 4 último algarismo é 4 4 * 5 = 20 último algarismo é 0 2 * 6 = 12 ultimo algarismo é 2 Sub MultiplicandoAeB()Dim i As Long, k As Long Columns("L:L").Clear A = range("A1:A3").Value B = range("B1:B3").Value matrizX = range("D1:D3").Value For i = 1 To 3 For k = 1 To 3 If Mid(A(i, 1) * B(i, 1), 2, 1) = matrizX(k, 1) Then Cells(x + 1, 12) = Mid(A(i, 1) * B(i, 1), 2, 1): x = x + 1 End If Next k Next iEnd Sub A saida, para A e B da tabela acima, deveria ser: Já fiz de tudo que conheço mas não funciona de jeito nenhum.
  7. Obrigado osvaldomp. Se você puder dar uma ajuda nessa outra questão http://forum.clubedohardware.com.br/forums/topic/1101934-fun%C3%A7%C3%A3o-definida-pelo-usu%C3%A1rio/
  8. O seguinte código multiplica dois números, n1 e n2, e mostra o resultado. Function Multiply(n1, n2) As Double Multiply = n1 * n2End FunctionSub ShowResult() Dim n1 As Double, n2 As Double Dim Result As Double n1 = 12 n2 = 5 Result = Multiply(n1, n2) MsgBox ResultEnd Sub Nesse caso, n1 e n2 são valores únicos. Mas se eu quisesse que fosse: Aí n1 e n2 teriam que ser matrizes, teriam índices e a saída seriam as multiplicações de todas combinações possiveis entre n1 e n2: 1*3, 1*4, 1*5 ... até 5*7 . Tudo colocado em uma única coluna. .Fiz as seguintes alterações no código acima: Function Multiply() As DoubleDim i As Long, j As Long, k As Long For i = 1 To 3 For j = 1 To 3 For k = 1 To 9 Multiply(k, 1) = n1(i, 1) * n2(j, 1) Next k Next j Next iEnd FunctionSub ShowResult() Dim n1(), n2() Dim Result As Double Dim i As Long, j As Long For i = 1 To 3 For j = 1 To 3 For k = 1 To 9 Result = Multiply(n1, n2) Next k Next j Next i MsgBox ResultEnd Sub Imagino que tanto a Function quanto a Sub deveriam ter indices, mas não está funcionando, acusa Sub ou Function não definida.
  9. Ok, obrigado. Existe um comando parecido com LR = Cells(Rows.Count, 1).End(xlUp).Row só que para examinar em coluna, de modo que ele combinasse até o ultimo elemento da linha, independentemente da quantidade? Assim: Seria analisado conforme o numero de colunas.
  10. Verdade, é um código totalmente versátil. Agora em relação ao meu código, faltou mesmo combinar as letras das outras linhas. Então no lugar de "1" nas cells, coloquei um indice "o" e fiz um loop, onde o limite superior é dado pelo bom e velho LR = Cells(Rows.Count, 1).End(xlUp).Row para que ele combine n grupos de n linhas. Sub GetProdutos()Dim i As Long, j As Long, k As Long, m As Long, n As Long, o As Long, LR As LongLR = Cells(Rows.Count, 1).End(xlUp).RowFor o = 1 To LR For i = 1 To 4... Nesse meu código, como faço com que cada combinação ocupe uma célula? Assim:
  11. @osvaldomp Fala Osvaldomp! Obrigado por estes códigos. Arranjei uma solução mais simples, mas eficiente e que estava bem na minha cara o tempo todo Sub GetCombinacoes()Dim i As Long, j As Long, k As Long, m As LongFor i = 1 To 4 For j = 1 To 4 For m = 1 To 4 For n = 1 To 4 A = Cells(1, i) B = Cells(1, j) C = Cells(1, m) D = Cells(1, n) If i <> j And i <> m And i <> n And j <> m And j <> n And m <> n Then AA = AA & A & B & C & D & vbLf End If Next n Next m Next jNext i MsgBox AAEnd Sub
  12. @osvaldomp Tudo bem? Se você pudesse me dar uma luz nessa questão ficaria grato. Numa matriz de 3x4 há 12 letras diferentes, 4 por linha. Preciso combinar as 4 letras de cada linha, sem repetição e sem misturar com outras linhas, e mostrar as 72 combinações(dá 24 por linha) numa célula. Criar um código para ler em linha já fizemos, mas como combinar o conteudo das celulas? Se eu fosse fazer uma rotina pra cada uma das 24 situações ficaria um código gigante. Deve haver uma saida melhor. Eu sei mais ou menos fazer isso em Pascal, onde eu vou alocando os valores em variáveis temporárias, atribuindo e esvaziando nessas variaveis a cada combinação feita, mas em VBA estou sem saber. A figura dá uma explicação a mais. Precisava de uma ideia por onde começar.
  13. Eu estava usando outra planilha, aí não funcionava. É funciona mesmo, obrigado. Agora estou estudando cada linha desse código.
  14. Se eu rodar seu código do jeito que está não aparece nada na box, então fiz umas adaptações para minha planilha, dentro do que entendi, e resultou em erro. O que falta corrigir? A tabela que estou usando tá na imagem: Sub VerificaSomaPreços() Dim LR As Long, k As Long, AA As String Prec1 = range(Cells(1, 1)) Prec2 = range(Cells(2, 1)) Prec3 = range(Cells(3, 1)) LR = Cells(Rows.Count, 1).End(xlUp).Row For k = 3 To LR If Application.CountIf([E:E], (Prec1(k, 1) + Prec2(k, 1))) And _ Application.CountIf([F:F], (Prec2(k, 1) + Prec3(k, 1))) Then AA = AA & Prec1(k, 1) & Prec2(k, 1) & Prec3(k, 1) & vbLf End If Next k MsgBox AAEnd Sub
  15. Por favor, pode me explicar como funciona o código? O coutif tem um intervalo e um critério, que seriam E:E e F:F e o criterio seriam (Cells(k, 1) + Cells(k, 2)... Mas LR = Cells(Rows.Count, 1).End(xlUp).Row " como funciona? Como aloco os dados nas tabelas, os preços e as somas?
  16. É isso. Só corrigindo que na imagem que colei lá acima Soma1 = A3 + B3 = 4 a soma correspondente Soma1 está em E5 e não em E4. Mas é essa a intenção. Uma planilha com alguns valores e uma explicação mais detalhada tá no anexo. Pasta1.xlsx
  17. Opa, reabri o tópico porque tenho uma outra necessidade. Tenho a seguinte tabela: Quero criar uma macro que verifique se alguma soma de preços das colunas DEZ e JAN é igual a algum valor de imposto bimestral 1(Imp1) E se alguma soma de preços das colunas JAN e FEV é igual a algum imposto bimestral 2(Imp2). Se DEZ + JAN for igual ao imposto bimestral 1(Imp1) E se JAN + FEV for igual a algum valor de imposto bimestral 2(Imp2), deve escrever na caixa a sequencia dos três preços que satisfazem essas condições. Só que o principal é que não devem ser misturados os preços das linhas, por exemplo, não pode usar R$1+ R$3, ambos da linha 3, + R$5, da linha 4. Essa combinação, a princípio, satisfaz as condições, Imp1 = R$4 e Imp2 = R$8, só que usa valores das duas linhas. O código que fiz faz o que disse acima, que não é o desejado. Sub TestImp() Dim Prec1(), Prec2(), Prec3(), i As Long, j As Long, k As Long, l As Long, m As Long Dim PreFin As String Imp1 = range("E3:E5").Value Imp2 = range("F3:F5").Value Prec1 = range("A3:A7").Value 'carrega na matriz os valores do intervalo Prec2 = range("B3:B7").Value 'carrega na matriz os valores do intervalo Prec3 = range("C3:C7").Value 'carrega na matriz os valores do intervalo For i = 1 To 2 For j = 1 To 2 For k = 1 To 2 For l = 1 To 3 For m = 1 To 3 If Prec1(i, 1) + Prec2(j, 1) = Imp1(l, 1) And Prec2(j, 1) + Prec3(k, 1) = Imp2(m, 1) Then PreFin = PreFin & Prec1(i, 1) & Prec2(j, 1) & Prec3(k, 1) & vbLf End If Next m Next l Next k Next j Next i MsgBox PreFinEnd Sub O correto seria somente a saída 133, que junta os preços somente da linha 3. A saida 135 já não serve, o R$5 é da linha 4. Teria que criar uma rotina que analise em linha, chegou ao ultimo preço da linha, passa para a proxima linha e assim por diante. E isso para uma grande quantidade de preços ou linhas. Há uma função em VBA que faça esta analise?
  18. OK, eu não estava entendendo como carregar a variavel, agora sim. Obrigado.
  19. @osvaldomp Legal desse jeito, mas o que eu pretendia era exibir os valores de uma vez só, tentei modificar o código que você fez, mas não funcionou. Obrigado pelo link, até salvei aqui. Eu tenho um livro até bom de VBA, do John Walkenbach, mas não encontro um exemplo especifico de como exibir uma faixa de valores de uma unica vez, tentei usar cells, mas não funcionou.
  20. Ok, e se eu quiser que os valores das celulas estejam num array? Fiz um pequeno código que mostraria os valores mediante uma condição, só que não roda. Sub MostraConteúdoCel()Dim Celu(1 To 5) As Integer If [B2] = 3 Then MsgBox Celu Else MsgBox " B2 não é igual a 3" End IfEnd Sub
  21. Tô começando agora em VBA, usando Excel 2010 e gostaria de fazer uma coisa muito simples: mostrar numa box o valor contido em duas células, A1 e A2, que estão na planilha 9. O código que estou tentando é: Sub ShowValue()Contents = Worksheets("Plan9").range("A1:A2").ValueMsgBox ContentsEnd Sub o que aparece é um erro de tipos incompatíveis. Se eu escrever range("A1"), funciona e mostra o valor 6, mas range("A1:A2") não. A tela do erro:
  22. Perfeito, cara! era isso mesmo. Feliz natal e tudo de bom!
  23. Eu é que não tinha entendido como o código faz o loop. Eu pensava que ele combinaria os pares das duas passagens. Se ele combinasse aí sim apareceria 0111. Como poderia ser feito?

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!