Cách nhập dữ liệu thời gian?

Liên hệ QC

svxd49

Thành viên mới
Tham gia
14/11/08
Bài viết
44
Được thích
4
Nghề nghiệp
Kỹ sư xây dựng
Tôi có vấn đề cần hỏi như sau:
Giờ tôi có 1 file mà cần nhập dữ liệu về thời gian rất là nhiều( giờ, phút , giây). Theo cách nhập thông thường thì là HH:MM. Ví dụ: 8 giờ 30 phút thì nhập là 08:30. Giờ tôi muốn hỏi có cách nhập hay định dạng nào để tôi nhập dữ liệu trên theo cách 830 ko? Để hiện thị thì tôi dùng định dạng 00" giờ "00" phút" nhưng khi thực hiện phép tính thì ko cho kết quả như ý. Vậy có cách nào để thực hiện vấn đề trên ko. Nghĩa là 8 giờ 30 phút -> nhập 830; 22 giờ 15 phút -> nhập 2215; ...và vẫn thực hiện đc các phép tính về thời gian. Mong sớm nhận đc trợ giúp của mọi người. Thanks in advance!
 
Tôi có vấn đề cần hỏi như sau:
Giờ tôi có 1 file mà cần nhập dữ liệu về thời gian rất là nhiều( giờ, phút , giây). Theo cách nhập thông thường thì là HH:MM. Ví dụ: 8 giờ 30 phút thì nhập là 08:30. Giờ tôi muốn hỏi có cách nhập hay định dạng nào để tôi nhập dữ liệu trên theo cách 830 ko? Để hiện thị thì tôi dùng định dạng 00" giờ "00" phút" nhưng khi thực hiện phép tính thì ko cho kết quả như ý. Vậy có cách nào để thực hiện vấn đề trên ko. Nghĩa là 8 giờ 30 phút -> nhập 830; 22 giờ 15 phút -> nhập 2215; ...và vẫn thực hiện đc các phép tính về thời gian. Mong sớm nhận đc trợ giúp của mọi người. Thanks in advance!
Giả sử cột H là cột chứa dữ liệu cần nhập. Bạn tạo thêm một cột phụ để nhập dữ liệu (giả sử là cột G)
VD: tại G5 bạn gõ : 830; tại H5 bạn cài công thức: =LEFT(G5,LEN(G5)-2)&":"&RIGHT(G5,2)
tại H5 sẽ hiển thị 8:30, ô này có thể tham gia tính toán bình thường.
Sau khi nhập xong, bạn có thể ấn cột G đi, hoặc delete cột G sau khi đã copy-past special-value cột H.
 
Theo cách của bạn thì chỉ là hiển thi theo cách hh:mm thôi và có thể tự định dạng theo cách 00":"00 được chứ ko cần dùng thêm 1 cột như bạn, nhưng tính toán theo thời gian thì ko đúng. Ví dụ: ô G1 nhập 830 nghĩa là 8 giờ 30 phút, ô G2 nhập 925 nghĩa là 9 giờ 25 phút. Khi đó ô G3=G2-G1 sẽ là 0 giờ 55 phút nhưng kết quả đối với cách nhập trên là 0 giờ 95 phút do 925-830=95. Mình muốn hỏi cách nhập dữ liệu như trên để hạn chế phải thêm dấu ":" trong cách nhập thời gian để giảm thời gian nhập dữ liệu.
 
Lần chỉnh sửa cuối:
Theo cách của bạn thì chỉ là hiển thi theo cách hh:mm thôi và có thể tự định dạng theo cách 00":"00 được chứ ko cần dùng thêm 1 cột như bạn, nhưng tính toán theo thời gian thì ko đúng. Ví dụ: ô G1 nhập 830 nghĩa là 8 giờ 30 phút, ô G2 nhập 925 nghĩa là 9 giờ 25 phút. Khi đó ô G3=G2-G1 sẽ là 0 giờ 55 phút nhưng kết quả đối với cách nhập trên là 0 giờ 95 phút do 925-830=95. Mình muốn hỏi cách nhập dữ liệu như trên để hạn chế phải thêm dấu ":" trong cách nhập thời gian để giảm thời gian nhập dữ liệu.
Bạn lấy 2 ô H trừ nhau, chứ G chỉ để nhập liệu thôi.
Xem file ví dụ nhé
 

File đính kèm

  • Book1.xls
    25.5 KB · Đọc: 659
Nhưng cách của bạn gặp lỗi khi mình muốn thể hiện dưới dạng giờ, phút ( =LEFT(G5,LEN(G5)-2)&" giờ"&RIGHT(G5,2)&" phút" ).
 
Như bạn nói cột G chỉ là để nhập dữ liệu còn thể hiện là ở cột H nên để làm đc như vậy thì lệnh ở cột H sẽ như cách mà mình đã viết ở trên =LEFT(G5,LEN(G5)-2)&" giờ"&RIGHT(G5,2)&" phút". Liệu có cách nào mà ko phải dùng qua 1 cột trung gian ko vì trong file của mình có rất nhiều cột thời gian, mà với cách làm như bạn thì để tính toán đc mỗi cột dữ liệu của mình đều phải thêm 1 cột trung gian để phục vụ tính toán :(. Ví dụ như file mình đính kèm sau:
 

File đính kèm

  • BBNT.xlsx
    10.2 KB · Đọc: 188
Lần chỉnh sửa cuối:
Như bạn nói cột G chỉ là để nhập dữ liệu còn thể hiện là ở cột H nên để làm đc như vậy thì lệnh ở cột H sẽ như cách mà mình đã viết ở trên =LEFT(G5,LEN(G5)-2)&" giờ"&RIGHT(G5,2)&" phút". Liệu có cách nào mà ko phải dùng qua 1 cột trung gian ko vì trong file của mình có rất nhiều cột thời gian, mà với cách làm như bạn thì để tính toán đc mỗi cột dữ liệu của mình đều phải thêm 1 cột trung gian để phục vụ tính toán :(. Ví dụ như file mình đính kèm sau:
Trong file đính kèm, nếu muốn nhập giờ thì nhấn Ctrl + Shift + O. Nếu nhập bình thường thì nhấn Ctrl + Shift + F.
Nhớ Enable Macro trước nha.
 

File đính kèm

  • GPE.xls
    35.5 KB · Đọc: 326
Bạn có thể trình bày rõ hơn về cách làm đc ko, mình có vào xem macro của bạn nhưng ko hiểu gì :">. Mình biết quy luật chuyển đổi nhưng chưa rõ cách thực hiện. Liệu có thể thực hiện yêu cầu: chỉ những cột được chỉ định sẽ chuyển đổi định dạng Number thành Time còn các cột còn lại vẫn nhập dữ liệu như bình thường.
- Hoặc có thể khai báo 1 hàm để thực hiện yêu cầu được nêu ra như của bạn bebo vì hàm đó đc sử dụng lại nhiều lần mà cấu trúc lại dài ví dụ tên hàm mới là CD thì CD(A1)=LEFT(A1,LEN(A1)-2)&":"&RIGHT(A1,2); CD(G5)=LEFT(G5,LEN(G5)-2)&":"&RIGHT(G5,2). Mong mọi người giúp đỡ!
 

File đính kèm

  • GPE.xls
    37.5 KB · Đọc: 81
Lần chỉnh sửa cuối:
Bạn có thể trình bày rõ hơn về cách làm đc ko, mình có vào xem macro của bạn nhưng ko hiểu gì :">. Mình biết quy luật chuyển đổi nhưng chưa rõ cách thực hiện. Liệu có thể thực hiện yêu cầu: chỉ những cột được chỉ định sẽ chuyển đổi định dạng Number thành Time còn các cột còn lại vẫn nhập dữ liệu như bình thường.
- Hoặc có thể khai báo 1 hàm để thực hiện yêu cầu được nêu ra như của bạn bebo vì hàm đó đc sử dụng lại nhiều lần mà cấu trúc lại dài ví dụ tên hàm mới là CD thì CD(A1)=LEFT(A1,LEN(A1)-2)&":"&RIGHT(A1,2); CD(G5)=LEFT(G5,LEN(G5)-2)&":"&RIGHT(G5,2). Mong mọi người giúp đỡ!
Vùng màu vàng trong file là vùng sẽ chuyển đổi Number thành Time. Bạn cũng có thể nhập dữ liệu Time vào vùng này. Đây là code:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Set Rng = [D3:E20,H3:J20,M3:N20]
If Target.Count = 1 And Not Intersect(Target, Rng) Is Nothing Then
    If Intersect(Target, Rng).Address = Target.Address And Target.Value >= 1 Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
            Target.Value = Format(Target.Value, "00:00")
            Application.EnableEvents = True
        End If
    End If
End If
End Sub
Vùng chuyển đổi được định nghĩa ở dòng 3 trong code. Bạn có thể sửa lại cho phù hợp với file của bạn.

Còn đầy là hàm mà bạn muốn:
PHP:
Function CD(i As Long) As Double
    CD = (Int(i / 100) + (i Mod 100) / 60) / 24
End Function
 

File đính kèm

  • GPE.xls
    45.5 KB · Đọc: 340
có thể như thế này cho gọn:
Công thức chuyển đổi:
PHP:
B2=Time(Int(A2/100),Mod(A2,100),0)
Công thức này ra luôn giá trị thời gian,chứ không phải ra giá trị text như bé bo. Khi cộng trừ text như bé bo, Excel sẽ phải làm việc nhiều hơn.

Hàm VBA chuyển đổi:

PHP:
Function TG(Num As Long)
TG = TimeSerial(Int(Num / 100), Num Mod 100, 0)
End Function
 
Tớ mới làm được cách nhập thời gian giờ phút 4 số mà lại tính toán được thời gian nữa. Bạn nào có nhu cầu tính ca máy gửi mail cho mình theo aha0979841989@gmail.com mình sẽ gửi ct cho. Trong đó dùng toàn ct đơn giản thôi
 
Lần chỉnh sửa cuối:
Mình thấy file bạn gửi khi mình dùng trong excel 2007 khi đánh 18:00 thì bị lỗi, tự động chuyển sang 00:00.
Còn trong excel 2003 thì bình thường. Bạn có thể giúp mình trong excel 2007 ?
 
Vùng màu vàng trong file là vùng sẽ chuyển đổi Number thành Time. Bạn cũng có thể nhập dữ liệu Time vào vùng này. Đây là code:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Set Rng = [D3:E20,H3:J20,M3:N20]
If Target.Count = 1 And Not Intersect(Target, Rng) Is Nothing Then
    If Intersect(Target, Rng).Address = Target.Address And Target.Value >= 1 Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
            Target.Value = Format(Target.Value, "00:00")
            Application.EnableEvents = True
        End If
    End If
End If
End Sub


Dear bạn huuthang_bd
Cùng với yêu cầu trên nhưng mình muốn thao tác trên combobox vậy làm thế nào để định dạng trên combobox và kèm theo điều kiện chỉ cho nhập thời gian (ko cần phải gõ dấu ":") và ký tự không vượt quá 5 ?
Vì bài này được viết dựa theo Worksheet_Change còn mình thì muốn viết theo combobox_change
Thanks
 
Bạn cho mình hỏi chút: Mình thêm code của bạn vào VBA nhưng không chạy được. Mong bạn hướng dẫn chi tiết hơn
có thể như thế này cho gọn:
Công thức chuyển đổi:
PHP:
B2=Time(Int(A2/100),Mod(A2,100),0)
Công thức này ra luôn giá trị thời gian,chứ không phải ra giá trị text như bé bo. Khi cộng trừ text như bé bo, Excel sẽ phải làm việc nhiều hơn.

Hàm VBA chuyển đổi:

PHP:
Function TG(Num As Long)
TG = TimeSerial(Int(Num / 100), Num Mod 100, 0)
End Function
 
tks bebo nhiều
 
Có 1 cách vận dụng một số ý của các bạn và điều chỉnh một chút, hoàn toàn bằng lệnh excel:
Ô A1: nhập 830; Ô B1: nhập lệnh =LEFT(A1;LEN(A1)-2)&":"&RIGHT(A1;2); Ô C1: Định dạng Time (trong Format cell, thẻ - Number), sau đó nhập 00:00; Ô D1: Định dạng [h]" giờ" mm" phút" (trong Format cell, thẻ - Number, chọn custom), sau đó lập lệnh =B1+C1;
Lưu ý: chỉ cần cố định C1 trong công thức tại ô D1 (nhấn F4); sau khi nhập cột A, ẩn các cột A, B, C chỉ để cột D là được kết quả như ý muốn: nhập A1: 830; ra kết quả D1: 8 giờ 30 phút
 

File đính kèm

  • GPE.xls
    38 KB · Đọc: 84
Xin nhờ các cao nhân chỉ giáo: tôi có 1 bảng tính,
- cột A1, B1 định dạng là ##"h##, nhập tại ô A1 là 730 thì hiện 7h30'. tại ô B1 tôi cộng thêm 50 nữa thì sẽ thành 7h80', vậy cho hỏi làm cách nào để thành 8h20'
- tôi link sang sheet khác thì vẫn là 730 chứ không phải là 7h30' như mong muốn.
Xin nhờ cao nhân chỉ giúp. thank!
 
Web KT
Back
Top Bottom