Tự động điền ngày tháng năm vào nếu cell bên cạnh có dử liệu (1 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Nếu tôi nhớ ko lầm thì có 1 lần, 1 bạn hỏi rằng: "làm thế nào đễ khi bạn ấy gõ dử liệu vào cột A thì cột B, cell tương ứng sẽ tự động điền ngày tháng năm vào"... Tất nhiên chúng ta có thể sử dụng hàm NOW và TODAY, nhưng sau mỗi phiên làm việc, chúng ta lại phải mất công copy ngày tháng năm ấy rồi Paste Special\Value vào trở lại (đễ tránh ngày hôm sau ngày tháng mới lại tự động cập nhật)
Tôi tình cơ tìm dc 1 code có thể đáp ứng dc nhu cầu này... Gữi các bạn tham khảo:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
            With Target(1, 2)
                .Value = Date
                .EntireColumn.AutoFit
            End With
        End If
End Sub
Nếu dử liệu của bạn ko nằm trên cột A thì sữa lại Range("A2:A100") cho phù hợp... và nếu cột điền ngày tháng ko phải là cột B thì bạn sửa nó ngay dòng With Target(1, 2) số 1 và 2 là tọa độ tương đối tính từ cell dử liệu đến cell ngày tháng... Chú ý: nếu dử liệu dc cập nhật mới thì ngày tháng sẽ dc cập nhật mới, ngược lại thì giữ nguyên ngày tháng củ
Mến
ANH TUẤN
 
Chỉnh sửa lần cuối bởi điều hành viên:
anhtuan1066 đã viết:
Nếu tôi nhớ ko lầm thì có 1 lần, 1 bạn hỏi rằng: "làm thế nào đễ khi bạn ấy gõ dử liệu vào cột A thì cột B, cell tương ứng sẽ tự động điền ngày tháng năm vào"... Tất nhiên chúng ta có thể sử dụng hàm NOW và TODAY, nhưng sau mỗi phiên làm việc, chúng ta lại phải mất công copy ngày tháng năm ấy rồi Paste Special\Value vào trở lại (đễ tránh ngày hôm sau ngày tháng mới lại tự động cập nhật)
Tôi tình cơ tìm dc 1 code có thể đáp ứng dc nhu cầu này... Gữi các bạn tham khảo:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
With Target(1, 2)
.Value = Date
.EntireColumn.AutoFit
End With
End If
End Sub

Nếu dử liệu của bạn ko nằm trên cột A thì sữa lại Range("A2:A100") cho phù hợp... và nếu cột điền ngày tháng ko phải là cột B thì bạn sửa nó ngay dòng With Target(1, 2) số 1 và 2 là tọa độ tương đối tính từ cell dử liệu đến cell ngày tháng... Chú ý: nếu dử liệu dc cập nhật mới thì ngày tháng sẽ dc cập nhật mới, ngược lại thì giữ nguyên ngày tháng củ
Mến
ANH TUẤN


Hay đấy bác ạ. Tuy nhiên nếu sửa lại dữ liệu cũ (đã có ngày tháng) thì nó cũng sửa luôn ngày tháng hiện hành.
Vậy nên chăng vẫn để ngày tháng cũ nếu đã có :

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    On error resume next
    If Target.Offset(0, 1).Value > 0 Then Exit Sub
    If Not Intersect(Target, Range("A2:A100")) Is Nothing Then Target.Offset(0, 1).Value = Date
End Sub

Dòng : If Target.Cells.Count > 1 Then Exit Sub không cần vì không thể cùng 1 lúc thay đổi nhiều cells được

Dòng : .EntireColumn.AutoFit không cần vì chỉ cần chỉnh cột 1 lần là đủ rồi, độ rộng của cột này là không đổi ( cùng là ngày tháng mà)

Thân!
 
Upvote 0
Được chứ. Ta có thề gõ dử liệu vô nhiếu hơn 1 ô cùng một lúc được. Đây nhá anh bạn dùng chuột chọn dùm 1 số ô rồi gõ cái gì đó rồi bấm Enter + Shift + Ctrl 1 lượt hoặc copy 1 ô qua nhiều ô khác bằng cách kéo con chuột. thì các ô mớI có cùng data giống nhau.

Mã:
[FONT=Verdana][SIZE=2]If Target.Cells.Count > 1 Then ....[/SIZE][/FONT]
Lý do câu trên cần thiết trong trường hợp trên vì change event không bắt được khi có thay đồi trong 2 ô hay nhiều hơn.
 
Upvote 0
Uh... cái này tùy theo yêu cầu của người dùng... Tôi nhớ lần trứớc có người yêu cầu rằng: khi họ sữa dử liệu thì ngày tháng phải cập nhật mới...
 
Upvote 0
digita đã viết:
Được chứ. Ta có thề gõ dử liệu vô nhiếu hơn 1 ô cùng một lúc được. Đây nhá anh bạn dùng chuột chọn dùm 1 số ô rồi gõ cái gì đó rồi bấm Enter + Shift + Ctrl 1 lượt hoặc copy 1 ô qua nhiều ô khác bằng cách kéo con chuột. thì các ô mớI có cùng data giống nhau.

Mã:
[FONT=Verdana][SIZE=2]If Target.Cells.Count > 1 Then ....[/SIZE][/FONT]
Lý do câu trên cần thiết trong trường hợp trên vì change event không bắt được khi có thay đồi trong 2 ô hay nhiều hơn.

Qủa là đúng như vậy. Do mình hơi vội vàng. Thanks.

Và nếu không có dòng trên cũng được, vì ta đã có dòng On Error Resume Next

Thân!
 
Upvote 0
Mr Okebab đã viết:
Qủa là đúng như vậy. Do mình hơi vội vàng. Thanks.

Và nếu không có dòng trên cũng được, vì ta đã có dòng On Error Resume Next

Thân!

Nhưng nếu có On errror resume next chặng phía trên thay cho cái câu If Target.Cells.Count > 1 Then ....(khẽ cái tay) thì coi như là phớt lờ (ignore) cái event rồi.

Nều theo cách của anh bạn thì code này đề ngày hiện hành vô ô bên phài của ô đầu tiên trong nhóm ô mới thôi. Bạn cứ thử lại coi nha..

Để bẩy lổi và undo các thay đổi thì cần sửa phần test này lại như sau:
Mã:
[FONT=Times New Roman][SIZE=3]If Target.Cells.Count > 1 Then[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]Target.Clear[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]Exit Sub[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]End If [/SIZE][/FONT]

Mến

1 câu hơi tò mò 1 chút. Sao Mr Okebab có cái tên "Bắp" vậy? Có từng buôn bán gì bắp không?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em chưa biết cách Post "bài " lên diễn đàn! nên thấy bài của bác hay và gần phù hợp với cái yêu cầu của em, .....
Chào các Pác! Nhà em có 1 vấn đề sau, mà chưa tìm ra cách làm, mong các bác ra tay giúp đỡ !
Em làm 1 file Excel để rất nhiều người sử dụng trong công việc hàng ngày, đặt ra yêu cầu là nhập liệu đầy đủ vào 1 Sheet rồi dùng Macro lưu trữ vào Sheet khác!
Chẳng hạn vùng Sheet("Sheet1").Rang("B10":"F100") sao cho:
Hoặc là: Khi chọn 1 Cell (Nhập liệu, copy, move) kế tiếp thì các Cell hoặc hàng (Trong vùng trên) trước đó không rỗng (Null), trường hợp nếu chọn thì xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu" và chuyển chuột về Null Cell đầu tiên trước đó.
Hoặc là: Khi chạy Macro thì chỉ chuyển các dòng có các cell không rỗng và xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu" và chuyển chuột về Null Cell đầu tiên trước đó.
Thanks and hope to hearing from u as soon as possible !
LTMCustoms
 
Upvote 0
ltmcustoms đã viết:
Em chưa biết cách Post "bài " lên diễn đàn! nên thấy bài của bác hay và gần phù hợp với cái yêu cầu của em, .....
...............................
Thanks and hope to hearing from u as soon as possible !
LTMCustoms
Tiếng Việt ơi là Tiếng Việt, mày trốn đi đâu rồi ??? Mà sao để tao bơ vơ một mình vậy ??????

Quả thực chưa đọc thì . . . . không hiểu. Đọc xong rồi mới biết là tại sao . . không hiểu. Chỉ bởi vì rất . . . . khó hiểu nên dẫn đến làm người đọc . . . không hiểu, vì vậy khi đọc xong người đọc đã . . . . . không hiểu lại trở thành . . . . . không hiểu luôn. Để đến bây giờ vẫn . . .. không hiểu. Thật là . . . khó hiểu.
 
Upvote 0
Em thấy đoạn code của bác Tuấn hay hay nên cũng chỉnh sữa lại một chút cho phù hợp với tình hình thời sự :-=. Ở đây, ta chỉ cần thêm 1 thông báo để người dùng có thể tùy chọn xem là có muốn chép đè ngày tháng hiện tại lên ô đã có dữ liệu k.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
    If Target(1, 2).Value <> "" Then
        vbans = MsgBox("Da co lieu roi bo. Bo co muon chep de len ko?", vbOKCancel + vbDefaultButton1)
        If vbans = vbOK Then
            With Target(1, 2)
            .Value = Date
            .EntireColumn.AutoFit
            End With
        End If
    Else
        With Target(1, 2)
            .Value = Date
            .EntireColumn.AutoFit
        End With
    End If
End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đừng chọc quê mà Bắp! Người ta đã bảo là ko biết post bài rồi mà... hi... hi... nhưng quả thật là cũng hơi hơi... bị... khó hiễu thật...
Bạn gì đó nói lại thật rỏ đi... tốt nhất là dùng toàn tiếng Việt cho nó... AO TA TA TẮM nhé... he... he..
ANH TUẤN
 
Upvote 0
Y/c User nhập đầy đủ dữ liệu

Rất cám ơn Anhtuan1066 vì đã quan tâm
Chào các Pác! Vấn đề như sau (Để đảm bảo cho 1 file Excel dữ liệu nhiều người thay nhau nhập đầy đủ hơn), mà chưa tìm ra cách làm, mong các bác ra tay giúp đỡ !
Em có 1 file (đã dùng macro) muốn thêm 1 tính năng là vùng Sheet("Sheet1").Rang("B10:F100") sao cho hoặc các bác giúp em theo 1 trong 2 phương án sau:
Phương án 1 là: Ở Sheet1 khi chọn ( có thể User nhập liệu, copy, move... Paste vào Cell đó) 1 Cell kế tiếp mà các Cell hoặc các dòng (Trong vùng trên) trước đó rỗng (Null), thì xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu" và chuyển chuột về ô rỗng (Empty Cell) trước đó để bổ sung dữ liệu thiếu.
Hoặc là P/a 2: Tạo Macro chỉ chuyển các dòng có các cell không rỗng sang Sheet2, nếu có 1 ô hoặc dòng rỗng ở phần đã nhập liêu thì xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu" và chuyển các dòng có ô rỗng lên trên vùng bắt đầu nhập liệu đồng thời trả chuột về Empty Cell đầu tiên để User....
Thanks
 
Lần chỉnh sửa cuối:
Upvote 0
ltmcustoms đã viết:
Rất cám ơn Anhtuan1066 vì đã quan tâm
Chào các Pác! Vấn đề như sau (Để đảm bảo cho 1 file Excel dữ liệu nhiều người thay nhau nhập đầy đủ hơn), mà chưa tìm ra cách làm, mong các bác ra tay giúp đỡ !
Em có 1 file (đã dùng macro) muốn thêm 1 tính năng là vùng Sheet"Sheet1").Rang("B10":"F100") sao cho hoặc các bác giúp em theo 1 trong 2 phương án sau:
Phương án 1 là: Khi chọn 1 Cell (Nhập liệu, copy, move) kế tiếp thì các Cell hoặc hàng (Trong vùng trên) trước đó không rỗng (Null), trường hợp nếu chọn thì xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu" và chuyển chuột về ô rỗng (Null Cell) trước đó.
Hoặc là P/a 2: Khi chạy Macro thì chỉ chuyển các dòng có các cell không rỗng và xuất hiện thông báo "Bạn chưa nhập đầy đủ dữ liệu" và chuyển chuột về Null Cell trước đó.
Thanks

Tất cả vùng đó, nếu chỉ có 1 ô rỗng (empty cell) cũng xuất hiện thông báo phải không bạn ???
 
Upvote 0
Chào các bác! Hqua đầu t...óc em mông lung quá! em xin diễn đạt lại nhé: Hqua em đã đưa thêm cái code của bác Anhtuan1066 để bổ sung vào file nhập liệu hàng ngày của cơ quan em! và muốn nhờ các bác giúp đỡ thêm:
khi User nhập liệu (có thể là copy, cut, move, dữ liệu rồi paste vào cell đó) nếu để sót ô rỗng bên trái hoặc các dòng bên trên (thuộc vùng đã nhập liệu) thì xuất hiện thông báo và chuyển con trỏ vào ô rỗng để nhập bổ sung dữ liệu. Hoặc là cách khác: em đã dùng 1 macro chuyển dữ liệu thuộc vùng đã nhập liệu sang 1 sheet khác, nhưng phần chưa làm được là chỉ chọn các dòng có đầy đủ dữ liệu chuyển đi, dòng chưa nhập đủ thì đưa lên dòng trên để user bổ sung tiếp.
Em rất mê Macro ! Các bác giành thời gian giúp em nha !
 
Upvote 0
Xin chào các anh ! Em cũng đang gặp một vấn đề về nhập ngày, tháng trong excel không biết xử lý thế nào. Mọi người giúp em với ạ !

Em muốn điền ngày tháng cho cột giao hàng căn cứ vào giá trị âm đầu tiên của dòng tham chiếu.
Ví dụ: Đối với mã AA1: số lượng đặt hàng căn cứ vào L/t là -389800 nhưng giá trị âm đầu tiên là -14800 --> ngày giao hàng là ngày cuối tuần của tuần trước là 2013-01-04. Chi tiết file đính kèm
Mọi người Có cách nào điền ngày giao hàng này nhanh ko ạ ?? giúp em với !
2. Về hàm iNDEX(I8:V8,$C8), có cách nào để đánh dấu màu cho ô giá trị tìm được của hàm ở phía bên phải không ạ ?

Như đối với ví dụ trên thì giá trị cần bội màu là -389800 địa chỉ ô L8.
Hiện tại em đang đánh dấu màu thủ công rất là lâu và mất thời gian. Các bác có cách nào nhanh hơn giúp em với ạ !

Xin được sự trợ giúp của mọi người ! Cám ơn mọi người nhiều !
 

File đính kèm

Upvote 0
Em thấy đoạn code của bác Tuấn hay hay nên cũng chỉnh sữa lại một chút cho phù hợp với tình hình thời sự :-=. Ở đây, ta chỉ cần thêm 1 thông báo để người dùng có thể tùy chọn xem là có muốn chép đè ngày tháng hiện tại lên ô đã có dữ liệu k.

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:A100")) Is Nothing Then
    If Target(1, 2).Value <> "" Then
        vbans = MsgBox("Da co lieu roi bo. Bo co muon chep de len ko?", vbOKCancel + vbDefaultButton1)
        If vbans = vbOK Then
            With Target(1, 2)
            .Value = Date
            .EntireColumn.AutoFit
            End With
        End If
    Else
        With Target(1, 2)
            .Value = Date
            .EntireColumn.AutoFit
        End With
    End If
End If
End Sub
cảm ơn anh e trên diễn đàn, nhưng mình có chút thắc mác sau đây mong anh e giúp đỡ: với code của bác tuan và funnyzui đã sửa ở trên thì lại xuất hiện vấn đề là " nếu ô đó đã có dữ liệu rồi, giờ ta xóa đi (tức cell rỗng)" thì ngày tháng tương ứng cột b không mất đi. thứ 2 để code của funnyzui chạy ko hiểu sao bị lỗi dòng ".EntireColumn.AutoFit" Mong các bác giúp đỡ
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom