Macro necessária para substituir o valor em uma coluna com dados personalizados

0

Basicamente, tenho categorias que são somadas por uma única letra do alfabeto ao executar os dados, mas obviamente isso não faria sentido para alguém de fora.

Eu preciso da macro para destacar na coluna que, onde isso é um "G", é substituído por "Nome personalizado" e assim por diante

"A" - alterado para "Custom1" "B" - alterado para "Custom2", etc.

    
por Dan Rea 06.12.2016 / 16:34

1 resposta

0

Você pode configurar uma planilha ou algumas colunas para traduzir cada letra para um "Nome personalizado" e, em seguida, consultá-las dessa maneira.

Mas vou dar alguns exemplos de como fazer isso sem ter os nomes em nenhuma célula.

Exemplo 1

Basta fazer o loop de todas as linhas e especificar cada letra e o nome para o qual ela deve mudar.

Sub change()
Dim i As Integer, r As Integer, c As String
c = "E"
r = Cells(Rows.Count, c).End(xlUp).Row
For i = 1 To r
    Select Case UCase(Cells(i, c).Value)
        Case "A"
            Cells(i, c).Value = "Custom1"
        Case "B"
            Cells(i, c).Value = "Custom2"
        Case "C"
            Cells(i, c).Value = "Custom3"
        Case "D"
            Cells(i, c).Value = "Custom4"
        Case "E"
            Cells(i, c).Value = "Custom5"
        Case "F"
            Cells(i, c).Value = "Custom6"
        Case "G"
            Cells(i, c).Value = "Custom7"
        Case "H"
            Cells(i, c).Value = "Custom8"
        Case "I"
            Cells(i, c).Value = "Custom9"
        Case "J"
            Cells(i, c).Value = "Custom10" 'And so on
    End Select
Next i

End Sub

Para facilitar o acesso, o nome da coluna (o número também funciona) é especificado pela variável c .
Isso só funcionará em correspondências exatas e ignorará qualquer outra coisa.
Não faz distinção entre maiúsculas e minúsculas (graças ao UCase), lembre-se de especificar a letra em case como maiúscula, ou ela não funcionará.

Case "A" 'Will work
Case "a" 'Won't work

Isso pode se transformar em uma lista bem longa, então uma maneira diferente de fazer isso é:

Exemplo 2

Sub changeArray()
Dim i As Integer, r As Integer, c As String

Dim Product
Product = Array("Custom1-A", "CustomB", "Custom3", "CustomD", , , , "Custom8", , , , , "Custom13", , , , , , , "Custom20", , , , , , "Custom25-Z")

c = "E"
r = Cells(Rows.Count, c).End(xlUp).Row
For i = 1 To r
    Select Case UCase(Cells(i, c).Value)
        Case "A" To "Z"
            Cells(i, c).Value = Product(Asc(UCase(Mid(Cells(i, c).Value, 1, 1))) - 65)
    End Select
Next i

End Sub

A base deste código é a mesma. Ainda percorre a coluna especificada pela variável c . Mas se comporta de maneira bem diferente. Esse código pega a primeira letra na coluna e, se for a letra a-z, ela mudará a célula para o nome personalizado especificado pela matriz.
Não faz distinção entre maiúsculas e minúsculas e ignorará qualquer coisa, exceto a primeira letra. Então, "A" e "Another1" serão tratados da mesma forma.

    
por 07.12.2016 / 02:49