Tự động hiển thị dấu "." ngăn cách các số khi nhập số vào ô cell

Liên hệ QC
Đối với các số nhỏ hơn 1 như 025, 05, 075; các bước muốn code chạy sẽ là:
- Định dạng text
- Nhập text
- Code xử lý thêm dấu chấm thập phân
- Để nguyên định dạng text.
Nếu dùng Code định dạng số cho ô đó thì khi người dùng nhập sai và muốn nhập lại thì sao?

Nếu befaint chỉ dùng code định dạng text sau khi nhập thì số 0 đã biến mất chỉ còn 25, 5, 75.


Chủ yếu là cái thuật toán đơn giản.
Anh thử file ví dụ này nhé. Nhập ở A1:A100
 

File đính kèm

  • vidu_.xlsm
    15.4 KB · Đọc: 8
Đối với bài này và phương pháp gõ có số 0 phía trước thì có thể dùng user form. Có 2 tuỳ chọn nhập và sửa, nếu sửa thì phải chọn ô cần sửa

View attachment 253186

Code:
PHP:
Private Sub TxtDiem_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If TxtDiem = "" Or IsNumeric(TxtDiem) = False Then
    MsgBox "Ky qua", , "Ptm0412"
    Exit Sub
End If
Dim Diem As Double
If Opt1 Then
    If Val(TxtDiem) = 10 Or Len(TxtDiem) = 1 Then
        Diem = Val(TxtDiem)
    Else
        Diem = Val(TxtDiem) / IIf(Len(TxtDiem) = 3, 100, 10)
    End If
    Cells(1000, 3).End(xlUp).Offset(1).Value = Diem
    TxtDiem = ""
    Cancel = True
Else
    If Val(TxtDiem) = 10 Or Len(TxtDiem) = 1 Then
        Diem = Val(TxtDiem)
    Else
        Diem = Val(TxtDiem) / IIf(Len(TxtDiem) = 3, 100, 10)
    End If
    Range(RefCell).Value = Diem
    TxtDiem = ""
    Cancel = True
End If
End Sub
Em đã chạy thử code của bác nhưng em lại không muốn nhập trên Form có được không ạ (Chọn và nhập trực tiếp trên ô cell luôn không cần qua Form)
Vấn đề nữa: Ví dụ em muốn nhập thêm một cột nữa cũng ở sheet này thì thay đổi code thế nào ạ ? Mong được bác hướng dẫn ạ.
 
Anh thử file ví dụ này nhé. Nhập ở A1:A100
Thử xong:
- Đã change lại còn selection change
- Gõ 10 -> 1. Nghĩa là không ai có điểm 10
- Gõ 025 -> 0.25 (ok)
- Sửa 0.25 thành 05 -> 5 (ẹc)
- Sửa 0.25 thành 025 -> 2.5 (ẹc ẹc)
 
Em đã chạy thử code của bác nhưng em lại không muốn nhập trên Form có được không ạ (Chọn và nhập trực tiếp trên ô cell luôn không cần qua Form)
Vấn đề nữa: Ví dụ em muốn nhập thêm một cột nữa cũng ở sheet này thì thay đổi code thế nào ạ ? Mong được bác hướng dẫn ạ.
Nhập trực tiếp trên sheet có nhược điểm phải khắc phục ở những số nhỏ hơn 1 và khi sửa phải xoá nhập lại như bài 24 của befaint
Thêm 1 RefEdit chọn cột muốn nhập điểm

1611075240265.png
 

File đính kèm

  • FormNhapDiem.xlsm
    27.4 KB · Đọc: 4
Tại sao phải nhập 025 mà không nhập khác đi?

Tất cả đều là điểm nên dễ rồi. Tôi đề nghị:
1. Các điểm nguyên nhập bình thường: 0, 1, 2, ..., 9, 10.
2. Các điểm < 1 (phần nguyên = 0) thì thay cho gõ 0 thì gõ vd. dấu trừ "-". Tức muốn có 0.25, 0.5, 0.75 thì gõ -25, -5, -75
3. Muốn gõ các số thập phân > 1 thì cứ gõ bình thường. Code sẽ chèn dấu thập phân sau ký tự thứ 1. Vd. gõ 11, 25, 675, 998 thì sẽ có 1.1, 2.5, 6.75, 9.98. Tất nhiên sẽ không có số thập phân > 10 vì 10 là điểm cao nhất.

Chưa kiểm tra kỹ nhưng code như sau.
Mã:
Private Const workRange = "C6:C100" ' thay đổi cho phù hợp

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As String
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Me.Range(workRange)) Is Nothing Then
        Application.EnableEvents = False
        s = Target.Value
        If Mid(s, 1, 1) = "-" Then
            Target.Value = Mid(s, 2) / 10 ^ (Len(s) - 1)
        ElseIf Target.Value > 10 Then
            Target.Value = s / 10 ^ (Len(s) - 1)
        End If
        Application.EnableEvents = True
    End If
End Sub
 
2. Các điểm < 1 (phần nguyên = 0) thì thay cho gõ 0 thì gõ vd. dấu trừ "-". Tức muốn có 0.25, 0.5, 0.75 thì gõ -25, -5, -75
Theo em thì thay dấu "-" bằng dấu "." luôn để khỏi phải code trường hợp này.
 
Quý vị viết code theo dạng nếu muốn chỉnh sửa số thì phải xoá số cũ và gõ lại số mới.
Nói khác đi, nếu đã có 8.5 rồi thì muốn chỉnh thành 8.25 phải xoá 8.5 và gõ lại 825.

Chú: Trung bình là gõ 85, để lấy 8.5
Tức là gõ 3 phím (kể cả enter hoặc tab) để tiết kiệm một phím (tiết kiệm 25%)
Để có tiết kiệm này, chỉ cần dùng macro; macro chỉ cần bắt sự kiện, tắt sự kiện, đổi số và ghi trở lại, mở lại sự kiện.
Tiết kiệm thật.

Nhưng mà chắc phải vậy GPE mới có chuyện để hỏi. Ai cũng như mình thì góc lập trình chắc giảm mất 50%.

(*) người ta dùng phần mềm để giảm gõ dấu "." là bình thường. Nhưng đấy là người ta gõ số theo quy luật đồng bộ. Tức là mỗi số đều phải gõ đúng n số thập phân.
 
Theo em thì thay dấu "-" bằng dấu "." luôn để khỏi phải code trường hợp này.
Khi đưa ra giải pháp tôi luôn chú ý sao cho nó không phụ thuộc vào thiết lập của system. Bạn có thể gõ dấu chấm và không phải code. Nhưng nếu bạn gửi cho đối tác là tôi mà không có code cho trường hợp gõ dấu chấm thì trên máy tôi sẽ ra chuỗi chứ không phải số. Trên máy tôi vd. gõ .25 thì Excel hiển thị .25 (chuỗi). Trên máy tôi phải gõ ,25 thì Excel mới chuyển thành 0,25 do dấu phẩy là dấu thập phân. Vì thế gõ dấu chấm hay phẩy đều phải có code để sang system nào cũng chuẩn.
Nếu là tôi thì tôi chọn dấu trừ vì nó cùng dòng với các phím số. Tôi muôn đời chỉ gõ bằng một ngón tay phải nên nếu chuyển xuống dưới để gõ dấu chấm rồi chuyển lên trên để gõ phím số thì hơi ngượng tay.
 
Tiết kiệm được nhiều code ghê.
Tôi đã viết rất rõ.
2. Các điểm < 1 (phần nguyên = 0) thì thay cho gõ 0 thì gõ vd. dấu trừ "-". Tức muốn có 0.25, 0.5, 0.75 thì gõ -25, -5, -75
Và tôi đã giải thích tại sao tôi chọn dấu trừ cùng hàng với các phím số.

Ăn nhau ở cái sáng kiến thôi. Còn bây giờ ai cũng khôn cả.

Còn cố đeo bám, bó tay. Nếu khôn sao không viết trước bài #26, với đề nghị của riêng mình? Tới tận bài #25 có rất rất rất nhiều cơ hội cơ mà. Mình là người chậm hiểu nên chịu không hiểu.
 
... (2): Tại đang buồn, chán, nản, và lậm
Tôi cũng đang chán muốn chết đây.
Hồi đêm rồi, có bà Tiên hiện lên báo cho tôi biết là tôi già rồi, để cho lớp trẻ nó vui...

Có một dòng sông. Không đủ lớn như Mịch La nhưng chắc sâu đủ. Không có hòn đá thì đời nay ta dùng đai chì thợ lặn vậy....
 
Web KT
Back
Top Bottom