none
Dividir um intervalo nas colunas A:B em outros 5 intervalos RRS feed

  • Pergunta

  • Boa noite.

    Tenho um intervalo com 25 linhas formada por duas colunas A1 e B25 .

    Seria possível criar uma macro que divida este intervalo em 5 outros intervalos?

    Essa divisão resultaria outros 5 intervalos ( C:D , E:F , G:H , I:J , K:L ) com 5 linhas em cada coluna e mantendo a ordem dentro das células.

    Exemplo:

    Colunas de origem:

    A             B

    --------------

    1             a                                                           

    2             b

    3             c

    4             d

    5             e

    ...            ...

    23           x

    24           y

    25           z

     

    Colunas de Destino:

     

    C             D             E             F             G           H              I             J              K           L                         

    --------------             --------------            ----------- --            -------------             ------------

    1             a             6             f              11           k             16           p             21           U                                           

    2             b             7             g             12           l               17           q             22           v

    3             c              8             h             13           m            18           R             23           x

    4             d             9             i               14           n             19           S             24           y

    5             e             10           J              15           o             20           t              25           z



    sexta-feira, 21 de julho de 2017 22:55

Respostas

  • Bom dia AndersoFDiniz2

    Não tinha dado atenção para a Sub, por isso não conseguia alterar as quantidades.

    Mas agora entendi e a sua macro funcionou perfeitamente como eu necessito.

    Obrigado.

    • Marcado como Resposta Oscar A D Jung domingo, 23 de julho de 2017 15:23
    domingo, 23 de julho de 2017 15:22

Todas as Respostas

  • Option Explicit
    
    Sub DividirColunas(ByVal NOMEPLANILHA As String, _
        ByVal MATRIZ As Range, _
        ByVal NUMFINALDELINHAS As Integer, _
        ByVal NUMFINALDECOLUNAS As Integer)
        
        Dim i, j, k, m, p, x, z, u As Integer
        
        Dim plan As Worksheet
        
        Dim achouplanilha As Boolean
        
        achouplanilha = False
        
        For Each plan In ThisWorkbook.Sheets
            
            If plan.Name = NOMEPLANILHA Then
            
                achouplanilha = True
                
            End If
            
            
        Next plan
        
        If achouplanilha = False Then
            
            MsgBox "O nome de planilha não foi encontrado"
            
            Exit Sub
            
        End If
        
        On Error GoTo fim
        
        'K É O NÚMERO FINAL DE LINHAS
        k = CInt(NUMFINALDELINHAS)
        
        'X É O NÚMERO INCIAL DE COLUNAS
        x = CInt(MATRIZ.Columns.Count)
        
        'Z É O NÚMERO FINAL DE COLUNAS
        z = CInt(NUMFINALDECOLUNAS)
        
        u = CInt(MATRIZ.Rows.Count)
        
        If Not k * z = u * x Then
            
            MsgBox "Não foi possível fazer a divisão de colunas"
            
            Exit Sub
            
        End If
        
        For j = x + 1 To z - 1 Step x
            'M É O MÚLTILO DE COLUNAS (2,4,6   OU   3, 6, 9   OU   4, 8, 12 ...)
            m = x
            
            For i = 1 To u
                
                For p = 0 To x - 1
                    
                    ThisWorkbook.Sheets(NOMEPLANILHA).Cells(i, j + p).Value = ThisWorkbook.Sheets(NOMEPLANILHA).Cells(i + k, j - m + p).Value
                    
                    ThisWorkbook.Sheets(NOMEPLANILHA).Cells(i + k, j - m + p).Value = ""
                    
                    
                Next p
                
            Next i
            
            m = m + x
            
            
            u = u - k
            
            
        Next j
        
        If p = x Then
            
            Exit Sub
            
        End If
        
    fim:
        
        MsgBox "O número de linhas ou de colunas só pode ser um número inteiro"
        
    End Sub
    
    Sub TESTE()
        
        
        Call DividirColunas("Planilha1", Range("A1:B25"), 5, 10)
        
    End Sub


    Anderson Diniz



    sábado, 22 de julho de 2017 16:24
  • Boa noite AndersoFDiniz2.

    Agradeço sua atenção em criar esta macro.

    Experimentei usar a sua ultima macro, e ela funciona exatamente para o exemplo que informei.

    Porém tentei adapta-la para minha necessidade e não consegui.

    Como e onde inserir na macro outros números de novas colunas e linhas, afim de adapta-la ao que e necessito?

    A divisão da coluna A:B (intervalo) de origem pode ser menor ou maior, por exemplo dividi-la em 2 colunas(intervalos) ou 5 colunas(intervalos) e isto resultaria em uma quantidade linhas proporcionais nas nova colunas(intervalos).

     

    domingo, 23 de julho de 2017 04:03
  • Sub TESTE()
        
        
        Call DividirColunas("Planilha1", Range("A1:B25"), 5, 10)
        
    End Sub

    É só nessa parte que você precisa alterar. 

    Pode ser alterado o nome da planilha, o intervalo, a quantidade de linhas que você quer que fique, a quantidade de colunas que você quer que fique.

    Por exemplo:

    Sub TESTE()
        
        
        Call DividirColunas("Planilha2", Range("A1:B9"), 3, 6)
        
    End Sub

    Vai pegar o intervalo "A1:B9" da Planilha2 e transformá-lo em 3 linhas e 6 colunas, ficando preenchidas as células de "A1:F3".

    Outro exemplo:

    Sub TESTE()
        
        
        Call DividirColunas("Planilha2", Range("A1:B9"), 6, 3)
        
    End Sub

    Vai pegar o intervalo "A1:B9" da Planilha2 e transformá-lo em 6 linhas e 3 colunas, ficando preenchidas as células de "A1:C6".

    Se atendeu a sua necessidade, favor marcar como respondido.



    Anderson Diniz


    domingo, 23 de julho de 2017 12:25
  • Bom dia AndersoFDiniz2

    Não tinha dado atenção para a Sub, por isso não conseguia alterar as quantidades.

    Mas agora entendi e a sua macro funcionou perfeitamente como eu necessito.

    Obrigado.

    • Marcado como Resposta Oscar A D Jung domingo, 23 de julho de 2017 15:23
    domingo, 23 de julho de 2017 15:22
  • Oscar, você deve marcar como resposta a parte em que está o código que atendeu às suas necessidades, não o seu próprio comentário.

    Anderson Diniz

    • Sugerido como Resposta AndersonFDiniz2 domingo, 30 de julho de 2017 11:23
    quarta-feira, 26 de julho de 2017 12:52