Excel Letter Plus Number Format


0

特定の列に特定の形式を強制する方法を見つけるのに問題があります。

私が扱っているのは、在庫を追跡するために使用するスプレッドシートです。複数の人が使用しているため、場所の形式に一貫性がありません。

(例:A1、A01、A-1、A-01)

これにより、A1、A2ではなく、A1がA10を超える、少しの痛みがソートされます。入力内容に関係なく、Letter + 2桁の数値形式(A01)に修正されるように修正する必要があります。

前もって感謝します


1
フォーマットにより、入力した値を自動修正することはできず、表示形式を変更するだけです。文字で始まるものはすべてExcelによってテキストと見なされ、必要な意味で書式設定は適用されません。
アガンジュ

これを行うには、vbaのWorksheet_Changeイベントを使用する必要があります。
スコットクレーナー

おそらくvbaスクリプトが機能するかどうかを確認します。ありがとう
イヴァン

回答:


1

これは、入力列内では不可能です。

  • 文字列の断片を分割し、それに応じてそれぞれをフォーマットし、それらをうまくまとめる数式を含む追加の(ヘルパー)列を追加できます。
  • すべての文字列がAで始まる場合、全員にA(およびダッシュ)をドロップするように指示し、単純に数字を入力できます(ただし、例を挙げただけの場合もあります)
  • 2つの列を使用できます。1つはアルファ部分用で、もう1つは数値用です
  • 入力した内容を分析してソートを実行するマクロを作成できます。しかし、経験から、ユーザーが潜在的に思い付く可能性のあるすべての不条理なバリエーションを処理できるマクロは世界にはありません-彼らは常にそれを破るバリエーションを見つけます。

別の考えとして、プルダウンメニューを使用して、自由形式で入力するのではなく、エントリまたはその一部を選択する方法を探します。また、ユーザーに形式のヒントを含めます。
fixer1234

0

また、わかりやすいプロンプトとメッセージでデータ検証を使用することもできます。データ検証式(文字の大文字を使用すると仮定)は次のようになります。

=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)

0

ワークシートのコード領域に次のイベントマクロを配置します。

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

このサンプルマクロは、列Bのエントリを監視および修正します。エントリが有効な場合、それらはそのまま残されます。エントリが無効な場合、A00に置き換えられます。


0

値を確認するだけで、確認ロジックがそれほど複雑ではない場合、これは標準のExcelデータ検証で実行できます。ただし、値を正しい形式に再フォーマットする必要があるため、VBAまたはVisual Studio Tools for Officeを使用する必要があります。以下は、必要なことを行う簡単なVBAマクロです。

この魔法は、Worksheet_Changeイベントが発生したときに発生します。例のために、最初の列に単一の値を入力すると仮定します。CorrectPartNoの関数は力仕事を行います。入力された値を分析し、正しい形式の値を返すか、検証エラーがあったことを示す何も返しません(最大長のみをチェックします)。処理はあなたの例で動作しますが、おそらく現実世界には単純すぎます。正規表現または他の同様の強力な処理で簡単に拡張できます。

イベントハンドラは、セルを正しくフォーマットされた部品番号で更新するか、ユーザーが入力した値を太字と赤にしてエラーを示します。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.