Ghi lại Thời gian nhập Liệu (1 người xem)

  • Thread starter Thread starter mymapmap
  • Ngày gửi Ngày gửi
Liên hệ QC

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

mymapmap

Thành viên hoạt động
Tham gia
4/5/09
Bài viết
167
Được thích
24
Nghề nghiệp
KTV Điện tử
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!
 
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!
Thời gian mà bạn nói là NGÀY hay GIỜ
1> Nếu nhập bằng tay thì bấm tổ hợp phím Ctrl + Shift + ; để ra GIỜ ... hoặc Ctrl + ; để ra NGÀY
2> Nếu muốn tự động thì viết 1 code VBA
 
Được bình thường mà. Có điều phải dùng VBA. Mỗi khi các Cell Ai thay đổi giá trị thì các Celll Bi sẽ được cập nhật thời gian thực của máy. Để thời gian thực này đúng bằng thời gian thực tế thì chỉ cần chú ý để điều chỉnh thời gian thôi.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i, Er As Integer
  Dim Rng, Clls As Range
  Er = Range("B1000").End(xlUp).Row + 1
  Set Rng = Range("B2:B" & Er)
  If Not Intersect(Range("B2:B1000"), Target) Is Nothing Then
  Range("D2:D1000").Clear
  For Each Clls In Rng
    If Clls <> "" Then
    Clls.Offset(, 2).Value = Now
   Else
    Clls.Offset(, 2).Value = ""
    End If
  Next
  End If
End Sub
Đại loại là vậy nhưng mà vẫn chưa chính xác lắm cần chỉnh thêm.
 
Chỉnh sửa lần cuối bởi điều hành viên:
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!

Bạn xem file đính kèm. Bạn có thể nhập dữ liệu vào ô bất kỳ, sau khi nhập dữ liệu xong nếu bạn muốn ghi lại thời gian của ô nào thì nhập lại con trỏ vào ô đó.
 

File đính kèm

Cách làm của Bác đúng như mong muốn của em rồi đấy nhưng em vẫn chưa hiểu cách làm của Bác như thế nào.
Và có thể copy vùng nhập liệu đó xuống phía dưới nhưng tính năng ghi nhận thời gian nhập liệu vẫn còn cho vùng mới không?
Xin cảm ơn Bác nhiều lắm!
 
Đơn giản hơn bạn tưởng nhiều. Bạn cứ cho trường đó trên form 1 textbox đi nhưng bạn cho nó Enable=false, thậm chí Visiable=false. Như vậy, người dùng không tự can thiệp hay không trông thấy nữa. Trong code cvủa nút save bạn chèn thêm đoạn code

Me.textxxx=now()
tiếp theo là code bình thường của nút save

Việc chép các nội dung khác bình thường nhưng riêng ô lưu time thì lúc save mới set nên dù có nhập cả giờ 1 rec. cũng mặc.
 
Lần chỉnh sửa cuối:
Bác Sealand ơi! Sao e mò hoài mà không biết Bác làm điều đó như thế nào cả. Thật sự em cũng không giỏi Excel cho lắm. Bác có thể chỉ em chi tiết cách làm của Bác không ạh?
Cảm ơn Bác nhiều lắm!
 
Trước hết mình bỏ lock các ô từ B3-K3 để có 10 ô nhập dữ liệu. Sau khi protect sheet thì chỉ nhập được 10 ô này mà thôi. Các trang trí màu mè không đề cập nữa. Khi mình nhập vào 1 ô thì phát sinh sự kiện Worksheet change (Bảng tính thay đổi). Sự kiện cũng báo cho biết đổi tại ô nào. Như vậy ta chỉ việc gán cho phía dưới =Time hoặc now() là được.
Giờ thì ta vào code cụ thể. Nhấn Alt+F11--> chọn sheet1-->Bạn sẽ thấy code sau


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 3 Then 'Nếu dòng thay đổi =3
Sheet1.Unprotect 'Tạm bỏ Protect
Target.Offset(1, 0) = Time 'Set ô phía duói =time
Sheet1.Protect 'Khóa lai
Sheet1.EnableSelection = xlUnlockedCells 'Cho phép chọn ô không khóa
End If
End Sub

Bạn cứ xem có gì hỏi lại sau
 
Cảm ơn Bác Sealand nhiều lắm lắm em đã hiểu rồi.

Em gởi Bác file tổ chức dữ liệu của em. Với dữ liệu nhập vào từ cột D đến cột M các cột ở ngoài phài thực hiện các phép tính toán dữ liệu nhập vào. Dữ liệu em có nhiều dòng thì code viết như thế nào cho gọn Bác ơi. Đôi khi phải copy các dòng từ 49 đến 102 dán vào 103, dán vào 157... thì phải làm sao duy trì được tính năng ghi lại thời gian của các dòng nhập liệu.
Bác Sealand giúp em nhé! Cảm ơn Bác nhiều!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Nhìn vào file khó hiểu quá, đáng lẽ có chút dữ liệu mẫu và mô tả chi tiết vận hành ra sao thì mới biết bạn định là thế nào. Mình đoán mãi mà không hiểu cách làm của bạn.
 
Nhìn vào file khó hiểu quá, đáng lẽ có chút dữ liệu mẫu và mô tả chi tiết vận hành ra sao thì mới biết bạn định là thế nào. Mình đoán mãi mà không hiểu cách làm của bạn.

Cho em xin lỗi nhé gì lúc đầu file có dung lượng lớn quá do còn mấy đường link nên xóa mãi mới ra form trắng thế. Vùng nhập dữ liệu không được liên tục (D31:M48, D85:M102, D139:M156.....) do phải link và xuất qua báo cáo của sheet khác nữa.
Em mong muốn khi nhập liệu vào các dòng 31,34,37,40,43,46, 85,88,91,94,97,100.... thì thời gian sẽ ghi vào dòng thời gian tương ứng với từng cell
Rất mong nhận được sự giúp đỡ.
Xin cảm ơn!
 

File đính kèm

Cho em xin lỗi nhé gì lúc đầu file có dung lượng lớn quá do còn mấy đường link nên xóa mãi mới ra form trắng thế. Vùng nhập dữ liệu không được liên tục (D31:M48, D85:M102, D139:M156.....) do phải link và xuất qua báo cáo của sheet khác nữa.
Em mong muốn khi nhập liệu vào các dòng 31,34,37,40,43,46, 85,88,91,94,97,100.... thì thời gian sẽ ghi vào dòng thời gian tương ứng với từng cell
Rất mong nhận được sự giúp đỡ.
Xin cảm ơn!
Thay đoạn code củ thành:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Vung1 As Range, Vung2 As Range
  With Range("D31:N31")
    Set Vung1 = Union(.Offset(0), .Offset(3), .Offset(6), .Offset(9), .Offset(12), .Offset(15))
  End With
  With Range("D85:N85")
    Set Vung2 = Union(.Offset(0), .Offset(3), .Offset(6), .Offset(9), .Offset(12), .Offset(15))
  End With
  If Not Intersect(Union(Vung1, Vung2), Target) Is Nothing And Target.Count = 1 Then
    With ActiveSheet
      .Unprotect: Target.Offset(2) = Time
      .Protect: .EnableSelection = xlUnlockedCells
    End With
  End If
End Sub
 
Vì Sheet sẽ còn chép nối nhiều, nên mình đề xuất phương án kiểm tra dòng tiêu đề là "Time " sẽ gọn và ổn định khi các vùng chép không đồng nhất.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Cells(Target.Row + 2, 2) = "Time" Then
    With ActiveSheet
    If Target.Text <> "" Then
      .Unprotect: Target.Offset(2) = Time
      Else
      .Unprotect: Target.Offset(2) = 0
      End If
      .Protect: .EnableSelection = xlUnlockedCells
    End With
  End If
End Sub

Các bạn thấy không code ngắn và dễ hiểu rất nhiều, hơn nữa còn kèm thêm xóa ô thì cũng đưa thời gian về 0
 

File đính kèm

Cảnh Báo theo điều kiện

-+*/Cảm ơn các Bác đã quan tâm giúp e vấn đề trên nhiều lắm.
Nhưng hết vấn đền này có vấn đề khác nữa. với hai dòng dữ liệu EUT và REF ở file time có cột là sai lệch nếu tính sai lệch O31 lớn hơn 3 lần con số trong E22 thì cảnh báo thay đổi màu tương tự như các dữ liệu phía dưới O34 vs E23; O37 vs E24........O85 vs E56.......Nhưng gì chỉ thay đổi màu sắc thôi nên không ép phê với người nhập thường họ bỏ qua không quan tâm lắm dẫn đến nhiều lỗi nhập liệu không mong muốn.
Nay em muốn các Bác có cách nào khi nhập hết 20 giá trị của EUT VÀ REF ra độ sai lệch không thỏa mãn điều kiện thì có cảnh báo MessageBox hoặc âm thanh để người nhập xác nhận mới tiến hành dòng dữ liệu kế tiếp.
Các Bác có kinh nghiệm hướng dẫn e thực hiện với. Cảm ơn nhiều!;;;;;;;;;;;
 
Bọn mình mới chỉ giải đáp những yêu cầu cụ thể của bạn, còn file của bạn để làm gì hay tính toán độ lệch ra sao thì bạn chưa nói rõ sao mà biết được. Phải nắm được quy luật vận hành thì mới có giải pháp tốt được. Bạn nên có hướng dẫn cụ thể phương án thực hiện, số liệu ví dụ...
 
Cho em gởi lại file nhé!
 

File đính kèm

Mình sử dụng Excel 2003 không ad-in nên máy không có hàm MROUND() nên không test được.
 
Nếu thay thế MROUND() bằng ROUND() thì có khác chút ít nhưng cũng vẫn phù hợp yêu cầu.
Khi làm thường xuyên bị lỗi số liệu người nhập vào tạo ra sai số quá lớn ( sai số là lớn khi gấp 3 lần con số trong cột E2 đến E6 tương ứng cho các sai số của O10, O13,O16,O19,O22)
E muốn thay cảnh báo màu đỏ (Condition formating) Bằng một cảnh báo âm thanh hoặc MesgBox để người nhập liệu xác nhận mới nhập tiếp tục được.
Rất mong sớm nhận được sự giúp đỡ!
Xin cảm ơn!
 
Có phải là trị tuyệt đối của ô Merge bên cạnh =>1 thì cảnh báo. Nếu vậy, bạn ghi sai O11-O13-O17-O20-O23 chứ không phải như bạn ghi
 
Xin lỗi e nhầm tí là các O11-O14-O17-O20-O23 ; O65-O68-O71-O74......... mới đúng chứ.
Ở đây em lấy trị tuyệt đối của O11 > 2*E2 tương tự như thế cho các O tiếp theo để đưa ra cảnh báo (đổi màu) sai số vượt quá 2 lần con số được nhập trong cột E (con số trong cột E là bất kỳ do mình nhập vào chứ ko cố định và luôn dương)
 
Mình tận dụng các ô màu tím để liên kết các ô E.
Bạn kiểm tra giúp vì mình không liên kết dữ liệu được
 

File đính kèm

Sao em không thấy sai lệch lớn quá trời luôn mà nó không cảnh báo gì cả Bác Sealand ơi!
trình tự nhập liệu của em như sau:
Đầu tiên e nhập các số nguyên dương vào E22 đến E26 (E22= 0.1)
sau đó nhập lần lượt 10 cặp số EUT và REF vào sẽ cho ra độ sai lệch nếu trị tuyệt đối sai lệch lớn hơn nhiều lần(2) so với E22 thì cảnh báo để người nhập xem xét lại nếu chấp nhận thì OK còn thỏa mãn điều kiện nhỏ hơn 2*E22 thì không cảnh báo gì cả.
Lúc đầu em làm cảnh báo thay đổi màu như file gửi trước không có tác dụng buộc người nhập kiểm tra khi sai lệch lớn hơn 2 lần E22.
Bác xem và giúp e với nhé. Cảm ơn Bác nhiều lắm!
 
Xin lỗi em quên nữa em xin post lại file nhé!
 

File đính kèm

Giờ mới test được, kiểm tra lại nhé.(Bạn phải sửa hết công thức nếu số bij chia=0-->0 tránh lỗi)
 

File đính kèm

Lần chỉnh sửa cuối:
Nhưng có thể đưa ra cảnh báo sao khi nhập hết 10 cặp số không?
Khuya rồi chúc Bác ngủ ngon nhé. Để em test thử mai em sẽ báo cáo lại có gì Bác giúp em nhé!
 
Sửa lại chút lỗi, kiểm tra giúp
 

File đính kèm

Đây là em tạo ra file lưu dạng template tất cả dữ liệu ban đầu là rỗng hoàn toàn ngoại trừ phần công thức tính toán thôi. Nên em thấy hình như còn vấn đề chưa ổn lắm
 
Nó không ổn trước hết là nếu dữ liệu trống công thức mắc lỗi chia cho 0!
 
Phải làm sao đây Bác!?
Trước tiên cell trống mới nhập số đầu tiên là cảnh báo rồi.
khi xóa ba cell cùng một lúc lại sinh ra những số không phía dưới nữa.
Ngay dòng 31,32 nhập hai con số có sai lệch lớn hơn 2 lần E22=0,1 cũng đâu có cảnh báo đâu?
Bác có thể làm cho kiểm tra để đưa ra cảnh báo kết quả sai lệch cuối cùng được không? hoặc cảnh báo khi 20 cell EUT và REF khác rỗng được không ạh?
 
Mình gửi lại file chỉ cảnh báo khi điền hết vùng dữ liệu
 

File đính kèm

Cảnh Báo Theo Điều Kiện

Quên nữa không biết Bác có hàm Mround chưa nữa.
Em gửi lại file nhé. Vấn đề có thể chưa rõ Bác xem giùm e.
 

File đính kèm

MROUND là hàm của Analysis ToolPark chỉ cần vào ad-in bổ xung là được.
Còn cách tính hồi trễ chắc là phải từ từ mới hiểu được.
 
Bác làm như vậy là quá sự mong đợi của em rồi. Nhưng do người nhập hay copy đôi khi quên thay đổi chọn điểm hồi trễ làm trong cell G22 hoặc G56.... làm cho kết quả hồi trễ sai nếu phát hiện được thì quá tốt.
Bác cho em hỏi trong vùng D31:O48, D85:O102..... E muốn khóa tính nặng copy,paste, DragDrop được không?
Xin Cảm ơn
 
Đã khoá copy thì khoá tất không cho chép bất kể ô nào là xong,khi cần chép ta Rem câu lệnh là được. Chép xong lại bỏ Rem đi. Khi hoàn thiện bạn viết code khoá mở đàng hoàng có mật khẩu hẳn hoi.
Tạm thời dùng code sau là được

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CutCopyMode = False
End Sub
Bạn chép vào dưới code đã có và thoát ra.Giờ bạn xem có chép được không?
 
Mình gửi bạn mã khóa mở chế độ Copy
 

File đính kèm

Mình gửi bạn mã khóa mở chế độ Copy
Bác Sealand ơi em đang sử tính năng cảnh báo lỗi sai số lớn nhưng trường hợp nhập 20 số EUT và REF trước sau đó mới nhập giá trị trong cell E22 --> E26 thì phần cảnh báo bỏ qua.
Bác có cách nào chặn được trường hợp này luôn không. gì người nhập cũng thường làm ngược lại.
Xin cảm ơn!
 
Để ghi lại thời gian nhập liệu mình dùng hàm như sau: Ở F2=IF(ISBLANK(E2),"",NOW()) (xin xem file đính kèm cho rõ), tuy nhiên khi mình fill cells thì có vấn đề là mỗi lần mình điền giá trị cho E3, E4, E5 thì thời gian ở F3,F4 cũng tự động thay đổi theo, và khi đó F3 = F4 = F5. Có bác nào thạo thì giúp mình với.
Tks các bác nhiều!
 

File đính kèm

Trước hết mình bỏ lock các ô từ B3-K3 để có 10 ô nhập dữ liệu. Sau khi protect sheet thì chỉ nhập được 10 ô này mà thôi. Các trang trí màu mè không đề cập nữa. Khi mình nhập vào 1 ô thì phát sinh sự kiện Worksheet change (Bảng tính thay đổi). Sự kiện cũng báo cho biết đổi tại ô nào. Như vậy ta chỉ việc gán cho phía dưới =Time hoặc now() là được.
Giờ thì ta vào code cụ thể. Nhấn Alt+F11--> chọn sheet1-->Bạn sẽ thấy code sau


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 3 Then 'Nếu dòng thay đổi =3
Sheet1.Unprotect 'Tạm bỏ Protect
Target.Offset(1, 0) = Time 'Set ô phía duói =time
Sheet1.Protect 'Khóa lai
Sheet1.EnableSelection = xlUnlockedCells 'Cho phép chọn ô không khóa
End If
End Sub

Bạn cứ xem có gì hỏi lại sau

bạn cho hỏi tí, phần set time chỉ ghi lại thời gian là giờ, phút
bạn có cách nào để ghi lại cả ngày, tháng, năm không
nếu có thể tách thành 1 ô ngày và 1 ô giờ thì càng tốt
 
Đơn giản chỉ vậy thôi mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect (target, range (“A1:A100”)) is nothing then
Exit sub
End if
If Target.Value <> "" Then
Target.Offset(, 1) = Time & "_" & Date
End if
End sub
 
Đơn giản chỉ vậy thôi mà
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect (target, range (“A1:A100”)) is nothing then
Exit sub
End if
If Target.Value <> "" Then
Target.Offset(, 1) = Time & "_" & Date
End if
End sub
Sao không dùng hàm Now mà phải nối Time và Date?
 
Nhờ các anh em giúp đoạn code thực hiện lệnh (có trong file). Cảm ơn anh em nhiều!
 

File đính kèm

Bạn xem file đính kèm đúng ý bạn không nhé !
Cảm ơn ban Ngoai Thanh nhiều. Có vấn đề: trong file đúng có rất nhiều Sheet cấu trúc như nhau, muốn cho code có tác dụng với tất cả các Sheet thì thay code như thế nào mong bạn chỉ giúp (Thông cảm mình không được học VBA)
 
Cảm ơn ban Ngoai Thanh nhiều. Có vấn đề: trong file đúng có rất nhiều Sheet cấu trúc như nhau, muốn cho code có tác dụng với tất cả các Sheet thì thay code như thế nào mong bạn chỉ giúp (Thông cảm mình không được học VBA)
Chiều mình đi vắng nên không hồi âm cho bạn được . Nếu các sheet kết cấu giống nhau thì bạn chỉ cần đặt chuột vào tên sheet bấm phải chuột chọn Move or copy kích chọn create a copy rồi sửa tên sheet theo ý mình . Hoặc bấm All+F11 copy code sang sheet mới .
 
Em chào các bác
Các bác cho em hỏi, có cách nào để tự động ghi lại giá trị của hàm NOW không ạ ? E cần là khi lập phiếu thì gia trị= NOW, sau này mở ra thì ở một cel khác vẫn lưu giá trị tại thời điểm lập phiếu. E cảm ơn
 
hj a

phải chi file của a thêm được ngày tháng năm nữa ok hơn ak a. nếu them được cho e xin với nha trinhvinhtai123@gmail.com
cam ơn a trước nha
 
Sao Không UNDO được khi nhập code này vào VBE:

Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
For Each Cll In Intersect(Target, [A:A])
If Cll <> "" Then
Cll.Offset(, 1) = Format(Now, "hh:mm AM/PM")
Else
Cll.Offset(, 1).ClearContents
End If
Next
End Sub
 
+-+-+-+Xin các Pro cho hỏi trong excel có cách nào ghi lại thời gian nhập liệu vào một cell không?
Dữ liệu gổm 10 giá trị được bố trí theo dòng hàng ngang
VD: khi nhập dữ liệu vào cell A1 thì cell A2 sẽ ghi nhận lại thời gian nhập vào và nhập liệu vào cell B1 thì B2 sẽ ghi lại thời gian nhập.
Rất mong nhận được sự quan tâm và trả lời của các A/C.
Xin cảm ơn nhiều!
=IF(A1="","",IF(A2="",NOW(),A2))
mìnhđang sài công thức này, bạn vào file -> formulas ticks vào enable interative calculation là xong
1591270776096.png1591270776096.png
 
các anh chị giúp em với ạ. em đàng dùng đoạn Code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("A:A"), Target) Is Nothing Then
If Range("A" & Target.Row).Value = "" Then
Range("I" & Target.Row).ClearContents
Else
Range("I" & Target.Row).Value = Now
End If
End If
End Sub
Để khi nào dữ liệu ở Cột A được nhập thì sẽ hiện thời gian nhập tại cột i. Code chạy khá ổn nhưng em có 1 vấn đề là khi em xóa 1 dòng phía trên thì tất cả những dòng phía dưới đều cập nhật lại thời gian hiện tại theo CODE. ai có cách nào ngăn được việc cập nhật lại thời gian khi mình xóa dòng không ạ1.PNG2.PNG
 

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

Back
Top Bottom