2012-06-21 45 views
5

Tôi có tệp excel, xác thực một cột để nhập số nhưng nó được định dạng như số nhỏ hơn 18 số 0 đầu sẽ được thêm vào. Nhưng bây giờ con số sau chữ số 15 nó sẽ chuyển thành 0 ví dụ: "002130021300020789", số chín được thay đổi thành 0. Sau khi chuyển đổi cột thành văn bản, chấp nhận nhưng tôi không thể thêm số 0 đứng đầu và không thể hạn chế để nhập số onlu.Làm cách nào để giới hạn ô chỉ nhập số

Đánh giá cao mọi trợ giúp .. cảm ơn trước.

+0

+ 1 Câu hỏi Tốt :) –

Trả lời

2

MS Article: Excel theo IEEE 754 specification về cách lưu trữ và tính toán số dấu chấm động . Do đó, Excel chỉ lưu trữ 15 chữ số có nghĩa trong một số và thay đổi chữ số sau vị trí thứ mười lăm thành số 0.

Để định dạng số của bạn và cũng để đảm bảo rằng người dùng chỉ nhập số điện thoại, bạn có thể thực hiện việc này. Tôi giả định rằng bạn đang xác thực văn bản trong Phạm vi A1. Vui lòng sửa đổi nếu có.

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 

followup

Nếu bạn đang sao chép và dán sau đó bạn sẽ phải định dạng đầu tiên G11 Phạm vi: G65536 thủ công như TEXT và sau đó sử dụng mã này

SNAPSHOT (Khi dán các giá trị số)

enter image description here

SNAPSHOT (Khi dán Non Numeric Values)

enter image description here

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 
+0

Thaks cho đề xuất của bạn và giúp đỡ mã. Nhưng khi tôi đang đối phó dữ liệu từ một trang tính khác, sau khi dán các giá trị sau 15 chữ số sẽ chuyển thành số không và cách xác thực toàn bộ cột G11: g65536. – user1049518

+0

Bạn cũng có thể ghi lại bản sao dán trong sự kiện thay đổi trang tính ... Hãy để tôi cung cấp cho bạn một ví dụ :) –

+0

Bài đăng đã cập nhật :) –

1

Trước tiên, bạn có thể thay đổi định dạng của các tế bào để nhắn tin cho

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

Sau đó, bạn có thể thêm zero

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

        or 
      = TEXT(cellvalue1,"000000000000000") // for textfields 
+0

1 Một cách khác để vượt qua hạn chế này :) –

Các vấn đề liên quan