Em nhờ các bác viết giúp em hàm tìm kiếm và di chuyển, em cảm ơn!

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

hiv174

Thành viên chính thức
Tham gia
12/7/17
Bài viết
89
Được thích
13
Giới tính
Nam
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!
 

File đính kèm

.
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.
 
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?
1664243708288.png
 
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
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)
 
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.


1664248344864.png
 

File đính kè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
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 ah
 
em xin phép chuyển bài sang mảng lập trình với excel hoặc admin có thể chuyển giúp em được không ? em xin lỗi vì chưa nắm rõ quy trình em cảm ơn!
 
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
 

File đính kè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
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.
Bài đã được tự động gộp:

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
em cảm ơn bác rất nhiều, code chạy rất êm ạ
 
Lần chỉnh sửa cuối:
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.
 
Phầ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
 
Phầ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
em cảm ơn bác ah
 
Web KT

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

Back
Top Bottom