none
Planilhas no VBA RRS feed

  • Pergunta

  • Tenho uma duvida.

    Como eu faço para pegar os dados de uma planilha e desmembrar.
    Por exemplo:
    Tenho a plan4 que possui a seguinte listagem na coluna A:

     M-C-240002 A/C
     M-C 240001 A/B

    Eu preciso criar uma macro, que desmembre esse A/C para: M-C-240002 A, M-C-240002 B e M-C-240002 C para cada linha da coluna B.
    O mesmo para as linhas seguintes.
    Ou seja, identifique que de A até C desmembra 3 vezes, de A até B desmembra 2 vezes e assim sucessivamente.

    Não consigo achar uma função que desmembre...me ajude...

    PLEASE!!
    quarta-feira, 8 de julho de 2009 19:36

Respostas

  • Construindo o código sugerido pelo Luiz Cláudio:
    Sub Desmembrar()
    With Sheets("Plan4")
        For i = .Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
            Posição = InStr(.Cells(i, 2), "/")
            If Posição <> 0 Then
                CaractereInicial = Mid(.Cells(i, 2), Posição - 1, 1)
                CaractereFinal = Mid(.Cells(i, 2), Posição + 1, 1)
                CodAscInicial = Asc(CaractereInicial)
                CodAscFinal = Asc(CaractereFinal)
                TrechoInicial = Left(.Cells(i, 2), Posição - 2)
                .Cells(i, 2).ClearContents
                j = 0
                For k = CodAscInicial To CodAscFinal
                If j > 0 Then .Cells(i + j, 2).Insert
                .Cells(i + j, 2) = TrechoInicial & Chr(k)
                j = j + 1
                Next k
            End If
        Next i
    End With
    End Sub
    [ ]s

    Adilson Soledade - MOS
    domingo, 19 de julho de 2009 01:40
  • Função pronta não tem. Você precisa criar uma função no VBA para manipular o string e gerar os códigos.

    Se eu fosse fazer, começaria usando a função InStr para localizar a posição da barra ("/").
    Eu pegaria as letras que estão antes e depois das barras, usaria as função Asc() para ter o número da letra de início e o número da letra final e faria um loop por estes números, gerando um código para cada letra. Neste loop, eu usaria função Chr() para converter o número de volta em letra.
    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    terça-feira, 14 de julho de 2009 23:57
    Moderador

Todas as Respostas

  • Função pronta não tem. Você precisa criar uma função no VBA para manipular o string e gerar os códigos.

    Se eu fosse fazer, começaria usando a função InStr para localizar a posição da barra ("/").
    Eu pegaria as letras que estão antes e depois das barras, usaria as função Asc() para ter o número da letra de início e o número da letra final e faria um loop por estes números, gerando um código para cada letra. Neste loop, eu usaria função Chr() para converter o número de volta em letra.
    Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.br
    terça-feira, 14 de julho de 2009 23:57
    Moderador
  • Construindo o código sugerido pelo Luiz Cláudio:
    Sub Desmembrar()
    With Sheets("Plan4")
        For i = .Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
            Posição = InStr(.Cells(i, 2), "/")
            If Posição <> 0 Then
                CaractereInicial = Mid(.Cells(i, 2), Posição - 1, 1)
                CaractereFinal = Mid(.Cells(i, 2), Posição + 1, 1)
                CodAscInicial = Asc(CaractereInicial)
                CodAscFinal = Asc(CaractereFinal)
                TrechoInicial = Left(.Cells(i, 2), Posição - 2)
                .Cells(i, 2).ClearContents
                j = 0
                For k = CodAscInicial To CodAscFinal
                If j > 0 Then .Cells(i + j, 2).Insert
                .Cells(i + j, 2) = TrechoInicial & Chr(k)
                j = j + 1
                Next k
            End If
        Next i
    End With
    End Sub
    [ ]s

    Adilson Soledade - MOS
    domingo, 19 de julho de 2009 01:40