5

1つの列を検証して数値のみを入力するExcelファイルがありますが、数値が18未満であるかのようにフォーマットされ、先行ゼロが追加されます。ただし、15桁目以降の数値は0に変換されます。例: "002130021300020789"、9は0に変更されます。列をテキストに変換した後、受け入れますが、先行ゼロを追加できず、制限できません。 onlu番号を入力します。

助けに感謝します..事前に感謝します。

4

2 に答える 2

2

MSの記事:Excelは、浮動小数点数の格納および計算方法に関するIEEE754仕様に準拠しています。したがって、Excelは数値に有効数字15桁のみを格納し、15桁目以降の桁をゼロに変更します。

番号の書式を取得し、ユーザーが番号のみを入力できるようにするには、これを行うことができます。範囲A1のテキストを検証していると想定しています。必要に応じて修正してください。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        '~~> If entered text is not a number then erase input
        If Not IsNumeric(Range("A1").Value) Then
            MsgBox "invalid Input"
            Application.Undo
            GoTo LetsContinue
        End If

        Range("A1").Value = "'" & Format(Range("A1").Value, "000000000000000000")
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

ファローアップ

コピーして貼り付ける場合は、最初に範囲G11:G65536を手動でTEXTとしてフォーマットしてから、このコードを使用する必要があります。

SNAPSHOT(数値を貼り付ける場合)

ここに画像の説明を入力してください

SNAPSHOT(数値以外の値を貼り付ける場合)

ここに画像の説明を入力してください

コード

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Dim cl As Range

    Application.EnableEvents = False

    If Not Intersect(Target, Range("G11:G" & Rows.Count)) Is Nothing Then
        For Each cl In Target.Cells
            '~~> If entered text is not a number then erase input
            If Not IsNumeric(cl.Value) Then
                MsgBox "invalid Input"
                Application.Undo
                GoTo LetsContinue
            End If

            cl.Value = "'" & Format(cl.Value, "000000000000000000")
        Next
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2012-06-21T08:13:39.470 に答える
1

まず、セルの形式をテキストに変更できます

Range("A1").NumberFormat = "@"

次に、ゼロを追加できます

cellvalue2 = Format(cellvalue1, "000000000000000")  // for numeric fields

                   or 
             = TEXT(cellvalue1,"000000000000000")    // for textfields
于 2012-06-21T07:58:27.470 に答える