Vụ này phải dùng đến code rồi, nhưng bạn cần đảm bảo nhập theo đúng định dạng, cụ thể là số phút phải được nhập 2 số. Ví dụ: 11:02 phải nhập là 1102 chứ không được nhập 112.Hiện em đang cần nhập 1 bản tài liệu toàn thời gian trong 24h nhưng mà nhập 22:30 thì quá mất thời gian, cho em hỏi cách chỉ cần nhập 2230 thì nó sẽ tự chuyển về 22:30 ạ. Em cảm ơn
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EndSub
Application.EnableEvents = False
If Target > -1 And Target < 2360 Then
Target = TimeValue(Target \ 100 & ":" & Target Mod 100)
Target.NumberFormat = "HH:mm"
End If
EndSub:
Application.EnableEvents = True
End Sub
Vụ này phải dùng đến code rồi, nhưng bạn cần đảm bảo nhập theo đúng định dạng, cụ thể là số phút phải được nhập 2 số. Ví dụ: 11:02 phải nhập là 1102 chứ không được nhập 112.
Nếu bạn đồng ý như vậy thì dùng code sau, có thể chỉnh sửa để điều chỉnh phạm vi áp dụng:
Mã:Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo EndSub Application.EnableEvents = False If Target > -1 And Target < 2360 Then Target = TimeValue(Target \ 100 & ":" & Target Mod 100) Target.NumberFormat = "HH:mm" End If EndSub: Application.EnableEvents = True End Sub
Cái này "nhìn vậy mà không phải vậy" bác ạ. Thực chất 1102 nó vẫn là số "một ngàn một trăm lẻ hai" chứ không phải là "mười một giờ hai phút", như vậy mà đem tính toán thì thành ra trật lất mất.Cần gì phức tạp vậy. Chọn định dạng Number ---> Custom và gõ định dạng trong Type: 00":"00
Cái này "nhìn vậy mà không phải vậy" bác ạ. Thực chất 1102 nó vẫn là số "một ngàn một trăm lẻ hai" chứ không phải là "mười một giờ hai phút", như vậy mà đem tính toán thì thành ra trật lất mất.
Tác giả nói thế này:Tác giả chỉ hỏi định dạng thôi anh, đâu có hỏi tính toán. Nếu tính toán thì đương nhiên là không được rồi![]()
Em hiểu chỗ màu đỏ là chuyển giá trị chứ không phải là chuyển định dạng (hiển thị trên màn hình).Hiện em đang cần nhập 1 bản tài liệu toàn thời gian trong 24h nhưng mà nhập 22:30 thì quá mất thời gian, cho em hỏi cách chỉ cần nhập 2230 thì nó sẽ tự chuyển về 22:30 ạ. Em cảm ơn
Tác giả nói thế này:
Em hiểu chỗ màu đỏ là chuyển giá trị chứ không phải là chuyển định dạng (hiển thị trên màn hình).
Thôi thì cứ có 2 cách như vậy, tác giả thích xài cách nào thì xài.
Cảm ơn anh.
Em biết, vậy nên mới có câu này: "có thể chỉnh sửa để điều chỉnh phạm vi áp dụng"Dùng lập trình Worksheet_Change hơi mạo hiểm nếu không thạo VBA, với code trên thì bất cứ ô nào cũng có thể tự động chuyển, miễn là số. Nếu không liên quan đến tính toán thì dùng định dạng là an toàn nhất.
Gõ 1244 vào cell A1 rồi Enter, kết quả nhận được 12:44 <--- OKVụ này phải dùng đến code rồi, nhưng bạn cần đảm bảo nhập theo đúng định dạng, cụ thể là số phút phải được nhập 2 số. Ví dụ: 11:02 phải nhập là 1102 chứ không được nhập 112.
Nếu bạn đồng ý như vậy thì dùng code sau, có thể chỉnh sửa để điều chỉnh phạm vi áp dụng:
Mã:Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo EndSub Application.EnableEvents = False If Target > -1 And Target < 2360 Then Target = TimeValue(Target \ 100 & ":" & Target Mod 100) Target.NumberFormat = "HH:mm" End If EndSub: Application.EnableEvents = True End Sub
OK. Em đồng tình với anh vụ này.Gõ 1244 vào cell A1 rồi Enter, kết quả nhận được 12:44 <--- OK
Chọn cell A1 (đã có kết quả) rồi bấm F2, Enter, kết quả nhận được 00:01 <---- Téo tèo teo
Đồng ý với thầy Hướng rằng không nên dùng sự kiện Change để làm mấy việc này vì nó khá nguy hiểm. Theo tôi thì tác giả cứ nhập tùy ý đi, khi nào nhập xong, chạy 1 sub để lấy kết quả. Vậy khỏe hơn là cứ lúc nào cũng... change