Giúp tạo hàm phát hiện dữ liệu thay đổi (1 người xem)

Liên hệ QC

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

khoaspkt

Thành viên mới
Tham gia
26/4/13
Bài viết
16
Được thích
0
Như tiêu đề, nhờ mọi người giúp viết 1 code tạo hàm mới, ghi nhận sự kiện thay đổi dữ liệu
Ví dụ: Mình thay đổi dữ liệu ở ô A1, ô B2 có giá trị là TRUE, nếu không có thay đổi gì thì mặc định là FALSE. Cấu trúc hàm mình cần như công thức sau:
B2=AnyChange(A1). Hàm "AnyChange" là hàm mình cần viết mới
Mong mọi người giúp đỡ.
 
Như tiêu đề, nhờ mọi người giúp viết 1 code tạo hàm mới, ghi nhận sự kiện thay đổi dữ liệu
Ví dụ: Mình thay đổi dữ liệu ở ô A1, ô B2 có giá trị là TRUE, nếu không có thay đổi gì thì mặc định là FALSE. Cấu trúc hàm mình cần như công thức sau:
B2=AnyChange(A1). Hàm "AnyChange" là hàm mình cần viết mới
Mong mọi người giúp đỡ.

Dùng hàm thì ko biết làm sao, dùng sự kiện thì thử vậy xem
Mã:
Dim OLD_VAL As Double
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
OLD_VAL = [B1]
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NEW_VAL
If Target.Address = "$B$1" Then
    NEW_VAL = [B1]
    MsgBox OLD_VAL = NEW_VAL
End If
End Sub
 
Upvote 0
Dùng hàm thì ko biết làm sao, dùng sự kiện thì thử vậy xem
Mã:
Dim OLD_VAL As Double
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
OLD_VAL = [B1]
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim NEW_VAL
If Target.Address = "$B$1" Then
    NEW_VAL = [B1]
    MsgBox OLD_VAL = NEW_VAL
End If
End Sub

Cảm ơn bạn đã quan tâm. Mình đã dùng sự kiện như bạn nói. Nó chỉ áp dụng tại 1 cell hoặc row, column định trước. Vì thế mình mới dùng hàm cho linh hoạt
 
Upvote 0
Cảm ơn bạn đã quan tâm. Mình đã dùng sự kiện như bạn nói. Nó chỉ áp dụng tại 1 cell hoặc row, column định trước. Vì thế mình mới dùng hàm cho linh hoạt

Fải hiểu thế nào về khái niệm "linh hoạt" của bạn đây?
Có nghĩa là thay đổi vài ô trong vùng đã sử dụng của trang tính; Điều này có thể đạt được nhờ 1 hay 1 vài trang tính khác chuyên fục vụ cho cho việc thay đổi; Nhưng dù vậy cũng chưa chắc ổn!
 
Upvote 0
Fải hiểu thế nào về khái niệm "linh hoạt" của bạn đây?
Có nghĩa là thay đổi vài ô trong vùng đã sử dụng của trang tính; Điều này có thể đạt được nhờ 1 hay 1 vài trang tính khác chuyên fục vụ cho cho việc thay đổi; Nhưng dù vậy cũng chưa chắc ổn!

Linh hoạt tức là mình có thể sử dụng hàm đó dùng kèm với nhiều hàm khác để phục vụ nhiều mục đích khác nhau. Ví dụ, ghi lại thời gian cập nhật dữ liệu, ghi lại những dữ liệu đã từng cập nhật...
 
Upvote 0
Như tiêu đề, nhờ mọi người giúp viết 1 code tạo hàm mới, ghi nhận sự kiện thay đổi dữ liệu
Ví dụ: Mình thay đổi dữ liệu ở ô A1, ô B2 có giá trị là TRUE, nếu không có thay đổi gì thì mặc định là FALSE. Cấu trúc hàm mình cần như công thức sau:
B2=AnyChange(A1). Hàm "AnyChange" là hàm mình cần viết mới
Mong mọi người giúp đỡ.
Bạn có thể nói thật rõ về cách hoạt động của hàm AnyChange() được không? Ví dụ:
+ Hàm này sẽ chỉ trả về giá trị(TRUE) tại ô liền kế phía phải của ô bị thay giá trị hay có thể...????
 
Upvote 0
Bạn có thể nói thật rõ về cách hoạt động của hàm AnyChange() được không? Ví dụ:
+ Hàm này sẽ chỉ trả về giá trị(TRUE) tại ô liền kế phía phải của ô bị thay giá trị hay có thể...????
Không bạn, hàm Anychange(cell) có đối số là cell (ô cần kiểm tra sự thay đổi) và trả về TRUE tại ô ghi công thức.
 
Upvote 0
Đây là file mình tìm được cũng trên diễn đàn này, nhưng nó là Sub
Private Sub Worksheet_Change(ByVal Target As Range)If Target.Row = 3 Then
Target.Offset(1, 0) = Time
End If
End Sub
Và Sub này chỉ kiểm tra dữ liệu ở dòng 3 và lưu giờ vào dòng dưới 1 hàng (hàm Target.Offset(1,0)). Ý mình muốn là nó phải là hàm (Function) và kiểm tra ô bất kỳ và ghi lại thay đổi vào ô công thức. Kiểu dữ liệu trả về là Boolan (kiểu true fasle ấy - mình ko biết dzụ này)
 

File đính kèm

Upvote 0
Đây là file mình tìm được cũng trên diễn đàn này, nhưng nó là Sub

Và Sub này chỉ kiểm tra dữ liệu ở dòng 3 và lưu giờ vào dòng dưới 1 hàng (hàm Target.Offset(1,0)). Ý mình muốn là nó phải là hàm (Function) và kiểm tra ô bất kỳ và ghi lại thay đổi vào ô công thức. Kiểu dữ liệu trả về là Boolan (kiểu true fasle ấy - mình ko biết dzụ này)
Nếu muốn viết hàm thì thử thế này xem sao. Lưu ý ô nào đặt công thức thì phải định dạng giá trị ô đó có kiểu "Time" nhé!
 

File đính kèm

Upvote 0
Tôi nghĩ là ko kha thi voi cách tạo hàm.
voi sub thi bạn thử bỏ luôn cái if đi, như vậy, code sẻ chạy trên bất cứ cell nào bạn chạm vào. Bạn hãy cho một ứng dụng thực tế về sự kết hợp giữa các hàm đó xem
 
Upvote 0
Không bạn, hàm Anychange(cell) có đối số là cell (ô cần kiểm tra sự thay đổi) và trả về TRUE tại ô ghi công thức.

Tình huống thế này:
- Lần đầu tiên bạn mở file, hàm AnyChange(A1) cho kết quả FALSE vì chưa có gì thay đổi ở A1
- Tiếp theo, bạn edit cell A1, đương nhiên AnyChange(A1) sẽ cho kết quả TRUE (như ý bạn) và bạn biết A1 đã thay đổi
- Tiếp theo nữa, bạn lại edit A1, AnyChange(A1) cũng lại TRUE
- Những lần sau đó AnyChange(A1) vẫn TRUE
Vậy có gì khác để bạn biết sự khác nhau giữa TRUE của lần thứ 10 với TRUE của lần thứ 9?
 
Upvote 0
Tôi nghĩ là ko kha thi voi cách tạo hàm.
voi sub thi bạn thử bỏ luôn cái if đi, như vậy, code sẻ chạy trên bất cứ cell nào bạn chạm vào. Bạn hãy cho một ứng dụng thực tế về sự kết hợp giữa các hàm đó xem
Vâng, tôi làm bên thiết kế, chạy dự toán điện trên excel, trong bảng dự toán có đơn giá, được cập nhật theo từng tháng. Khó là đơn giá rất nhiều, khoảng hơn 1000, mỗi lần cập nhật lại hết thì rất lâu, do đó, chỉ cập nhật những đơn giá nào cần thiết cho từng dự toán mà thôi. Do đó, tôi cần biết đơn giá nào đã được cập nhật tới ngày nào, nếu đơn giá đó được cập nhật lâu rồi thì phải cập nhật lại. Tóm lại, chỉ cần 1 hàm ghi nhận lại thời gian cập nhật là đã giải quyết hết vấn đề.
 
Upvote 0
Vâng, tôi làm bên thiết kế, chạy dự toán điện trên excel, trong bảng dự toán có đơn giá, được cập nhật theo từng tháng. Khó là đơn giá rất nhiều, khoảng hơn 1000, mỗi lần cập nhật lại hết thì rất lâu, do đó, chỉ cập nhật những đơn giá nào cần thiết cho từng dự toán mà thôi. Do đó, tôi cần biết đơn giá nào đã được cập nhật tới ngày nào, nếu đơn giá đó được cập nhật lâu rồi thì phải cập nhật lại. Tóm lại, chỉ cần 1 hàm ghi nhận lại thời gian cập nhật là đã giải quyết hết vấn đề.
Đã xem bài #6 của tôi chưa? Nếu bạn muốn cập nhật theo ngày tháng thì định dạng ô chứa hàm anychange là "Date"
 
Upvote 0
Tình huống thế này:
- Lần đầu tiên bạn mở file, hàm AnyChange(A1) cho kết quả FALSE vì chưa có gì thay đổi ở A1
- Tiếp theo, bạn edit cell A1, đương nhiên AnyChange(A1) sẽ cho kết quả TRUE (như ý bạn) và bạn biết A1 đã thay đổi
- Tiếp theo nữa, bạn lại edit A1, AnyChange(A1) cũng lại TRUE
- Những lần sau đó AnyChange(A1) vẫn TRUE
Vậy có gì khác để bạn biết sự khác nhau giữa TRUE của lần thứ 10 với TRUE của lần thứ 9?
Cảm ơn bạn quan tâm, hàm này không cần biết đã thay đổi lần thứ mấy, chỉ cần xác định được là có thay đổi (trong lần làm việc với file đó). Vì tôi sẽ lồng hàm khác để có kết quả mong muốn. Ví dụ, tôi muốn biết ngày cập nhật ô dữ liệu A1 và ngày đó thể hiện ở ô B2, tôi sẽ viết hàm: B2=IF(ANYCHANGE(A1),NOW(),A1).
Tóm lại, tôi cần biết thời gian mà ô A1 đã bị sửa dữ liệu, không biết có thể làm được ko với Excel?
 
Upvote 0
Đã xem bài #6 của tôi chưa? Nếu bạn muốn cập nhật theo ngày tháng thì định dạng ô chứa hàm anychange là "Date"
Thật xin lỗi, lo xem mấy bài cuối mà không để ý. File của bạn rất đúng ý của mình. Mình có xem code, nhưng không thấy code của hàm AnyChange bạn viết (xin lỗi, mình mới học VBA được mấy giờ...hic). Bạn có thể chỉ thêm tí? Cảm ơn bạn nhiều, nếu được, inbox SĐT cho mình được không, để mình có dịp cảm ơn.
 
Upvote 0
Thật xin lỗi, lo xem mấy bài cuối mà không để ý. File của bạn rất đúng ý của mình. Mình có xem code, nhưng không thấy code của hàm AnyChange bạn viết (xin lỗi, mình mới học VBA được mấy giờ...hic). Bạn có thể chỉ thêm tí? Cảm ơn bạn nhiều, nếu được, inbox SĐT cho mình được không, để mình có dịp cảm ơn.
Nhấn tổ hợp phím ALT+F11 sẽ thấy code cực kì đơn giản.
Số điện thoại bên dưới chữ kí của tôi nhé!
 
Upvote 0
Nhấn tổ hợp phím ALT+F11 sẽ thấy code cực kì đơn giản.
Số điện thoại bên dưới chữ kí của tôi nhé!

rất hay!!!
nhưng sao nó hiểu được khi gõ lại mà ko thay đổi nội dung?
ví dụ gõ lại số 20 nó ko thay đổi giờ, thực sự ko hiểu code hoạt động ra sao?
 
Upvote 0
rất hay!!!
nhưng sao nó hiểu được khi gõ lại mà ko thay đổi nội dung?
ví dụ gõ lại số 20 nó ko thay đổi giờ, thực sự ko hiểu code hoạt động ra sao?
Hàm anychange sẽ trả vế giá trị dựa vào giá trị của ô A1. Vậy nếu giá trị ô A1 không thay đổi thì giá trị của hàm anychange vẫn giữ nguyên, thế thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom