Formato Carta Excel Plus Plus

0

Estou com problemas para encontrar um meio de forçar um determinado formato em uma coluna específica.

Estou lidando com uma planilha que uso para rastrear inventários. Ela é usada por várias pessoas e, como resultado, os formatos de localização são inconsistentes.

(por exemplo: A1, A01, A-1, A-01)

Isso torna a classificação um pouco dolorosa, com A1 acima de A10, em vez de A1, A2. Quero corrigi-lo para que, não importa o que seja digitado, seja corrigido para um formato de número de letra + 2 dígitos (A01).

Obrigado antecipadamente

    
por Ivan 23.06.2016 / 18:59

4 respostas

1

Isso não é possível na coluna de digitação.

  • Você pode adicionar uma coluna adicional (auxiliar) que contenha a fórmula que divide as partes da sua string, formata cada uma delas e as une bem.
  • se todas as suas strings começarem com A, você poderia simplesmente dizer a todos para soltar o A (e o traço), e simplesmente digitar um número (mas talvez você tenha dado um exemplo)
  • Você pode ter duas colunas, uma para a parte alfa e outra para o número
  • você pode escrever uma macro que analise tudo o que digitar e faça a classificação. Mas, por experiência, não existe macro no mundo que possa lidar com todas as variações absurdas que um usuário poderia criar - elas sempre encontrarão uma variação que a divida.
por 23.06.2016 / 19:08
0

Você também pode usar a Validação de dados, com prompts e mensagens fáceis de entender. A fórmula de validação de dados (supondo que você queira maiúsculas para as letras) seria:

=AND(CODE(A1)>=65,CODE(A1)<=90,CODE(MID(A1,2,1))>=48,CODE(MID(A1,2,1))<=57,CODE(MID(A1,3,1))>=48,CODE(MID(A1,3,1))<=57)
    
por 24.06.2016 / 23:30
0

Coloque a seguinte macro de evento na área de código da planilha:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim B As Range, s As String
    Set B = Range("B:B")
    If Intersect(Target, B) Is Nothing Then Exit Sub
    s = Target.Value
    If Len(s) <> 3 Then GoTo fixit
    If Not Left(s, 1) Like "[A-Z]" Then GoTo fixit
    If Not IsNumeric(Mid(s, 2, 2)) Then GoTo fixit
    Exit Sub
fixit:
    Application.EnableEvents = False
        Target.Value = "A00"
    Application.EnableEvents = True
End Sub

Esta macro de exemplo monitora e corrige entradas para a coluna B . Se as entradas forem válidas, elas serão deixadas em paz. Se uma entrada for inválida, ela será substituída por A00 .

    
por 23.06.2016 / 23:34
0

Se você quisesse verificar o valor e a lógica de verificação não fosse muito complexa, isso poderia ser feito com a validação de dados padrão do Excel. No entanto, desde que você gostaria de reformatar o valor para ser correto, você precisará usar o VBA ou Visual Studio Tools for Office. A seguir, uma macro VBA simples que faz o que você deseja.

A mágica acontece quando o evento Worksheet_Change é acionado. Para o exemplo, suponho que você esteja inserindo valores únicos na primeira coluna. A função CorrectPartNo faz o trabalho pesado. Ele analisa o valor inserido e retorna um valor formatado corretamente ou nada para indicar que houve um erro de validação (ele verifica apenas o comprimento máximo). O processamento funciona com o seu exemplo, mas provavelmente é muito simples para o mundo real. Poderia ser facilmente aprimorado com expressão regular ou outro processamento igualmente poderoso.

O manipulador de eventos continua atualizando a célula com o número de peça formatado corretamente ou torna o valor inserido pelo usuário em negrito e vermelho para indicar um erro.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim NewValue As String

    If (Target.Column = 1 And Target.Count = 1) Then
        Application.EnableEvents = False
        NewValue = CorrectPartNo(Target.Value)
        If (Len(NewValue) = 0) Then
            Target.Font.Color = vbRed
            Target.Font.Bold = True
        Else
            Target.Value = NewValue
        End If
        Application.EnableEvents = True
    End If
End Sub

Function CorrectPartNo(PartNo As String)
    Dim StartPartNo As String
    Dim EndPartNo As String
    Dim EndPartNoPosition As Integer

    StartPartNo = Left(PartNo, 1)
    If (Mid(PartNo, 2, 1) = "-") Then
        If (Len(PartNo) > 4) Then
            CorrectPartNo = ""
            Exit Function
        Else
            EndPartNoPosition = 3
        End If
    Else
        If (Len(PartNo) > 3) Then
            CorrectPartNo = ""
            Exit Function
        Else
            EndPartNoPosition = 2
        End If
    End If
    EndPartNo = Right("0" + Mid(PartNo, EndPartNoPosition), 2)

    CorrectPartNo = StartPartNo + EndPartNo
End Function
    
por 23.06.2016 / 23:50