Ir ao conteúdo
  • Cadastre-se

Excel Fórmulas diversas avançadas VBA e outros


Posts recomendados

Sub Main()
    Dim I, J, N, T, R, W    As Integer
    Dim iVetor()            As Integer
    Dim iColuna, iArq, x, y As Integer
    Dim iNumeros            As Integer
    Dim iConta              As Long
    Dim sTipo               As String
    
    iConta = 0
    iColuna = 3
    iArq = FreeFile
       
    Open ThisWorkbook.Path & "\COMBINACOES.TXT" For Output As iArq
    
    iNumeros = InputBox("Entre com a quantidade de números")
    
    ReDim iVetor(iNumeros)
    
    iNumeros = iNumeros - 1
        
    For J = 0 To iNumeros
        Do
            iVetor(J) = InputBox("Numero " & J + 1)
            N = 0
            
            If iVetor(J) < 1 Or iVetor(J) > 99 Then N = 1
        
            For R = 0 To iNumeros
                If iVetor(J) = iVetor(R) And J <> R Then N = 1
            Next R
        Loop While N
    Next J
    
    For J = 0 To iNumeros - 1
        For W = J + 1 To iNumeros
            If iVetor(J) > iVetor(W) Then
                T = iVetor(J)
                iVetor(J) = iVetor(W)
                iVetor(W) = T
            End If
        Next W
    Next J
    
    For J = 0 To iNumeros
        x = Int(iVetor(J) / 10)
        y = Int(iVetor(J) Mod 10)
        sTipo = IIf(x Mod 2 = 0, "P", "I")
        sTipo = sTipo & IIf(y Mod 2 = 0, "P", "I")
        
        If x = 0 Then x = 10
        If y = 0 Then y = 10
        
        R = Abs(y - x)
 R = Abs(y + x)
        
        Cells(1, iColuna) = sTipo
        Cells(2, iColuna) = iVetor(J)
        Cells(3, iColuna) = y & "-" & x & "=" & R
        
        iColuna = iColuna + 1
    Next J
    
    For I = 0 To 5
        For J = I + 1 To iNumeros
            For N = J + 1 To iNumeros
                For R = N + 1 To iNumeros
                    For T = R + 1 To iNumeros
                        For W = T + 1 To iNumeros
                            iConta = iConta + 1
                                Print #iArq, _
                                iConta & " -> " & iVetor(I) & " - " & _
                                iVetor(J) & " - " & iVetor(N) & " - " & _
                                iVetor(R) & " - " & iVetor(T) & " - " & iVetor(W)
                        Next W
                    Next T
                Next R
            Next N
        Next J
    Next I
    
    Close #iArq
   
    Cells(4, 3) = "comb. =>" & iConta
End Sub

Olá estou utilizando esse código no VBA porém eu gostaria de saber que formula posso utilizar para mostrar repetição em  um intervalo, onde o usuário possa escolher o grupo que quer ver onde se repetirá a posição do concurso.

Ex:

Concurso 100- |02|05|10|13|18|20|

Concurso  101-|06|08|15|19|20|21|

Concurso  103-|01|07|09|15|21|31|

Concurso  108-|02|05|10|13|18|20|

 

Repetição concurso 100 repetiu no Concurso:108

 

Encontrei essas fórmulas:

=CONT SES

e CONT com SE separado.

não sei qual seria mais adequada.

Link para o comentário
Compartilhar em outros sites

  • mês depois...
Em 11/10/2019 às 00:20, Marcela da Silva de Souza disse:

Sub Main()
    Dim I, J, N, T, R, W    As Integer
    Dim iVetor()            As Integer
    Dim iColuna, iArq, x, y As Integer
    Dim iNumeros            As Integer
    Dim iConta              As Long
    Dim sTipo               As String
    
    iConta = 0
    iColuna = 3
    iArq = FreeFile
       
    Open ThisWorkbook.Path & "\COMBINACOES.TXT" For Output As iArq
    
    iNumeros = InputBox("Entre com a quantidade de números")
    
    ReDim iVetor(iNumeros)
    
    iNumeros = iNumeros - 1
        
    For J = 0 To iNumeros
        Do
            iVetor(J) = InputBox("Numero " & J + 1)
            N = 0
            
            If iVetor(J) < 1 Or iVetor(J) > 99 Then N = 1
        
            For R = 0 To iNumeros
                If iVetor(J) = iVetor(R) And J <> R Then N = 1
            Next R
        Loop While N
    Next J
    
    For J = 0 To iNumeros - 1
        For W = J + 1 To iNumeros
            If iVetor(J) > iVetor(W) Then
                T = iVetor(J)
                iVetor(J) = iVetor(W)
                iVetor(W) = T
            End If
        Next W
    Next J
    
    For J = 0 To iNumeros
        x = Int(iVetor(J) / 10)
        y = Int(iVetor(J) Mod 10)
        sTipo = IIf(x Mod 2 = 0, "P", "I")
        sTipo = sTipo & IIf(y Mod 2 = 0, "P", "I")
        
        If x = 0 Then x = 10
        If y = 0 Then y = 10
        
        R = Abs(y - x)
 R = Abs(y + x)
        
        Cells(1, iColuna) = sTipo
        Cells(2, iColuna) = iVetor(J)
        Cells(3, iColuna) = y & "-" & x & "=" & R
        
        iColuna = iColuna + 1
    Next J
    
    For I = 0 To 5
        For J = I + 1 To iNumeros
            For N = J + 1 To iNumeros
                For R = N + 1 To iNumeros
                    For T = R + 1 To iNumeros
                        For W = T + 1 To iNumeros
                            iConta = iConta + 1
                                Print #iArq, _
                                iConta & " -> " & iVetor(I) & " - " & _
                                iVetor(J) & " - " & iVetor(N) & " - " & _
                                iVetor(R) & " - " & iVetor(T) & " - " & iVetor(W)
                        Next W
                    Next T
                Next R
            Next N
        Next J
    Next I
    
    Close #iArq
   
    Cells(4, 3) = "comb. =>" & iConta
End Sub

Olá estou utilizando esse código no VBA porém eu gostaria de saber que formula posso utilizar para mostrar repetição em  um intervalo, onde o usuário possa escolher o grupo que quer ver onde se repetirá a posição do concurso.

Ex:

Concurso 100- |02|05|10|13|18|20|

Concurso  101-|06|08|15|19|20|21|

Concurso  103-|01|07|09|15|21|31|

Concurso  108-|02|05|10|13|18|20|

 

Repetição concurso 100 repetiu no Concurso:108

 

Encontrei essas fórmulas:

=CONT SES

e CONT com SE separado.

não sei qual seria mais adequada.

Boa noite, será que alguém poderia ajudar a ver o que seria mais adequado nessa planilha por favor, já tentei vária fórmulas até =PREVISÃO fórmulas lineares e  linear sozonais.ALGUÉM AÍ PODE VIM COM UMA LÂMPADA E ACENDER UMA LUZ PODE SER DA CEBE rsrs.Brincadeira mas se puderem me auxiliar eu agradeceria muito abraços a todos(as).

Link para o comentário
Compartilhar em outros sites

Para facilitar acho melhor tratar os dados como strings no vetor, assim fica mais fácil comparar

 

Segue um exemplo supondo que os dígitos já foram informados.

 

Reservei os primeiros três dígitos para o código do "concurso" e tratei os números no formato "00".

 

Sub Main()
    Dim I, N    As Integer
    Dim S       As String
    Dim StrV(3) As String
    
    StrV(0) = "100020510131820"
    StrV(1) = "101060815192021"
    StrV(2) = "103010709152131"
    StrV(3) = "108020510131820"

    For I = 0 To UBound(StrV) - 1
        For N = I + 1 To UBound(StrV)
            If Mid(StrV(I), 4, Len(StrV(I))) > Mid(StrV(N), 4, Len(StrV(N))) Then
                S = StrV(I)
                StrV(I) = StrV(N)
                StrV(N) = S
            End If
        Next N
    Next I
    
    For I = 1 To UBound(StrV)
        If Mid(StrV(I - 1), 4, Len(StrV(I - 1))) = Mid(StrV(I), 4, Len(StrV(I))) Then
           MsgBox "Repetição concurso " & Left(StrV(I - 1), 3) & " repetiu no Concurso " & Left(StrV(I), 3)
        End If
    Next I
End Sub

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • mês depois...
Em 03/12/2019 às 13:43, olliver.soul disse:

Para facilitar acho melhor tratar os dados como strings no vetor, assim fica mais fácil comparar

 

Segue um exemplo supondo que os dígitos já foram informados.

 

Reservei os primeiros três dígitos para o código do "concurso" e tratei os números no formato "00".

 


Sub Main()
    Dim I, N    As Integer
    Dim S       As String
    Dim StrV(3) As String
    
    StrV(0) = "100020510131820"
    StrV(1) = "101060815192021"
    StrV(2) = "103010709152131"
    StrV(3) = "108020510131820"

    For I = 0 To UBound(StrV) - 1
        For N = I + 1 To UBound(StrV)
            If Mid(StrV(I), 4, Len(StrV(I))) > Mid(StrV(N), 4, Len(StrV(N))) Then
                S = StrV(I)
                StrV(I) = StrV(N)
                StrV(N) = S
            End If
        Next N
    Next I
    
    For I = 1 To UBound(StrV)
        If Mid(StrV(I - 1), 4, Len(StrV(I - 1))) = Mid(StrV(I), 4, Len(StrV(I))) Then
           MsgBox "Repetição concurso " & Left(StrV(I - 1), 3) & " repetiu no Concurso " & Left(StrV(I), 3)
        End If
    Next I
End Sub

 

 

 

Não estou encontrando o erro de compilação será que alguém pode me ajudar...Boa noite.

Link para o comentário
Compartilhar em outros sites

12 horas atrás, Marcela da Silva de Souza disse:

Não estou encontrando o erro de compilação será que alguém pode me ajudar...Boa noite.

O código está rodando normalmente aqui.

 

Em qual linha está dando erro e qual é a mensagem?

 

Veja se você copiou e colou tudo corretamente.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

OLÁ,eu consegui compilar pois eu tinha copiado digitando, mas eu gostaria que a macro reagisse aos valores que eu mudo na planília.E eu gostaria que esse código estivesse junto com o anterior para eu obter todos os resultados na mesma planília.

Obrigada boa noite.

Link para o comentário
Compartilhar em outros sites

  • mês depois...
Em 03/12/2019 às 13:43, olliver.soul disse:

Para facilitar acho melhor tratar os dados como strings no vetor, assim fica mais fácil comparar

 

Segue um exemplo supondo que os dígitos já foram informados.

 

Reservei os primeiros três dígitos para o código do "concurso" e tratei os números no formato "00".

 


Sub Main()
    Dim I, N    As Integer
    Dim S       As String
    Dim StrV(3) As String
    
    StrV(0) = "100020510131820"
    StrV(1) = "101060815192021"
    StrV(2) = "103010709152131"
    StrV(3) = "108020510131820"

    For I = 0 To UBound(StrV) - 1
        For N = I + 1 To UBound(StrV)
            If Mid(StrV(I), 4, Len(StrV(I))) > Mid(StrV(N), 4, Len(StrV(N))) Then
                S = StrV(I)
                StrV(I) = StrV(N)
                StrV(N) = S
            End If
        Next N
    Next I
    
    For I = 1 To UBound(StrV)
        If Mid(StrV(I - 1), 4, Len(StrV(I - 1))) = Mid(StrV(I), 4, Len(StrV(I))) Then
           MsgBox "Repetição concurso " & Left(StrV(I - 1), 3) & " repetiu no Concurso " & Left(StrV(I), 3)
        End If
    Next I
End Sub

 

 

 

Olá boa tarde eu gostaria de saber se se eu quiser mudar os valores no código como devo fazer?

Obrigada

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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