1つの列を検証して数値のみを入力するExcelファイルがありますが、数値が18未満であるかのようにフォーマットされ、先行ゼロが追加されます。ただし、15桁目以降の数値は0に変換されます。例: "002130021300020789"、9は0に変更されます。列をテキストに変換した後、受け入れますが、先行ゼロを追加できず、制限できません。 onlu番号を入力します。
助けに感謝します..事前に感謝します。
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
まず、セルの形式をテキストに変更できます
Range("A1").NumberFormat = "@"
次に、ゼロを追加できます
cellvalue2 = Format(cellvalue1, "000000000000000") // for numeric fields
or
= TEXT(cellvalue1,"000000000000000") // for textfields