Excel 如何限制单元格仅输入数字

Excel 如何限制单元格仅输入数字,excel,vba,Excel,Vba,我有一个excel文件,验证一列是否只输入数字,但它的格式是,如果数字小于18,则会添加前导零。但现在,第15位之后的数字将转换为0,例如:“0021302130020789”,9位将更改为0。在将列转换为文本后,它可以接受,但我不能添加前导零,也不能限制只输入数字 谢谢你的帮助。。提前感谢。首先,您可以将单元格格式更改为文本 Range("A1").NumberFormat = "@" 然后你可以加零 cellvalue2 = Format(cellvalue1, "000000000000

我有一个excel文件,验证一列是否只输入数字,但它的格式是,如果数字小于18,则会添加前导零。但现在,第15位之后的数字将转换为0,例如:“0021302130020789”,9位将更改为0。在将列转换为文本后,它可以接受,但我不能添加前导零,也不能限制只输入数字


谢谢你的帮助。。提前感谢。

首先,您可以将单元格格式更改为文本

Range("A1").NumberFormat = "@"
然后你可以加零

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

                   or 
             = TEXT(cellvalue1,"000000000000000")    // for textfields
:Excel遵循有关如何存储和计算浮点数的说明。因此,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范围手动格式化为文本,然后使用此代码

快照(粘贴数值时)

快照(粘贴非数值时)

代码

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

谢谢你的建议和代码帮助。但当我处理另一张工作表中的数据时,粘贴15位后的值将转换为零,以及如何验证整个列G11:g65536。您也可以在工作表更改事件中捕获复制粘贴。。。让我给你举个例子:)一声谢谢,西德哈特。。你得到了很大的帮助。非常感谢你的精彩解释和快照!我还喜欢的是,你包含了IEEE浮点的链接,这肯定会对新手有所帮助。我正在转换同一个模板,模板上有一个按钮,在所有验证完成后,xls文件将转换为csv,因为这个更改事件需要很长时间。你知道如何克服它吗。。。