Cách chuyển dữ liệu từ sheet này sang sheet khác thỏa mãn điều kiện (1 người xem)

  • Thread starter Thread starter worm90
  • Ngày gửi Ngày gửi

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

worm90

Thành viên mới
Tham gia
20/4/12
Bài viết
4
Được thích
2
Gửi các anh chị,
Em đang làm 1 file để quản lý tình trạng các lô hàng nhập.
Em đang rất cần lời khuyên, trợ giúp về cách chuyển dữ liệu thỏa mãn điều kiện.
Em gửi các anh chị file tham khảo.
Trong file, VD, ở Sheet Status, cột status "D" em chọn từ list. Nếu em chọn "hàng đã về kho" thì tự động mặc nhiên cả dòng được chuyển sang sheet "Finished P.O"
Em cảm ơn trước ạ.
 

File đính kèm

Gửi các anh chị,
Em đang làm 1 file để quản lý tình trạng các lô hàng nhập.
Em đang rất cần lời khuyên, trợ giúp về cách chuyển dữ liệu thỏa mãn điều kiện.
Em gửi các anh chị file tham khảo.
Trong file, VD, ở Sheet Status, cột status "D" em chọn từ list. Nếu em chọn "hàng đã về kho" thì tự động mặc nhiên cả dòng được chuyển sang sheet "Finished P.O"
Em cảm ơn trước ạ.
PHP:
Sub xoa()
Dim Sarr, Arr, i As Long, k As Long, kq(1 To 10000, 1 To 5)
With Sheets("Status")
    Sarr = .Range(.[A3], .[A65000].End(xlUp)).Resize(, 5).Value2
End With
ReDim kq1(1 To UBound(Sarr, 1), 1 To 5)
With Sheets("Finished P.O")
    For i = 1 To UBound(Sarr, 1)
        If Sarr(i, 4) Like "*" & "kho" & "*" Then
            k = k + 1
            For j = 1 To UBound(Sarr, 2)
                kq(k, j) = Sarr(i, j)
            Next
       Else
            k = k + 1
            For j = 1 To UBound(Sarr, 2)
                kq1(k, j) = Sarr(i, j)
            Next
        End If
    Next
    .[A3:E10000].ClearContents
    If k Then
        .[A3].Resize(k, 5).Value = kq
    End If
End With
With Sheets("Status")
    .[A3:E65000].ClearContents
    If k Then
        Sheet1.[A3].Resize(k, 5).Value2 = kq1
    End If
End With
End Sub
Mình chưa kịp test, bạn xem thử có được ko
or bạn thử dùng đoạn này xem sao
PHP:
Option Explicit
Sub Xoa()
Dim Rng As Range, i As Long, cll As Range
Set Rng = Sheets("Status").Range("A3:D" & Sheets("Status").[D65000].End(xlUp).Row)
For Each cll In Rng
     If cll.Offset(, 3).Value Like "*" & "kho" & "*" Then        
            cll.EntireRow.Cut Sheets("Finished P.O").Range("A3")   
     End If
Next
With Sheets("Status").UsedRange
    For i = 1 To Rng.Rows.Count
        If WorksheetFunction.Count(.Cells(i, 1).EntireRow) = 0 Then
            .Cells(i, 1).EntireRow.Delete
        End If
    Next
End With
Set Rng = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Gửi các anh chị,
Em đang làm 1 file để quản lý tình trạng các lô hàng nhập.
Em đang rất cần lời khuyên, trợ giúp về cách chuyển dữ liệu thỏa mãn điều kiện.
Em gửi các anh chị file tham khảo.
Trong file, VD, ở Sheet Status, cột status "D" em chọn từ list. Nếu em chọn "hàng đã về kho" thì tự động mặc nhiên cả dòng được chuyển sang sheet "Finished P.O"
Em cảm ơn trước ạ.
Bạn Copy Code 1 sau vào Sheet Status:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim vung As Range
Set vung = Range([D3], [D65536].End(xlUp))
Application.EnableEvents = False
If Not Intersect(Target, vung) Is Nothing Then
If Right(Target.Activate, 3) <> "kho" Then
Cutdulieu23
End If
End If
Application.EnableEvents = True
End Sub[/GPECODE]
Bạn Copy Code 2 vào Module của File:
[GPECODE=vb]Sub Cutdulieu23()
Dim WsTim As String
WsTim = Sheets("Finished P.O").Name
ActiveCell.EntireRow.Cut Sheets(WsTim).[A65536].End(xlUp).Offset(1, 0)
ActiveCell.EntireRow.Delete
End Sub[/GPECODE]
Nếu bạn không biết làm các bước trên thì bạn Download File ở dưới đính kèm.
 

File đính kèm

Bạn Copy Code 1 sau vào Sheet Status:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim vung As Range
Set vung = Range([D3], [D65536].End(xlUp))
Application.EnableEvents = False
If Not Intersect(Target, vung) Is Nothing Then
If Right(Target.Activate, 3) <> "kho" Then
Cutdulieu23
End If
End If
Application.EnableEvents = True
End Sub[/GPECODE]
Bạn Copy Code 2 vào Module của File:
[GPECODE=vb]Sub Cutdulieu23()
Dim WsTim As String
WsTim = Sheets("Finished P.O").Name
ActiveCell.EntireRow.Cut Sheets(WsTim).[A65536].End(xlUp).Offset(1, 0)
ActiveCell.EntireRow.Delete
End Sub[/GPECODE]
Nếu bạn không biết làm các bước trên thì bạn Download File ở dưới đính kèm.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Dim vung As Range, clls As Range
    If Not Intersect(Target, Range([D2], [D65536].End(xlUp))) Is Nothing Then
                    Set vung = Intersect(Target, Range([D2], [D65536].End(xlUp)))
                For Each clls In vung
                    If clls.Value Like "*" & "kho" & "*" Then
                           clls.EntireRow.Cut Sheets("Finished P.O").Range("A65000").End(xlUp).Offset(1, 0)
                           clls.EntireRow.Delete
                    End If
    
                Next
             End If
    Application.EnableEvents = True
End Sub
Nếu đã đùng sự kiện thì duyệt qua cell luôn nhẩy, đỡ phải qua target.
Bạn chủ thớt Alt+F11 ( kích vào sheet Status, chép code trên vào, khi nhập diễn giải có kho thì được yêu cầu luôn). Cách của hùng 2412 cũng hợp lý nhé
 
Lần chỉnh sửa cuối:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Dim vung As Range, clls As Range
    If Not Intersect(Target, Range([D2], [D65536].End(xlUp))) Is Nothing Then
                    Set vung = Intersect(Target, Range([D2], [D65536].End(xlUp)))
                For Each clls In vung
                    If clls.Value Like "*" & "kho" & "*" Then
                           clls.EntireRow.Cut Sheets("Finished P.O").Range("A65000").End(xlUp).Offset(1, 0)
                           clls.EntireRow.Delete
                    End If
    
                Next
             End If
    Application.EnableEvents = True
End Sub
Nếu đã đùng sự kiện thì duyệt qua cell luôn nhẩy, đỡ phải qua target.
Bạn chủ thớt Alt+F11 ( kích vào sheet Status, chép code trên vào, khi nhập diễn giải có kho thì được yêu cầu luôn). Cách của hùng 2412 cũng hợp lý nhé
Chủ thớt có nói là: Nếu em chọn "hàng đã về kho" thì tự động mặc nhiên cả dòng được chuyển sang sheet "Finished P.O" => Vì thế cứ có ô nào Hàng đã về kho là cắt vào Sheet bên kia hết rồi còn đâu, dùng vòng lặp làm gì cho tốn thêm thời gian hả bạn.
Còn trong File vẫn còn ô có từ là Hàng đã về kho chẳng qua là chủ thớt muốn để đó để làm ví dụ minh họa mà thôi.
 
Chủ thớt có nói là: Nếu em chọn "hàng đã về kho" thì tự động mặc nhiên cả dòng được chuyển sang sheet "Finished P.O" => Vì thế cứ có ô nào Hàng đã về kho là cắt vào Sheet bên kia hết rồi còn đâu, dùng vòng lặp làm gì cho tốn thêm thời gian hả bạn.
Còn trong File vẫn còn ô có từ là Hàng đã về kho chẳng qua là chủ thớt muốn để đó để làm ví dụ minh họa mà thôi.
Đồng ý với bạn , nhưng chỉ muốn nói thêm là thường Target và vùng range thường cho vào range luôn cho nhanh (nói về cách viết thôi). Còn như của bạn là hợp lý
 
Gửi các anh chị,
Em đang làm 1 file để quản lý tình trạng các lô hàng nhập.
Em đang rất cần lời khuyên, trợ giúp về cách chuyển dữ liệu thỏa mãn điều kiện.
Em gửi các anh chị file tham khảo.
Trong file, VD, ở Sheet Status, cột status "D" em chọn từ list. Nếu em chọn "hàng đã về kho" thì tự động mặc nhiên cả dòng được chuyển sang sheet "Finished P.O"
Em cảm ơn trước ạ.

Đã có nhiều cao thủ VBA để xử lý, tất nhiên là ra được kết quả rất chính xác.
Tuy nhiên nhiều bạn mới làm exel sẽ khó hiểu và làm chủ số liệu nếu bê vào sử dụng mà không hiểu thuật toán. . Tôi nghĩ, bài này có thể dùng cách cổ điển là kẻ cột phụ, để giải quyết được, tất nhiên yêu cầu của bạn sẽ khác đi một tí.
bạn thử tham khảo file đính kèm.
 

File đính kèm

Em thật lòng cảm ơn các anh chị nhé! Em "cảm ơn" mỏi tay luôn íz mà vẫn chưa thấy đủ.
Cảm ơn anh, chị đã nhiệt tình - lần nữa- nhé @$@!^%
 
Bài viết rất bổ ích, chân thành cảm ơn.
 

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

Back
Top Bottom