jacky_police
Thành viên chính thức


- Tham gia
- 30/7/07
- Bài viết
- 54
- Được thích
- 4
Ai có code VBA để khi nhập điểm thi 2 số nó tự thêm dấu phẩy và giữa và tự xuống dòng cho em xin với.
Em xin cảm ơn!
Em xin cảm ơn!
Đương nhiên phải là 10 rồi bạn.Nếu nhập con số 10 thì bạn muốn nó là 1,0 hay 10 đây?
Chuyện này có khi lại giống với ca dao: 'Bà già đi chợ cầu Đông' không chừng
Bạn nên gửi file kèm ví dụ và kết quả mong muốn chắc đỡ phải hỏi nhiều.Đương nhiên phải là 10 rồi bạn.
Thứ nhất là không chịu khó tạo file.Ví dụ: Khi điểm hs là 1 thì nhập 1 trên màn hình hiển thị là 1,0. Nếu điểm hs là 5,5 thì nhập 55, màn hình hiển thị là 5,5. Tương tự với số lẻ nhập 2 số màn hình hiển thị dấu phẩy ở giữa. Nếu điểm là 10 thì nhập 10 và màn hình hiển thị là 10.
Bài này không phải là khó,và tôi biết bác SA_DQ biết làm,nhưng bạn trả lời vầy người ta phật ý không muốn tiếp tục bài chăng?Đương nhiên phải là 10 rồi bạn.
Đối với bạn thì đương nhiên, đối với Excel thì không, đối với người biết sử dụng excel cũng là không. Gõ 10 và 55 đối với excel là như nhau ở chỗ có 2 con số, làm sao phân biệt khi vầy khi khác.Đương nhiên phải là 10 rồi bạn.
Đối với bạn thì đương nhiên, đối với Excel thì không, đối với người biết sử dụng excel cũng là không. Gõ 10 và 55 đối với excel là như nhau ở chỗ có 2 con số, làm sao phân biệt khi vầy khi khác.
Phân biệt bằng được dùng hàm len() right().còn VBA cũng được,Nhưng bài này làm bằng VBA!làm sao phân biệt
Bài 2 của bác @SA_DQ và bài 8 của tôi dựa trên yêu cầu bài 1: "nhập điểm thi 2 số nó tự thêm dấu phẩy vào giữa", và 10 là "2 số"Điểm thi hiện tại chỉ cao nhất là 10, nếu gõ số lớn hơn 10 thì nó sẽ được hiểu là nhập số có phẩy.
2.2: Viết bằng VBA không cần biết máy cài thế nào, vì nếu len =2 thì chia 102.2.Còn tùy vào máy bạn cài nữa,như máy tôi cài dấu phẩy nó là dạng text ,còn dấu chấm mới là dạng số
2.3.Với các số bạn nhập như 9 điểm mà bạn nhập 9 không nói bạn nhập 90 thì nó sẽ là 9 hay giữ nguyên 90 (theo tôi nghĩ sẽ bảo là 9)
Bài #2 người ta hỏi nếu gõ đúng 10 thì là 10 điểm hay 1 điểm?Điểm thi hiện tại chỉ cao nhất là 10, nếu gõ số lớn hơn 10 thì nó sẽ được hiểu là nhập số có phẩy.
Sub NhapDiem(tgtCell As Range)
Select Case Len(tgtCell.Value)
Case 1
tgtCell.Value = tgtCell.Value
Case 2
If tgtCell.Value = 10 Then
tgtCell.Value = tgtCell.Value
Else
tgtCell.Value = tgtCell.Value / 10
End If
Case 3
tgtCell.Value = tgtCell.Value / 100
Case Else
MsgBox "So khong duoc lon hon 3 chu so"
End Select
End Sub
Bài #2 người ta hỏi nếu gõ đúng 10 thì là 10 điểm hay 1 điểm?
Giống như ở bài 3 tác giả trả lời bài 2. Trong khi bài 1 yêu cầu cứ 2 số thì chèn giữa bằng 1 dấu phẩy. Và cách trả lời của tác giả là "đương nhiên phải hiểu" mặc dù người ta đang hỏi để giúp.Gõ 10 thì nhâp vô là 10 bác.
Cảm ơn bác.Cũng là một cách nhưng dù sao cũng phải tách hay số ra để thêm dấu "," ở giữa .ví dụ như nhập 55 thì thêm dấu phẩy ở giữa là 5,5 .vậy dùng 2 biến tách những số có hai chữ số,thì số có hai chữ số khác 10 và số cuối bằng 0 thì lấy luôn số đầu cũng được Bác2.2: Viết bằng VBA không cần biết máy cài thế nào, vì nếu len =2 thì chia 10
2.3: Nếu làm đúng yêu cầu bài 1 thì khi gõ 90 chèn dấu phẩy vào giữa thành 9,0 hoặc chia 10 cũng ra 9.
Đọc code bài 14 xem, có ai lại tách chuỗi rồi nối chuỗi, rồi kiểm tra dấu thập phân của hệ thống cho nó nhiêu khê ra.Cảm ơn bác.Cũng là một cách nhưng dù sao cũng phải tách hay số ra để thêm dấu "," ở giữa .ví dụ như nhập 55 thì thêm dấu phẩy ở giữa là 5,5 .vậy dùng 2 biến tách những số có hai chữ số,thì số có hai chữ số khác 10 và số cuối bằng 0 thì lấy luôn số đầu cũng được Bác
Giống như ở bài 3 tác giả trả lời bài 2. Trong khi bài 1 yêu cầu cứ 2 số thì chèn giữa bằng 1 dấu phẩy. Và cách trả lời của tác giả là "đương nhiên phải hiểu" mặc dù người ta đang hỏi để giúp.
Bài này không phải là khó,và tôi biết bác SA_DQ biết làm,nhưng bạn trả lời vầy người ta phật ý không muốn tiếp tục bài chăng?
ý em nói là làm theo cách tách chuỗi,tại bác có thành kiến cứ hay bắt bẻ em thôicó ai lại tách chuỗi rồi nối chuỗi,
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, WorkRng As Range
Set WorkRng = Intersect(Application.ActiveSheet.Range("E1:E99"), Target)
If WorkRng Is Nothing Then Exit Sub
If Len(Target.Value) > 2 Then MsgBox "So ban vua nhap chua dung": Target.Value = "": Target.Offset(-1, 0).Select: Exit Sub
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) And Len(Rng.Value) = 2 And Rng.Value <> 10 Then
Rng.Value = Rng.Value / 10
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Bài này nếu nhập vào số nhỏ hơn 1 thì làm sao nhỉ bạn.Ví dụ được 0.5 Điểm.Code đại khái như sau:
(Bạn nào đã viết qua ứng dụng cho bên giáo dục, các giáo viên nhập điểm thi sẽ có thủ tục để xử lý nhập liệu kiểu này.)
Mã:Sub NhapDiem(tgtCell As Range) Select Case Len(tgtCell.Value) Case 1 tgtCell.Value = tgtCell.Value Case 2 If tgtCell.Value = 10 Then tgtCell.Value = tgtCell.Value Else tgtCell.Value = tgtCell.Value / 10 End If Case 3 tgtCell.Value = tgtCell.Value / 100 Case Else MsgBox "So khong duoc lon hon 3 chu so" End Select End Sub
Bài đã được tự động gộp:
Gõ 10 thì nhâp vô là 10 bác.
Thớt mà nhập a, b, c thì tèo thậtVới điểm nhỏ hơn 1 (0.4 điểm) thì sao?
Gõ nhầm a,b,c thì bồ tèo![]()
Bài này nếu nhập vào số nhỏ hơn 1 thì làm sao nhỉ bạn.Ví dụ được 0.5 Điểm.
Thớt mà nhập a, b, c thì tèo thật
Với điểm nhỏ hơn 1 (0.4 điểm) thì sao?
Gõ nhầm a,b,c thì bồ tèo![]()
Bài này nếu nhập vào số nhỏ hơn 1 thì làm sao nhỉ bạn.Ví dụ được 0.5 Điểm.
Đại loại là tác giả có muốn làm nhanh ( chưa nói tới lười nha) nhưng không tính được trường hợp xẩy ra để bẫy lỗi trong code và chưa tính đến sai sót.Và hậu quả thì cũng chưa biết luônĐọc lại yêu cầu ở bài 1 thì còn có nội dung "tự xuống dòng". (nhập điểm thi 2 số nó tự thêm dấu phẩy vào giữa và tự xuống dòng)
Nghĩa là gõ không cần enter. Khi đang gõ
- Gõ được 1 ký số thì chưa làm gì
- Gõ được 2 ký số thì "chèn dấu phẩy vào giữa", không cần gõ nữa và cũng không cần enter, phải tự xuống dòng.
- Không có cơ hội gõ 3 ký số vì mới 2 số đã nhảy ra khỏi ô.
Do đó những code nào viết dựa trên sự kiện Worksheet Change là không đạt yêu cầu, vì sự kiện sheet change chỉ xảy ra sau khi nhấn enter hoặc nhấn tab, hoặc nhấn các phím mũi tên, hoặc click chuột vào ô khác.
Giả sử vẫn lập trình được cho yêu cầu trên, thì cũng không nhanh hơn được bao nhiêu vì:
- Các số điểm tròn vẫn phải gõ 2 con 10, 20, 30, ... Nếu chỉ gõ 1 con vẫn phải nhấn enter
- Số nhỏ hơn 1 cũng phải gõ 2 con 03, 05, 08, so với không lập trình cũng không bớt được lần nhấn nào.
- 10 điểm không có cửa gõ 100, gõ 10 bị coi là 1.0.
Tóm lại yêu cầu này: một là không khả thi, 2 là hiệu quả không cao, 3 là hậu quả do sai sót còn lớn hơn hiệu quả mang lại.
.Đại loại là tác giả có muốn làm nhanh ( chưa nói tới lười nha) nhưng không tính được trường hợp xẩy ra để bẫy lỗi trong code và chưa tính đến sai sót.Và hậu quả thì cũng chưa biết luôn