Các bác cho em xin code VBA nhập điểm thi 2 số mà nó tự thêm dấu phẩy vào giữa và nhảy dòng.

Liên hệ QC

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!
 
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
 
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.
 
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.
Thứ nhất là không chịu khó tạo file.
Thứ hai là viết tắt trong bài viết nên thứ ba là tạm biệt 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.

Đ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.
 
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!
Không hài lòng ở chỗ

1.Bài này chả khó khăn gì lập cái bảng tính để viết code,điểm thì chắc chắn chỉ có 2 chứ số tính đến 99 đi,cứ 2 chữ số khác 10 20 30 40 .. thì thêm dấu phẩy.lớn hơn 100 bỏ qua thống báo lỗi
2.Vì sao lại yêu cầu file mẫu của tác giả:
2.1. Thứ nhất đã dùng code thì nó là lập trình sẵn cái gì tự động cũng cần có giới hạn,phải xem vùng nào của bạn cần chạy code vùng nào không tránh sửa đi sửa lại nhiều lần
2.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)
 
Đ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.
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 tối đa là 10 thì ai cũng biết chứ, nhưng đưa ra yêu cầu phải rõ ràng và tự thấy trước những trường hợp ngoại lệ. Nếu cứ theo yêu cầu "tự thêm dấu phẩy ở giữa" mà làm thì cả ngàn người làm được, sau đó mới "ý quên, còn trường hợp này nữa". Và chưa chắc là "ý quên" 1 lần là xong.
 
2.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)
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 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.
 
Đ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.
Bài #2 người ta hỏi nếu gõ đúng 10 thì là 10 điểm hay 1 điểm?
Bài #3 trả lời là 10.

Rốt cuộc, gõ 10 thì là 10 điểm, gõ 11 thì là 1 phẩy 1 điểm.
Ở đời có hệ thống 11 nhỏ hơn 10.
 
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:

Bài #2 người ta hỏi nếu gõ đúng 10 thì là 10 điểm hay 1 điểm?

Gõ 10 thì nhâp vô là 10 bác.
 
Lần chỉnh sửa cuối:
Gõ 10 thì nhâp vô là 10 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.
 
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 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ả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
 
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
Đọ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.
 
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.

Đồng ý với bác điểm này. Lỗi của người hỏi là cứ tưởng ai cũng ở cùng lĩnh vực nên diễn giải không chi tiết. Cũng may tôi đã gặp trường hơp này rồi nên hiểu ý đồ thôi.
 
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?

/(hông mình chưa từng làm & sẽ không làm, dù để giúp/hại người nhập liệu: CSDL sẽ nhanh chóng thành đống rác!

Câu sau của ngạn ngữ là: Lợi thì có lợi nhưng răng không còn!
 
có ai lại tách chuỗi rồi nối chuỗi,
ý 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ôi
code của em,làm như bác nói
Mã:
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
 
Web KT
Back
Top Bottom