.em có file excel muốn nội dung di chuyển có điều kiện ( mô tả có trong file đính kèm) nhờ các bác viết giúp em, em xin cảm ơn!
em cảm ơn để em thử nhé!.
Bạn có thể dùng Advanced Filter.
.
em cảm ơn nhưng em chỉ có dữ liệu ở cột G có trong dữ liệu của cột A mà lại muốn di chuyển cả cột B, C có dòng tương ứng ah. cột G có thể chứa cả nghìn dữ liệu khác nhau ah..
Bạn có thể dùng Advanced Filter.
.
di chuyển có nghĩa là những mã này là duy nhất ạ (trong đó VD: B220, C220 sẽ gắn liền với A220) nên khi 1 mã được di chuyển( cut-paste) đến cột K,L,M ( mã này thuộc cột G-là duy nhất) thì các thông tin gắn liền với mã đó cũng được di chuyển(cut-paste) theo ạMình thì mình ko hiểu lắm yêu cầu của bạn(vì bạn dùng từ "Di chuyển") mà theo mình đọc kết quả trong file thì ý bạn là:khi nhập 1 Mã sp ở cột G thì cột K -L-M sẽ nhảy ra thông tin của tất cả các mã xuất hiện ở cột G. Mà nếu vậy theo mình là dùng hàm dò tìm. Ơ đây bạn có thêm yêu cầu là "bấm thì mới di chuyển" thì mình muốn biết tại sao lại cần thao tác này, có phải bạn muốn giữ giá trị cột K-L-M không đổi (cho đến khi bạn quyết định đổi)không?
View attachment 281356
ý nghĩa của công việc này là 1 ngày sẽ có rất nhiều loại trứng được xuất, nhập. và mỗi khay hoặc mỗi lô sẽ được lấy ra ngẫu nhiên 1 lượng trứng nhất định để kiểm tra an toàn. ngoài số được lấy ra ngẫu nhiên ở kho thì còn có 1 lượng được chuyển về hoặc được thu hồi để kiểm tra lại ( như thế sản phẩm có ngoài thị trường là giả hoặc sản phẩm thu hồi không đúng thông tin cũng có thể là giả ah)Mình thì mình ko hiểu lắm yêu cầu của bạn(vì bạn dùng từ "Di chuyển") mà theo mình đọc kết quả trong file thì ý bạn là:khi nhập 1 Mã sp ở cột G thì cột K -L-M sẽ nhảy ra thông tin của tất cả các mã xuất hiện ở cột G. Mà nếu vậy theo mình là dùng hàm dò tìm. Ơ đây bạn có thêm yêu cầu là "bấm thì mới di chuyển" thì mình muốn biết tại sao lại cần thao tác này, có phải bạn muốn giữ giá trị cột K-L-M không đổi (cho đến khi bạn quyết định đổi)không?
View attachment 281356
em cảm ơn bác! chính xác ý nghĩa là như vậy bác ah chỉ là chưa xóa được dòng trắng để thu lại dữ liệu thôi bác ah( cái này e làm thủ công được ah) cảm ơn bác và mong nhận được thêm hỗ trợ từ các anh chị em trong nhóm ạVì ở đây toàn cao thủ nên em vẫn phải nói trước là em rất gà mờ, em tiến bộ thông qua yêu cầu trong công việc thôi. Thì yêu cầu "bấm nút"->cut&paste những mã trong cột G của bác , em chỉ làm dc bằng macro. Bác xem có dùng dc không.
Em làm nó một cách thủ công, và do cột G+K-L-M của bác đặt cùng 1 bảng cho nên khi cut&paste ô đi nó sẽ bị trống chứ không đẩy nội dung bên dưới lên được. Bác để khác bảng đi để mình delete luôn dòng.
Cột G+K+L+M em set giới hạn copy 999 dòng nha.
Cột D check là để filter những item có trong cột G.
ô E1 để tránh lỗi (không xóa)-trong trường hợp những item bác bỏ ở cột G ko tồn tại trong cột A thì em sẽ bị lỗi filter nên cần ô này.
Hoạt động như sau:Khi bác bỏ item vào cột G và bấm thì cột K+L+M sẽ cập nhật dữ liệu theo cột G. sau đó K+L+M sẽ chuyển thành dạng value.
Cột D filter những item cần move và xóa nội dung ô 3 cột A+B+C.
View attachment 281361
bác xem lại giúp là chỉ có một phần di chuyển được( giá trị cần di chuyển có trên K không có trên A) còn một phần là copy (giá trị cần di chuyển tồn tại cả trên cột A và K) (vd: em đưa vào 5000 mã thì sau khi chạy macros tổng số dòng chứa mã ở cột A + cột K = 5000 nhưng sau khi xóa hết dòng trống thì tổng số mã là 5150, như thế có 150 mã không được xóa trên cột A ạ)Vì ở đây toàn cao thủ nên em vẫn phải nói trước là em rất gà mờ, em tiến bộ thông qua yêu cầu trong công việc thôi. Thì yêu cầu "bấm nút"->cut&paste những mã trong cột G của bác , em chỉ làm dc bằng macro. Bác xem có dùng dc không.
Em làm nó một cách thủ công, và do cột G+K-L-M của bác đặt cùng 1 bảng cho nên khi cut&paste ô đi nó sẽ bị trống chứ không đẩy nội dung bên dưới lên được. Bác để khác bảng đi để mình delete luôn dòng.
Cột G+K+L+M em set giới hạn copy 999 dòng nha.
Cột D check là để filter những item có trong cột G.
ô E1 để tránh lỗi (không xóa)-trong trường hợp những item bác bỏ ở cột G ko tồn tại trong cột A thì em sẽ bị lỗi filter nên cần ô này.
Hoạt động như sau:Khi bác bỏ item vào cột G và bấm thì cột K+L+M sẽ cập nhật dữ liệu theo cột G. sau đó K+L+M sẽ chuyển thành dạng value.
Cột D filter những item cần move và xóa nội dung ô 3 cột A+B+C.
View attachment 281361
cột A có 5316 dòng cột G có 947 dòng cần lấy để di chuyển, sau khi chạy thì cột k có đủ dòng cần lọc nhưng khi lấy 5316-947 thì phải = 4369 nhưng em xóa hết dòng trống và xem lại thì cột A còn 5017 dòng bác ahVì ở đây toàn cao thủ nên em vẫn phải nói trước là em rất gà mờ, em tiến bộ thông qua yêu cầu trong công việc thôi. Thì yêu cầu "bấm nút"->cut&paste những mã trong cột G của bác , em chỉ làm dc bằng macro. Bác xem có dùng dc không.
Em làm nó một cách thủ công, và do cột G+K-L-M của bác đặt cùng 1 bảng cho nên khi cut&paste ô đi nó sẽ bị trống chứ không đẩy nội dung bên dưới lên được. Bác để khác bảng đi để mình delete luôn dòng.
Cột G+K+L+M em set giới hạn copy 999 dòng nha.
Cột D check là để filter những item có trong cột G.
ô E1 để tránh lỗi (không xóa)-trong trường hợp những item bác bỏ ở cột G ko tồn tại trong cột A thì em sẽ bị lỗi filter nên cần ô này.
Hoạt động như sau:Khi bác bỏ item vào cột G và bấm thì cột K+L+M sẽ cập nhật dữ liệu theo cột G. sau đó K+L+M sẽ chuyển thành dạng value.
Cột D filter những item cần move và xóa nội dung ô 3 cột A+B+C.
View attachment 281361
Option Explicit
Sub test()
Dim lr&, lr2&, i&, k&, arr(), f, rng, u As Range
lr = Cells(Rows.Count, "A").End(xlUp).Row
lr2 = Cells(Rows.Count, "G").End(xlUp).Row
ReDim arr(1 To lr2 - 1, 1 To 3)
rng = Range("G2:G" & lr).Value
For i = 1 To UBound(rng)
Set f = Range("A2:A" & lr).Find(rng(i, 1))
If Not f Is Nothing Then
k = k + 1
arr(k, 1) = f: arr(k, 2) = f.Offset(, 1): arr(k, 3) = f.Offset(, 2)
If k = 1 Then
Set u = Range(Cells(f.Row, "A"), Cells(f.Row, "C"))
Else
Set u = Union(u, Range(Cells(f.Row, "A"), Cells(f.Row, "C")))
End If
End If
Next
If k > 0 Then
Range("K2:M10000").ClearContents
Range("K2").Resize(k, 3).Value = arr
u.Delete shift:=xlUp
End If
End Sub
em cảm ơn bác em đã tìm thấy chỗ cần sửa và chỉ còn tự xóa dòng trắng nữa là xong ah.Vì ở đây toàn cao thủ nên em vẫn phải nói trước là em rất gà mờ, em tiến bộ thông qua yêu cầu trong công việc thôi. Thì yêu cầu "bấm nút"->cut&paste những mã trong cột G của bác , em chỉ làm dc bằng macro. Bác xem có dùng dc không.
Em làm nó một cách thủ công, và do cột G+K-L-M của bác đặt cùng 1 bảng cho nên khi cut&paste ô đi nó sẽ bị trống chứ không đẩy nội dung bên dưới lên được. Bác để khác bảng đi để mình delete luôn dòng.
Cột G+K+L+M em set giới hạn copy 999 dòng nha.
Cột D check là để filter những item có trong cột G.
ô E1 để tránh lỗi (không xóa)-trong trường hợp những item bác bỏ ở cột G ko tồn tại trong cột A thì em sẽ bị lỗi filter nên cần ô này.
Hoạt động như sau:Khi bác bỏ item vào cột G và bấm thì cột K+L+M sẽ cập nhật dữ liệu theo cột G. sau đó K+L+M sẽ chuyển thành dạng value.
Cột D filter những item cần move và xóa nội dung ô 3 cột A+B+C.
View attachment 281361
em cảm ơn bác rất nhiều, code chạy rất êm ạDùng thử củ chuối này:
PHP:Option Explicit Sub test() Dim lr&, lr2&, i&, k&, arr(), f, rng, u As Range lr = Cells(Rows.Count, "A").End(xlUp).Row lr2 = Cells(Rows.Count, "G").End(xlUp).Row ReDim arr(1 To lr2 - 1, 1 To 3) rng = Range("G2:G" & lr).Value For i = 1 To UBound(rng) Set f = Range("A2:A" & lr).Find(rng(i, 1)) If Not f Is Nothing Then k = k + 1 arr(k, 1) = f: arr(k, 2) = f.Offset(, 1): arr(k, 3) = f.Offset(, 2) If k = 1 Then Set u = Range(Cells(f.Row, "A"), Cells(f.Row, "C")) Else Set u = Union(u, Range(Cells(f.Row, "A"), Cells(f.Row, "C"))) End If End If Next If k > 0 Then Range("K2:M10000").ClearContents Range("K2").Resize(k, 3).Value = arr u.Delete shift:=xlUp End If End Sub
bác có thể giúp em thêm chút nữa là nếu giá trị cột G bị trùng lặp thì chỉ trả về 1 giá trị tại các cột K,L,M được không ah, em cảm ơn bác.Dùng thử củ chuối này:
PHP:Option Explicit Sub test() Dim lr&, lr2&, i&, k&, arr(), f, rng, u As Range lr = Cells(Rows.Count, "A").End(xlUp).Row lr2 = Cells(Rows.Count, "G").End(xlUp).Row ReDim arr(1 To lr2 - 1, 1 To 3) rng = Range("G2:G" & lr).Value For i = 1 To UBound(rng) Set f = Range("A2:A" & lr).Find(rng(i, 1)) If Not f Is Nothing Then k = k + 1 arr(k, 1) = f: arr(k, 2) = f.Offset(, 1): arr(k, 3) = f.Offset(, 2) If k = 1 Then Set u = Range(Cells(f.Row, "A"), Cells(f.Row, "C")) Else Set u = Union(u, Range(Cells(f.Row, "A"), Cells(f.Row, "C"))) End If End If Next If k > 0 Then Range("K2:M10000").ClearContents Range("K2").Resize(k, 3).Value = arr u.Delete shift:=xlUp End If End Sub
If k > 0 Then
Range("K2:M10000").ClearContents
Range("K2").Resize(k, 3).Value = arr
'thêm dòng này
Range("K2").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes
'-------------
u.Delete shift:=xlUp
End If
em cảm ơn bác ahPhần cuối thêm 1 dòng:
PHP:If k > 0 Then Range("K2:M10000").ClearContents Range("K2").Resize(k, 3).Value = arr 'thêm dòng này Range("K2").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes '------------- u.Delete shift:=xlUp End If