Làm sao để nhập 98 thành 9.8.....? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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

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
 
Bác quanghai1969 à vấn đề là thế này: đoạn code của em :
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

nh
ằm mục đích nhập điểm nhanh, cụ thể: em nhập 1111 máy tự hiểu 1.1; nhập 3 máy tự hiểu 3.0; nhập 3.5 máy hiểu là 3.5; nhập 34567 máy tự hiểu là 3.5; nhập 3,5 hoặc Text máy bỏ trống. Nhưng em nhập 01 thì nó chỉ hiểu là 1.0 mà em cần phải là 0.1. Rất mong được bác và mọi người giúp đỡ.
 
Lần chỉnh sửa cuối:
Bác quanghai1969 à vấn đề là thế này: đoạn code của em :
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

nh
ằm mục đích nhập điểm nhanh, cụ thể: em nhập 1111 máy tự hiểu 1.1; nhập 3 máy tự hiểu 3.0; nhập 3.5 máy hiểu là 3.5; nhập 34567 máy tự hiểu là 3.5; nhập 3,5 hoặc Text máy bỏ trống. Nhưng em nhập 01 thì nó chỉ hiểu là 1.0 mà em cần phải là 0.1. Rất mong được bác và mọi người giúp đỡ.
Mình đã chỉ ra hướng đi rồi mà bạn không cố gắng. Vậy thì code đây
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
   If TypeName(Target.Value) <> "Double" Then
      Target.Value = ""
   Else
      If IsNumeric(Target.Value) Then
         If Len(Target) > 2 Then
            Target = Application.Round((Left(Target, 3) / 100), 1)
         ElseIf Len(Target) > 1 Then
            Target.Value = Left(Target, 2) / 10
         Else
            Target.Value = Target / 10
         End If
      End If
   End If
End If
Application.EnableEvents = True
End Sub
 
Rất cảm ơn những gì bác giúp. Nhưng bác ạ em là người tự học nên phần code em viết được như vậy với em là "phi thường" đấy bác ạ. Phần code của bác mới cho em chạy thử thì khi nhập từ 1 đến 9 lại thành 0.1 đến 0.9 và nhập 3.5 thì lại thành 0.0 như vậy lại toi em mất rồi. Thôi mong bác giúp em nốt đi. Cám ơn bác nhiều
 
Rất cảm ơn những gì bác giúp. Nhưng bác ạ em là người tự học nên phần code em viết được như vậy với em là "phi thường" đấy bác ạ. Phần code của bác mới cho em chạy thử thì khi nhập từ 1 đến 9 lại thành 0.1 đến 0.9 và nhập 3.5 thì lại thành 0.0 như vậy lại toi em mất rồi. Thôi mong bác giúp em nốt đi. Cám ơn bác nhiều
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
   If IsNumeric(Target) Then
      If InStr(Target, ".") < 1 Then
            If Len(Target) > 2 Then
               Target = Application.Round((Left(Target, 3) / 100), 1)
            ElseIf Len(Target) > 1 Then
               Target.Value = Left(Target, 2) / 10
            Else
               Target.Value = Target / 10
            End If
      End If
   Else
      Target = ""
      Target.Select
   End If
End If
Application.EnableEvents = True
End Sub
 

nh
ằm mục đích nhập điểm nhanh, cụ thể: em nhập 1111 máy tự hiểu 1.1; nhập 3 máy tự hiểu 3.0; nhập 3.5 máy hiểu là 3.5; nhập 34567 máy tự hiểu là 3.5; nhập 3,5 hoặc Text máy bỏ trống. Nhưng em nhập 01 thì nó chỉ hiểu là 1.0 mà em cần phải là 0.1. Rất mong được bác và mọi người giúp đỡ.

Góp thêm 1 code cho những người "làm biếng quá độ".
Hổng đúng thì thôi nghe.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
    If IsNumeric(Target) Then
        If Target.Value > 10 Then
            Target.Value = Application.Round(Target / 10 ^ (Len(Target) - 1), 1)
        End If
    Else
        Target.ClearContents
    End If
Else
    Target.ClearContents
    MsgBox "Chi nhap tung cell", , "GPE"
End If
Target.NumberFormat = "0.0"
Application.EnableEvents = True
End Sub
 
Lần chỉnh sửa cuối:
Góp thêm 1 code cho những người "làm biếng quá độ".
Hổng đúng thì thôi nghe.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
    If IsNumeric(Target) Then
        If Target.Value > 10 Then
            Target.Value = Application.Round(Target / 10 ^ (Len(Target) - 1), 1)
        End If
    Else
        Target.ClearContents
    End If
Else
    Target.ClearContents
    MsgBox "Chi nhap tung cell", , "GPE"
End If
Target.NumberFormat = "0.0"
Application.EnableEvents = True
End Sub

Thì thiệt là hỏng đúng đó mà,,, hic. Nhập vào số 1 thì nó không chịu ra số 0.1 kìa, hic
 
Bài #24 của anh Hải cơ bản chắc đáp ứng yêu cầu chủ topic, có điều là đang sót trường hợp 10 điểm tròn trĩnh.
 
Bài #24 của anh Hải cơ bản chắc đáp ứng yêu cầu chủ topic, có điều là đang sót trường hợp 10 điểm tròn trĩnh.
Chủ topic biết viết code thì chắc sẽ biết làm thế nào để giữ lại con số 10 mà
 
Cám ơn các bác nhiều lắm. Thấy các bác gọi em là "Lười biếng quá độ" thì tội em quá. Với hàng ngàn con số phải nhập mà phải nhập chính xác tuyệt đối nữa chứ thì chỉ cần bớt một dấu chấm thôi là bạc tỷ rồi các bác ạ. Vì vậy em mới tự học viết code để sao cho vừa ngủ gật vừa nhập điểm hàng đêm vẫn ok. Cốt lõ của vấn đề em chưa giải quyết được là sao cho Excel phân biệt được 01 và 1 hay đơn giản là nhập từ 1 đến 9 máy hiểu 1.0 đến 9.0 còn nhập 01 đến 09 máy hiểu là 0.1 đến 0.9. Cám ơn các bác rất nhiều.
 
Cám ơn các bác nhiều lắm. Thấy các bác gọi em là "Lười biếng quá độ" thì tội em quá. Với hàng ngàn con số phải nhập mà phải nhập chính xác tuyệt đối nữa chứ thì chỉ cần bớt một dấu chấm thôi là bạc tỷ rồi các bác ạ. Vì vậy em mới tự học viết code để sao cho vừa ngủ gật vừa nhập điểm hàng đêm vẫn ok. Cốt lõ của vấn đề em chưa giải quyết được là sao cho Excel phân biệt được 01 và 1 hay đơn giản là nhập từ 1 đến 9 máy hiểu 1.0 đến 9.0 còn nhập 01 đến 09 máy hiểu là 0.1 đến 0.9. Cám ơn các bác rất nhiều.
Bạn đã thử Code bài #24 của anh Hải chưa? Bạn nên test kỹ các Code mọi người giúp đỡ bạn, rồi bạn phản hồi kết quả và một điều nho nhỏ đó là cảm ơn sự giúp đỡ nhiệt tình của GPE nữa nhỉ?
 
Tất nhiên em làm rồi chứ. Code đó chỉ khăc phục được 3.5 thành 3.5 còn trước đó thành 0.0 do nó hiểu đó là 3 ký tự nên chia cho 100 suy ra thành 0.0. Code đó vẫn 1 thành 0.1 và 3,5 thành 0.4 và 10 thành 1.0
Nói tóm lại theo quy định điểm học phổ thông có dạng "số dấu chấm số" nên người nhập muốn nhập kiểu gì thì nhập, miễn sao về dạng "số dấu chấm số". Còn nhập các tình huống khác thì bỏ trống hoặc đưa về dạng chuẩn để còn tính toán. Nếu sơ sảy do vô tình nhập bị sai mà làm cho học sinh này đúp hoặc thi lại thì ân hận cả đời.
Cám ơn các anh chị nhiều lắm.
 
Lần chỉnh sửa cuối:
Tất nhiên em làm rồi chứ. Code đó chỉ khăc phục được 3.5 thành 3.5 còn trước đó thành 0.0 do nó hiểu đó là 3 ký tự nên chia cho 100 suy ra thành 0.0. Code đó vẫn 1 thành 0.1 và 3,5 thành 0.4 và 10 thành 1.0
Nói tóm lại theo quy định điểm học phổ thông có dạng "số dấu chấm số" nên người nhập muốn nhập kiểu gì thì nhập, miễn sao về dạng "số dấu chấm số". Còn nhập các tình huống khác thì bỏ trống hoặc đưa về dạng chuẩn để còn tính toán. Nếu sơ sảy do vô tình nhập bị sai mà làm cho học sinh này đúp hoặc thi lại thì ân hận cả đời.
Cám ơn các anh chị nhiều lắm.
Code này khá hoàn chỉnh đây. Chú ý là phải định dạng Text cho vùng cần nhập điểm trước nha
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
   If InStr(Target, ",") > 1 Then Target = Replace(Target, ",", "")
   If InStr(Target, ".") > 1 Then Target = Replace(Target, ".", "")
   If IsNumeric(Target.Value) Then
         If Len(Target) > 2 Then
            Target = Application.Round((Left(Target, 3) / 100), 1)
         ElseIf Len(Target) > 1 And Target <> 10 Then
            Target.Value = Left(Target, 2) / 10
         Else
            Target = Target * 1
         End If
   Else
      Target = Empty
      Target.Select
   End If
End If
Application.EnableEvents = True
End Sub
 
Anh quanghai1969 ơi em cám ơn anh nhiều lắm nhưng em chỉ cần giải quyết 01 vấn đề thôi, đó là: Em nhập 01 đến 09 máy phải hiểu là 0.1 đến 0.9 và đương nhiên nhập 1 đến 9 thì máy phải hiểu là 1.0 đến 9.0.
Còn tất cả các trường hợp còn lại em giải quyết được rồi. Đơn gản là thế này: Khi em nhập 01 thì Excel hiều là 1 và nó đem chia cho 10 (Target.Value = Target / 10). Vậy làm sao để Excel phân biệt được 01 và 1 thôi. Đấy là cái em cần nhất. Còn code của anh v
n hiểu 01 và 1 như nhau. Mong anh và mọi người giúp em với.
Em xin nói thêm: Em không được học về CNTT nên những gì em nêu ở đây là do mình tự "lăn lộn", có "gà mờ" một chút mong các anh thông cảm.

 
Anh quanghai1969 ơi em cám ơn anh nhiều lắm nhưng em chỉ cần giải quyết 01 vấn đề thôi, đó là: Em nhập 01 đến 09 máy phải hiểu là 0.1 đến 0.9 và đương nhiên nhập 1 đến 9 thì máy phải hiểu là 1.0 đến 9.0.
Còn tất cả các trường hợp còn lại em giải quyết được rồi. Đơn gản là thế này: Khi em nhập 01 thì Excel hiều là 1 và nó đem chia cho 10 (Target.Value = Target / 10). Vậy làm sao để Excel phân biệt được 01 và 1 thôi. Đấy là cái em cần nhất. Còn code của anh v
n hiểu 01 và 1 như nhau. Mong anh và mọi người giúp em với.
Em xin nói thêm: Em không được học về CNTT nên những gì em nêu ở đây là do mình tự "lăn lộn", có "gà mờ" một chút mong các anh thông cảm.

Thay vì nhập 01 thì bạn nhập .1 đi, excel không phân biệt 1 và 01 nếu đó là kiểu số.
 
Anh quanghai1969 ơi em cám ơn anh nhiều lắm nhưng em chỉ cần giải quyết 01 vấn đề thôi, đó là: Em nhập 01 đến 09 máy phải hiểu là 0.1 đến 0.9 và đương nhiên nhập 1 đến 9 thì máy phải hiểu là 1.0 đến 9.0.
Còn tất cả các trường hợp còn lại em giải quyết được rồi. Đơn gản là thế này: Khi em nhập 01 thì Excel hiều là 1 và nó đem chia cho 10 (Target.Value = Target / 10). Vậy làm sao để Excel phân biệt được 01 và 1 thôi. Đấy là cái em cần nhất. Còn code của anh v
n hiểu 01 và 1 như nhau. Mong anh và mọi người giúp em với.
Em xin nói thêm: Em không được học về CNTT nên những gì em nêu ở đây là do mình tự "lăn lộn", có "gà mờ" một chút mong các anh thông cảm.

Bạn có định dạng Text cho vùng cần nhập dữ liệu chưa?
 
Anh vu_tuan_manh_linh

à đã gọi là nhập nhanh mà anh (nhanh mà chính xác cho mọi hoàn cảnh: 01 hay 0,1 hay 0.1 hay "dấu cách dấu cách 01 dấu cách dấu cách"... vẫn là 0.1 miễn là hoặc về 0.1 hoặc bỏ trống). Các anh ơi các anh đã nhập điểm trên phần mềm trên Edu.vn của tập đoàn VinaPhone chưa? Mình chỉ cần nhập 01 là nó tự nhảy sang 0.1 mà.

Vâng em làm thấy tạm ổn để em kiểm tra lại lần nữa. Cám ơn anh nhiều.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Anh vu_tuan_manh_linh

à đã gọi là nhập nhanh mà anh (nhanh mà chính xác cho mọi hoàn cảnh: 01 hay 0,1 hay 0.1 hay "dấu cách dấu cách 01 dấu cách dấu cách"... vẫn là 0.1 miễn là hoặc về 0.1 hoặc bỏ trống). Các anh ơi các anh đã nhập điểm trên phần mềm trên Edu.vn của tập đoàn VinaPhone chưa? Mình chỉ cần nhập 01 là nó tự nhảy sang 0.1 mà.

Vâng em làm thấy tạm ổn để em kiểm tra lại lần nữa. Cám ơn anh nhiều.
Hơi bị lạ nha!! Nhập 01 hay .1 hay ,1 thì chỉ bấm 2 phím, chứ 0,1 hay 0.1 dùng đến 3 phím thì làm sao gọi là NHẬP NHANH như bạn nói đc, chưa kể lại thêm một đống "dấu cách dấu cách" chả hiểu để làm gì. Nhập liệu thì phải có NGUYÊN TẮC của nó, chứ làm như bạn gọi là BỪA BÃI!!!
 
Em cám ơn các anh nhiều lắm. Anh quanghai1969 ơi em có thêm một dòng (phần in đậm) để nó tự chuyển sang dạng số chuẩn theo quy định của ngành giáo dục luôn anh xem có đúng không. Cám ơn anh và cả các anh trong GPE nữa.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Count = 1 Then
If InStr(Target, ",") > 1 Then Target = Replace(Target, ",", "")
If InStr(Target, ".") > 1 Then Target = Replace(Target, ".", "")
If IsNumeric(Target.Value) Then
If Len(Target) > 2 Then
Target = Application.Round((Left(Target, 3) / 100), 1)
ElseIf Len(Target) > 1 And Target <> 10 Then
Target.Value = Left(Target, 2) / 10
Else
Target = Target * 1
End If
Else
Target = Empty
Target.Select
End If
End If
Target.NumberFormat = "0.0"
Application.EnableEvents = True
End Sub
 
anh ơi anh hiểu nhầm rồi đấy là vô tình bị nhập sai hay người nhập không hiểu dấu"," và dấu "." trong Excel
 
anh ơi anh hiểu nhầm rồi đấy là vô tình bị nhập sai hay người nhập không hiểu dấu"," và dấu "." trong Excel
Đấy cũng là một thói quen không hay nữa của người dùng máy tính. Tiêu chuẩn VN, Decimal Symbol là dấu ",", còn Digit Grouping Symbol là dấu ".". Tất cả hồ sơ làm sai định dạng số đều bị trả lại hết bạn ạ!!
 
Cái này mình cũng không am hiểu lắm nhưng mình nghĩ là do định dạng trong phần option định dạng dữ liệu , bạn nên đổi nó thành dạng text! gửi bởi admin tai game.
 
Lần chỉnh sửa cuối:
Anh quanghai1969 ơi hôm vừa rồi em có hỏi anh về đoạn code nhập điểm nhanh, qua mấy đêm mầy mò em đã chỉnh được đoạn code (có thể nói là đáp ứng được 99,99% yêu cầu của em) nhưng khổ nỗi khi tes đi tes lại nó lại nảy sinh một vấn đề sau: khi nhấn nút Delete thì Cell đó lại xuất hiện số 0.0 và không xóa được, chỉ khi bôi đen Cell đó rồi nhấn nút Delete hoặc nhấn một Text bất kỳ thì nó mới rỗng. Vậy làm sao hả anh? Giúp em với nhé.
Code em đã chỉnh đây, có gì anh chỉ giáo. Cám ơn anh và mọi người rất nhiều.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Set isect = Application.Intersect(Target, Sheet1.Range("A1:A100"))
If Not isect Is Nothing And Target.Count = 1 Then
If InStr(Target, ",") > 1 Then Target = Replace(Target, ",", "")
If InStr(Target, ".") > 1 Then Target = Replace(Target, ".", "")
If IsNumeric(Target.Value) Then
If Len(Target) > 2 And Target <> 100 Then
Target.NumberFormat = "0.0"
Target = Application.Round((Left(Target, 3) / 100), 1)
ElseIf Len(Target) > 1 And Target <> 10 And Target <> 100 Then
Target.NumberFormat = "0.0"
Target.Value = Left(Target, 2) / 10
ElseIf Target = 100 Then
Target.NumberFormat = "0.0"
Target.Value = Target / 10
Else
Target.NumberFormat = "0.0"
Target.Value = Target * 1
End If
Else
Target = Empty
Target.Select
End If
End If
Application.EnableEvents = True
End Sub

Giúp em với các anh ơi!
 
Lần chỉnh sửa cuố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 vào Menu:Tools ->options...Hộp thoại Options hiện ra. Bạn vào thẻ Edit, chọn vào hộp kiểm Fixed dicemal, phía dươi có mục Places bạn đánh vào đó giá trị là 1 sau đó nhấn OK. Trong ô bạn nhập vào định dạng có 1 số lẻ ở phần là 1 chữ số trong hộp thoại Format Cell->Number. Khi đó bạn nhập vào 65 sẽ hiển thị số 6,5.
 

Bài viết mới nhất

Back
Top Bottom