Formato de letra mais número do Excel

Formato de letra mais número do Excel

Estou tendo problemas para descobrir uma maneira de forçar um determinado formato em uma coluna específica.

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

(ex.: A1, A01, A-1, A-01)

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

desde já, obrigado

Responder1

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

  • Você poderia adicionar umcoluna extra (auxiliar)que contém a fórmula que divide as partes da sua string, formata cada uma de acordo e as junta perfeitamente.
  • se todas as suas strings começarem com A, você poderia simplesmente dizer a todos paradeixe cair o A(e o travessão) e simplesmente insira um número (mas talvez você tenha apenas dado um exemplo)
  • Você pode terdoiscolunas, uma para a parte alfa e outra para o número
  • você poderia escrever ummacroque analisa tudo o que eles digitam e faz a classificação. Mas, por experiência própria, não existe nenhuma macro no mundo que possa lidar com todas as variações absurdas que um usuário poderia criar - eles sempre encontrarão uma variação que a quebra.

Responder2

Você também pode usar a validação de dados, com prompts e mensagens compreensíveis. A fórmula de validação de dados (supondo que você queira letras maiúsculas) 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)

Responder3

Coloque a seguinte macro de eventos 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

Este exemplo de macro monitora e corrige entradas na colunaB. Se as entradas forem válidas, elas serão deixadas em paz. Se uma entrada for inválida, ela será substituída porA00.

Responder4

Se você quisesse apenas 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, como deseja reformatar o valor para que fique correto, você precisará usar o VBA ou o Visual Studio Tools for Office. A seguir está uma macro VBA simples que faz o que você deseja.

A magia acontece quando oPlanilha_Alterarevento é disparado. Para fins de exemplo, presumo que você esteja inserindo valores únicos na primeira coluna. OCorretoPartNofunção faz o trabalho pesado. Ele analisa o valor inserido e retorna um valor formatado corretamente ou nada que indique que houve um erro de validação (verifica apenas o comprimento máximo). O processamento funciona com o seu exemplo, mas provavelmente é simples demais 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

informação relacionada