Làm sao để nhập 98 thành 9.8.....?

Liên hệ QC

nmtuan987311

Thành viên mới
Tham gia
18/4/07
Bài viết
33
Được thích
0
Mình có 1 vấn đề thế này.nhập điểm thành phần cho học sinh hệ số 1 hệ số 2.
Khi nhập vào các số từ 0 đến 10 thì hiển thị bình thường ví dụ 6.5 thì đúng rồi
Nhưng nếu mình nhập 65 thì làm sao để khi Enter nó tự chuyển thanh 6.5
Mình nghĩ chắc viết bằng vba phải không?
Ai rành vụ này chỉ mình với!
 
Mình có 1 vấn đề thế này.nhập điểm thành phần cho học sinh hệ số 1 hệ số 2.
Khi nhập vào các số từ 0 đến 10 thì hiển thị bình thường ví dụ 6.5 thì đúng rồi
Nhưng nếu mình nhập 65 thì làm sao để khi Enter nó tự chuyển thanh 6.5
Mình nghĩ chắc viết bằng vba phải không?
Ai rành vụ này chỉ mình với!
Bạn tham khảo file đính kèm nhé
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Sheet1.Range("D1:D10")) Then
If Target.Value > 10 Then
Target.Value = Target.Value / 10
End If
End If
End Sub


[/GPECODE]
 

File đính kèm

  • NhapDiem.xls
    21.5 KB · Đọc: 79
Cam on ban viehoai
Nhưng có 1 vấn đề ở chỗ:
Vấn đề 1: Nếu nhập 101 thì nó thành 1.01 theo công thức của bạn thì nó phải thành 10.1 mơi phải chứ(vì bạn /10) mong bạn giải thích hộ mình.
→ Bạn có thể sửa nó thành một câu thông bao chỉ cho "người dùng nhập số từ 1 den 99" nếu người dùng nhâp từ 100 trở lên thì xuất thông báo lỗi đó.
Vấn đề 2: là khi người dùng lỡ nhập text vào thì với đoạn lệnh của bạn nó ra bản error "13" gì đấy và tự nó mở cửa sổ code khi nhấn Debug.
→Bạn có thể chuyển bản thông báo lỗi thành tiếng việt nếu trường hợp nhập tẽxt vào ô không?
Cám ơn bạn rất nhiều!
 
Không cần lập trình VBA đâu bác viehoai, chỉ cần thiết lập trong Excel Options (áp dụng cho Excel 2007), chọn Advanced và tick vào "Automatically insert a decimal point" và khai báo số 1 trong Places là được.
 
Bạn tham khảo file đính kèm nhé
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Sheet1.Range("D1:D10")) Then
If Target.Value > 10 Then
Target.Value = Target.Value / 10
End If
End If
End Sub

[/GPECODE]

Bạn Viethoai quên mất cái Application.EnableEvents=False rồi. Code này sẽ chạy loạn thôi. Đây là lý do tại sao 101 / 10 = 1.01 vì nếu giá trị lớn hơn 10 thì code chạy mãi không thôi
 
Lần chỉnh sửa cuối:
[GPECODE][/GPECODE]
Bạn Viethoai quên mất cái Application.EnableEvents=False rồi. Code này sẽ chạy loạn thôi.
Em viết kiểu vầy sao nó cũng không chịu: ví dụ nhập số 65 nó cũng thông báo rồi xóa????[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Sheet1.Range("D1:D10")) Then
If Target.Value < 10 Or Target.Value > 99 Then
MsgBox "Phai nhap so tu 10 den 99"
Application.EnableEvents = False


Target.ClearContents
Application.EnableEvents = True


Else
Target.Value = Target.Value / 10
End If
End If
End Sub[/GPECODE]
 
Xin các anh chị và các bạn chỉ mình cách post bìa lên diễn đàn, sao thấy nôi quy diễn đàn khó hiểu quá, xin cảm ơn nhiều
 
[GPECODE][/GPECODE]
Em viết kiểu vầy sao nó cũng không chịu: ví dụ nhập số 65 nó cũng thông báo rồi xóa????[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Sheet1.Range("D1:D10")) Then
If Target.Value < 10 Or Target.Value > 99 Then
MsgBox "Phai nhap so tu 10 den 99"
Application.EnableEvents = False


Target.ClearContents
Application.EnableEvents = True


Else
Target.Value = Target.Value / 10
End If
End If
End Sub[/GPECODE]

Sai quá mạng rồi H Van ơi. Code đơn giản quá ráng viết đi. Xử lý từng câu lệnh xem nó ra cái gì.
1. Nếu giá trị nhỏ hơn 10 hoặc lớn hơn 99 thì code sẽ xóa giá tri
2. Khi giá trị là 65 thì sẽ được chia cho 10 tức là ta có 6.5
3. Lúc này sự kiện lại được kích hoạt và giá trị đáp ứng đk (1) nên code xóa giá trị mất tiêu
 
Lần chỉnh sửa cuối:
Phải chi tác giả đưa yêu cầu cụ thể hơn (một cột gõ vào, yêu cầu kết quả).
Vậy đã đúng ý bạn?
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo thoat
    Application.EnableEvents = False
    If Intersect(Target, Sheet1.Range("D1:D100")) Then
        Target.NumberFormat = "0.00"
        If Target < 1 Or Target > 1000 Then MsgBox "Nhap sai!": Target.Select
        If Target > 10 Then Target = Target / 10
        If Target > 10 Then Target = Target / 10
    End If
thoat:
    Application.EnableEvents = True
End Sub
 
Lần chỉnh sửa cuối:
Nếu là tôi thì chắc chắn không ủng hộ viết code cho yêu cầu này
Muốn nhập 55, 66, 98... gì gì đó thì cứ việc nhập... Sau khi nhập xong, tôi copy số 10 ở đâu đó và Paste Special\Value + Divide vào dữ liệu là xong
 
Ý của mình xin bạn hiểu thế này!

Nếu là tôi thì chắc chắn không ủng hộ viết code cho yêu cầu này
Muốn nhập 55, 66, 98... gì gì đó thì cứ việc nhập... Sau khi nhập xong, tôi copy số 10 ở đâu đó và Paste Special\Value + Divide vào dữ liệu là xong

Thứ nhất: Mình muốn việc nhập điểm nhanh đỡ mất công gõ dấu chấm.
Thứ hai: nếu người khác sử dụng trang tính điểm này có thể người ấy không quen: vì quen nhập kiểu 9.5, 7.5.... và để đề phòng trường hợp người đó lỡ tay sơ ý nhập 95 thì cũng tự chuyển thành 9.5
Tránh quá nhiều thao tác để tiết kiệm thời gian
Mong bạn thông cảm!

Và mình cũng thấy được phần mềm tính điểm của bạn longtran159 làm được điều này nên mình muốn học hỏi thiết kế riêng một trang tính điểm đơn giản thôi.
 
Cám ơn bạn nhiều! Mình thử code của bạn chạy rồi! mừng húm!
Có thể cố giúp mình! thêm tí nữa để khi nhập sai con trỏ không được thoát khỏi ô đó. để chờ mình sửa!
Xin các bạn khác góp ý dùm mình nha!
 
Phải chi tác giả đưa yêu cầu cụ thể hơn (một cột gõ vào, yêu cầu kết quả).
Vậy đã đúng ý bạn?
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo thoat
    Application.EnableEvents = False
    If Intersect(Target, Sheet1.Range("D1:D100")) Then
        Target.NumberFormat = "0.00"
        If Target < 1 Or Target > 1000 Then MsgBox "Nhap sai!": Target.Select
        If Target > 10 Then Target = Target / 10
        If Target > 10 Then Target = Target / 10
    End If
thoat:
    Application.EnableEvents = True
End Sub

Cám ơn bạn nhiều! Mình thử code của bạn chạy rồi! mừng húm!
Nhưng đến 2 dòng: If Target > 10 Then Target = Target / 10
Mình muốn sửa dòng thứ này thành: nếu nhập vào là text thì hiện thông báo nhập số thôi.

Có thể cố giúp mình! thêm tí nữa để khi nhập sai con trỏ không được thoát khỏi ô đó. để chờ mình sửa!
Xin các bạn khác góp ý dùm mình nha!
Mình mù code vba!
 
Lần chỉnh sửa cuối:
Cám ơn bạn nhiều! Mình thử code của bạn chạy rồi! mừng húm!
Nhưng đến 2 dòng: If Target > 10 Then Target = Target / 10
Mình muốn sửa dòng thứ này thành: nếu nhập vào là text thì hiện thông báo nhập số thôi.

Có thể cố giúp mình! thêm tí nữa để khi nhập sai con trỏ không được thoát khỏi ô đó. để chờ mình sửa!
Xin các bạn khác góp ý dùm mình nha!
Mình mù code vba!

Sửa lại cho bạn đây:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim isect As Range
    On Error GoTo thoat
    Application.EnableEvents = False
    Set isect = Application.Intersect(Target, Sheet1.Range("D1:D100"))
    If Not isect Is Nothing And Target.Count = 1 Then
        If Target < 1 Or Target > 1000 Or TypeName(Target.Value) <> "Double" Then
            Target.Font.ColorIndex = 3
            MsgBox "Nhap sai!": Target.Select
        Else
            Target.NumberFormat = "0.00"
            If Target > 10 Then Target = Target / 10
            If Target > 10 Then Target = Target / 10
            Target.Font.ColorIndex = 0
        End If
    End If
thoat:
    Application.EnableEvents = True
End Sub

Lưu ý:
1. Có hai dòng If Target > 10 Then Target = Target / 10
là do chủ ý của tôi, giả sử có 6,75 điểm thì bạn gõ 675, bạn không thích thì xóa bớt một dòng, nhưng phải sửa điều kiện If Target < 1 Or Target > 1000
2. Tôi chưa chịu trách nhiệm nếu copy cả cột điểm từ nơi khác đến đâu nhé!
 
Sửa lại cho bạn đây:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim isect As Range
    On Error GoTo thoat
    Application.EnableEvents = False
    Set isect = Application.Intersect(Target, Sheet1.Range("D1:D100"))
    If Not isect Is Nothing And Target.Count = 1 Then
        If Target < 1 Or Target > 1000 Or TypeName(Target.Value) <> "Double" Then
            Target.Font.ColorIndex = 3
            MsgBox "Nhap sai!": Target.Select
        Else
            Target.NumberFormat = "0.00"
            If Target > 10 Then Target = Target / 10
            If Target > 10 Then Target = Target / 10
            Target.Font.ColorIndex = 0
        End If
    End If
thoat:
    Application.EnableEvents = True
End Sub

Lưu ý:
1. Có hai dòng If Target > 10 Then Target = Target / 10
là do chủ ý của tôi, giả sử có 6,75 điểm thì bạn gõ 675, bạn không thích thì xóa bớt một dòng, nhưng phải sửa điều kiện If Target < 1 Or Target > 1000
2. Tôi chưa chịu trách nhiệm nếu copy cả cột điểm từ nơi khác đến đâu nhé!

Bạn nói đúng nếu copy thì đoạn lệnh trên không có tác dụng
Thanks! bạn
 
Không cần lập trình VBA đâu bác viehoai, chỉ cần thiết lập trong Excel Options (áp dụng cho Excel 2007), chọn Advanced và tick vào "Automatically insert a decimal point" và khai báo số 1 trong Places là được.
Làm theo cách của bạn thì thỏa mãn điều kiện bài #1 (với Places là 1)
Nhưng có phải khi tạo file mới thì định dạng trong Advanced này vẫn giữ nguyên?
Có cách nào để khi mở file khác hoặc tạo file mới thì Excel không tự đánh dấu vào Automatically insert a decimal point???
 
Em viết đoạn code như thế này:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If TypeName(Target.Value) <> "Double" Then
Target.Value = ""
Else
Target.NumberFormat = "0.0"
If IsNumeric(Target.Value) And Target.Value > 10 Then Target.Value = Target.Value / 10
End If
End Sub

mà sao khi nhập từ 01 đến 09 excel không thể chuyển thành 0.1 đến 0.9 được. Rất mong các bác chỉ giùm.
Cám ơn các bác!
 
Em viết đoạn code như thế này:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If TypeName(Target.Value) <> "Double" Then
Target.Value = ""
Else
Target.NumberFormat = "0.0"
If IsNumeric(Target.Value) And Target.Value > 10 Then Target.Value = Target.Value / 10
End If
End Sub

mà sao khi nhập từ 01 đến 09 excel không thể chuyển thành 0.1 đến 0.9 được. Rất mong các bác chỉ giùm.
Cám ơn các bác!
Khái niệm là thế này. Bạn tự chế biến thêm nhé
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.NumberFormat = "0.0"
Target.Value = Target.Value / 10
Application.EnableEvents = True
End Sub
 
Web KT
Back
Top Bottom