Nhập dữ liệu ở cột A, tự động điền giờ (giá trị) vào cột B (2 người xem)

Liên hệ QC

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

Bảy Dzõ

Ngu Excel nhất GPE
Tham gia
18/11/09
Bài viết
565
Được thích
1,361
Nghề nghiệp
Just for daily's rice
Vấn đề của em như sau:
Ở cột A em sẽ dùng cho các bạn nhập dữ liệu vào và em muốn nếu cột A có dữ liệu thì cột B sẽ hiển thị thời gian nhập một cách tự động và chỉ là value. Nếu sử dụng hàm now() thì mỗi lần nhập thì thời gian ở cột B sẽ tự động cập nhật theo hệ thống:
Ví dụ;
A1: 3245624967 B1: 10:37am
B1: 2235961453 B2: 10:39am
Nếu A trống thì B cũng trống.

Có cách nào làm thế được ko anh? Cám ơn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Sẵn tiện đây có bài hỏi về vấn đề này, cho phép em ké một ít với ý cũng gần như thế vì sợ mở thêm topic. Vấn đề của em như sau:
Ở cột A em sẽ dùng cho các bạn nhập dữ liệu vào và em muốn nếu cột A có dữ liệu thì cột B sẽ hiển thị thời gian nhập một cách tự động và chỉ là value. Nếu sử dụng hàm now() thì mỗi lần nhập thì thời gian ở cột B sẽ tự động cập nhật theo hệ thống:
Ví dụ;
A1: 3245624967 B1: 10:37am
B1: 2235961453 B2: 10:39am
Nếu A trống thì B cũng trống.

Có cách nào làm thế được ko anh? Cám ơn.
Cái này thì dễ ẹc à, chỉ cần code sau cho sheet cần áp dụng:
Mã:
Private 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
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cái này thì dễ ẹc à, chỉ cần code sau cho sheet cần áp dụng:
[GPECODE=vb]Private 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[/GPECODE]

Cám ơn anh Nghĩa Phúc. Học được món mới... với anh thì một cái búng tay còn em ăn canh bí, cháo bí dài dài... :) Sẵn tiện anh chỉ giúp cho em nếu muốn thay đổi cột thời gian (cột B) thành cột khác ví dụ (cột F) thì đổi ở đâu thưa anh? Thân.
 
Upvote 0
Cám ơn anh Nghĩa Phúc. Học được món mới... với anh thì một cái búng tay còn em ăn canh bí, cháo bí dài dài... :) Sẵn tiện anh chỉ giúp cho em nếu muốn thay đổi cột thời gian (cột B) thành cột khác ví dụ (cột F) thì đổi ở đâu thưa anh? Thân.
Bạn sửa số 1 chỗ Cll.Offset(, 1) thành 1 số khác là được, số 1 ở đây là số cột để dịch chuyển từ cột A đến cột kết quả. Chẳng hạn sửa cột B thành cột F thì thay số 1 bởi số 5.
 
Upvote 0
Bạn sửa số 1 chỗ Cll.Offset(, 1) thành 1 số khác là được, số 1 ở đây là số cột để dịch chuyển từ cột A đến cột kết quả. Chẳng hạn sửa cột B thành cột F thì thay số 1 bởi số 5.

Cảm ơn anh em đã hiểu là làm thử được. Thân
 
Upvote 0
Cái này thì dễ ẹc à, chỉ cần code sau cho sheet cần áp dụng:
[GPECODE=vb]Private 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[/GPECODE]

Giả định rằng A1:A10 đang có dữ liệu và B1:B10 toàn bộ đều có dữ liệu =9:32:00
Thí nghiệm 1 phát bằng cách click phải dòng 5, chọn Delete ---> Điều đương nhiên dòng 6 sẽ được đôn lên thành dòng 5.
Tại thời điểm Delete, giả sử thời gian khi ấy là 9:33:00 thì B5 bây giờ sẽ sẽ từ 9:32:00 biến thành 9:33:00
Ẹc... Ẹc...
 
Upvote 0
Giả định rằng A1:A10 đang có dữ liệu và B1:B10 toàn bộ đều có dữ liệu =9:32:00
Thí nghiệm 1 phát bằng cách click phải dòng 5, chọn Delete ---> Điều đương nhiên dòng 6 sẽ được đôn lên thành dòng 5.
Tại thời điểm Delete, giả sử thời gian khi ấy là 9:33:00 thì B5 bây giờ sẽ sẽ từ 9:32:00 biến thành 9:33:00
Ẹc... Ẹc...
Ayza, còn có tình huống nghiệt ngã như vậy nữa sao?! Vậy thì phải xử lý nó thế nào anh nhỉ?
 
Upvote 0
Ayza, còn có tình huống nghiệt ngã như vậy nữa sao?! Vậy thì phải xử lý nó thế nào anh nhỉ?

Dễ mà:
Xét cột kết quả, cái nào rổng thì điền giờ, ngược lại thì.. im re
Vậy thôi
Đại khái thế này chắc được:
Mã:
If Cll <> "" Then
  If Cll.Offset(, 1) = "" Then Cll.Offset(, 1) = Format(Now, "hh:mm AM/PM")
Else
  Cll.Offset(, 1).ClearContents
End If
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Giả định rằng A1:A10 đang có dữ liệu và B1:B10 toàn bộ đều có dữ liệu =9:32:00
Thí nghiệm 1 phát bằng cách click phải dòng 5, chọn Delete ---> Điều đương nhiên dòng 6 sẽ được đôn lên thành dòng 5.
Tại thời điểm Delete, giả sử thời gian khi ấy là 9:33:00 thì B5 bây giờ sẽ sẽ từ 9:32:00 biến thành 9:33:00
Ẹc... Ẹc...

Đúng thiệt sư phụ đúng là sư phụ... Em hoàn toàn chưa nghĩ tới cái tình huống theo anh Nghĩa Phúc nói là nghiệt ngã này...
 
Upvote 0
Dễ mà:
Xét cột kết quả, cái nào rổng thì điền giờ, ngược lại thì.. im re
Vậy thôi
Đại khái thế này chắc được:
Mã:
If Cll <> "" Then
  [COLOR=#ff0000]If Cll.Offset(, 1) = "" Then Cll.Offset(, 1) = Format(Now, "hh:mm AM/PM")[/COLOR]
Else
  Cll.Offset(, 1).ClearContents
End If
Thực tế thì còn tình huống thế này: Lúc trước đã nhập nội dung vào ô A5, tại ô B5 sẽ ghi lại thời điểm lúc đó. Sau này ta lại sửa giá trị ô A5, vậy thì có lẽ thời điểm tại ô B5 phải được cập nhật theo thời điểm hiện tại chứ anh.
 
Upvote 0
Thực tế thì còn tình huống thế này: Lúc trước đã nhập nội dung vào ô A5, tại ô B5 sẽ ghi lại thời điểm lúc đó. Sau này ta lại sửa giá trị ô A5, vậy thì có lẽ thời điểm tại ô B5 phải được cập nhật theo thời điểm hiện tại chứ anh.

Vậy thì sửa ô nào thì mần ô đó đi, ai kêu For Each In... mần chi.
 
Upvote 0
Thực tế thì còn tình huống thế này: Lúc trước đã nhập nội dung vào ô A5, tại ô B5 sẽ ghi lại thời điểm lúc đó. Sau này ta lại sửa giá trị ô A5, vậy thì có lẽ thời điểm tại ô B5 phải được cập nhật theo thời điểm hiện tại chứ anh.
Trường hợp Anh nói có thể xảy ra nhưng đối với em thì tính là thời gian nhập lần đầu sẽ được ghi nhận. Trường hợp Anh đưa ra thì em sẽ học thêm được điều mới
 
Upvote 0
Vậy thì sửa ô nào thì mần ô đó đi, ai kêu For Each In... mần chi.
Sửa ô nào mần ô đó hay For Each thì cũng rứa thôi chứ có khác chi đâu anh? Chỉ là For Each thì làm được nhiều hơn thôi, chẳng hạn như mình xóa nguyên cả một vùng trên cột A, hoặc copy một vùng khác và dán vào cột A.
 
Upvote 0
Trường hợp Anh nói có thể xảy ra nhưng đối với em thì tính là thời gian nhập lần đầu sẽ được ghi nhận. Trường hợp Anh đưa ra thì em sẽ học thêm được điều mới
Vậy thì add cái giờ nhập vào mới nhất và cả luôn cái giờ trước đó để biết có chỉnh sửa thông tin
 
Upvote 0
Vậy thì add cái giờ nhập vào mới nhất và cả luôn cái giờ trước đó để biết có chỉnh sửa thông tin
Vậy thì cũng đâu có đáp ứng được cho tình huống Delete row của anh ndu. Bởi vì khi xóa hàng 5 thì hàng 6 được đôn lên trên thành hàng 5. Thực chất thì hàng 5 mới này chẳng có thay đổi gì cả, nhưng vẫn bị "add cái giờ mới nhất" vào.
 
Upvote 0
Thực tế thì còn tình huống thế này: Lúc trước đã nhập nội dung vào ô A5, tại ô B5 sẽ ghi lại thời điểm lúc đó. Sau này ta lại sửa giá trị ô A5, vậy thì có lẽ thời điểm tại ô B5 phải được cập nhật theo thời điểm hiện tại chứ anh.

Nếu cột A là những danh mục thuộc dạng DUY NHẤT thì có thể có cách
 
Upvote 0
Nếu cột A là những danh mục thuộc dạng DUY NHẤT thì có thể có cách

Cho em hỏi ý thầy là dữ liệu không lặp lại? Nếu đúng thế thì dữ liệu sẽ không lặp lại thưa thầy (đối với trường hợp em muốn áp dụng). Nó là mà an ninh của thẻ nhân viên dạng RFID cho nên ko có trường hợp bị trùng.
 
Upvote 0
Cho em hỏi ý thầy là dữ liệu không lặp lại? Nếu đúng thế thì dữ liệu sẽ không lặp lại thưa thầy (đối với trường hợp em muốn áp dụng). Nó là mà an ninh của thẻ nhân viên dạng RFID cho nên ko có trường hợp bị trùng.

Tôi cũng đoán vậy!
Mới chí có ý tưởng thôi: Là dùng Dictionaray "ghi nhớ" lại các bản ghi. Mai này có xóa, sửa gì đó thì ta sẽ tra cứu vào Dictionary này và quyết định có điền giờ hay không
(làm Dictionary hoài cũng phát ngán rồi ---> Để các cao thủ khác làm thử xem sao)
 
Upvote 0
Tôi cũng đoán vậy!
Mới chí có ý tưởng thôi: Là dùng Dictionaray "ghi nhớ" lại các bản ghi. Mai này có xóa, sửa gì đó thì ta sẽ tra cứu vào Dictionary này và quyết định có điền giờ hay không
(làm Dictionary hoài cũng phát ngán rồi ---> Để các cao thủ khác làm thử xem sao)

Sư phụ nghỉ cho tiểu đệ biểu diễn tí.

Sửa code của nghiaphuc trong notepad nên không test. Chỉ "ước lượng" bằng mắt rồi sửa thôi.

Mã:
Private 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
            If Cll <> Cll.ID Then
                Cll.Offset(, 1) = Format(Now, "hh:mm AM/PM")
                Cll.ID = Cll
            End If
        Else
            Cll.Offset(, 1).ClearContents
            Cll.ID = ""
        End If
    Next
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Web KT

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

Back
Top Bottom