So sánh và copy dữ liệu theo điều kiện

Liên hệ QC

ffcb1900

Thành viên chính thức
Tham gia
27/7/08
Bài viết
77
Được thích
4
Mình có nhu cầu ben dươí, các bạn xem file giúp mình với:

1-User nhap 6 ky tu vao ô A1.Sheet.Ket qua


2-Neu du lieu nhap o A1.Sheet.Ket qua trung voi 6 ky tu cuoi cung (bên phải) của 1 ô trong cot A2.Sheet.Du lieu =>


Tu dong dien toan bo dong co du lieu trung o sheet.Du lieu vao dong còn trống tiếp theo ở sheet.Ket qua


Theo ví dụ:
Dong có dữ liệu trùng là dòng 4 sheet.Du lieu (mau vang)
Dong copy du lieu o sheet.Ket qua la dong 5 (mau vang)


3-Neu du lieu nhap o A1.Sheet.Ket qua không trùng voi 6 ky tu cuoi cung trong cot A2.Sheet.Du lieu => hiện thông báo: "Vui lòng nhập tay" < để cho người dùng nhập tay>
 

File đính kèm

  • Sample1.xls
    17 KB · Đọc: 24
Mình có nhu cầu ben dươí, các bạn xem file giúp mình với:

1-User nhap 6 ky tu vao ô A1.Sheet.Ket qua


2-Neu du lieu nhap o A1.Sheet.Ket qua trung voi 6 ky tu cuoi cung (bên phải) của 1 ô trong cot A2.Sheet.Du lieu =>


Tu dong dien toan bo dong co du lieu trung o sheet.Du lieu vao dong còn trống tiếp theo ở sheet.Ket qua


Theo ví dụ:
Dong có dữ liệu trùng là dòng 4 sheet.Du lieu (mau vang)
Dong copy du lieu o sheet.Ket qua la dong 5 (mau vang)


3-Neu du lieu nhap o A1.Sheet.Ket qua không trùng voi 6 ky tu cuoi cung trong cot A2.Sheet.Du lieu => hiện thông báo: "Vui lòng nhập tay" < để cho người dùng nhập tay>
Dân Excel mà giải thích không chuẩn!
1/ Ô điều kiện ở sheet <Ket qua> như bạn chú thích là A2 chứ không phải A1, vậy là ô nào?
2/ Sheet <Du lieu> không biết cột nào là cột A2? Có cột A3, A4...?
Híc! Cũng làm "thí thí", thay đổi dữ liệu ô A2 sheet <Ket qua> thử xem.
 

File đính kèm

  • Copy of Sample1.rar
    10 KB · Đọc: 51
Upvote 0
Dân Excel mà giải thích không chuẩn!
1/ Ô điều kiện ở sheet <Ket qua> như bạn chú thích là A2 chứ không phải A1, vậy là ô nào?
2/ Sheet <Du lieu> không biết cột nào là cột A2? Có cột A3, A4...?
Híc! Cũng làm "thí thí", thay đổi dữ liệu ô A2 sheet <Ket qua> thử xem.

File chạy rất tốt bạn Bate ơi. Bạn chỉnh lại giúp mình 1 chút thế này nhớ


- Ô nhập dữ liệu tìm kiếm sẽ là ô A1 của sheet Ket Qua (thay vì ô A2 như hiện nay)


- Vùng tìm kiếm dữ liệu sẽ chỉ là 5 cột dữ liệu đầu tiên (thay vì 10 như hiện nay)


- Sau khi hiện ô thông báo, khi ấn Enter thì dấu nhắc sẽ chuyển đến vị trí ô trống của cột thứ 3 từ trái sang (cột D của sheet Ket Qua) của dòng trống để user nhập dữ


Cảm ơn bạn nhé!
 
Upvote 0
File chạy rất tốt bạn Bate ơi. Bạn chỉnh lại giúp mình 1 chút thế này nhớ


- Ô nhập dữ liệu tìm kiếm sẽ là ô A1 của sheet Ket Qua (thay vì ô A2 như hiện nay)


- Vùng tìm kiếm dữ liệu sẽ chỉ là 5 cột dữ liệu đầu tiên (thay vì 10 như hiện nay)


- Sau khi hiện ô thông báo, khi ấn Enter thì dấu nhắc sẽ chuyển đến vị trí ô trống của cột thứ 3 từ trái sang (cột D của sheet Ket Qua) của dòng trống để user nhập dữ


Cảm ơn bạn nhé!
Không biết đầu óc sao sao, đọc hoài 5 chữ màu đỏ mà không chắc hiểu.
Chép đè Sub này thay Sub cũ trong Module xem sao.

PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant
    Rng = Sheets("Du lieu").Range(Sheets("Du lieu").[A2], Sheets("Du lieu").[A65000].End(xlUp)).Resize(, 5).Value
    DK = Sheet2.[A1].Value
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 6) = DK Then
        K = K + 1
        For J = 2 To 5
            Arr(1, J - 1) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheets("Ket qua").[B65000].End(xlUp).Offset(1).Resize(, 9).Value = Arr
    Else
        MsgBox "Vui Long Nhap Tay"
        Sheets("Ket qua").[D65000].End(xlUp).Offset(1).Select
    End If
End Su
 
Lần chỉnh sửa cuối:
Upvote 0
Không biết đầu óc sao sao, đọc hoài 5 chữ màu đỏ mà không chắc hiểu.
Chép đè Sub này thay Sub cũ trong Module xem sao.

PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant
    Rng = Sheets("Du lieu").Range(Sheets("Du lieu").[A2], Sheets("Du lieu").[A65000].End(xlUp)).Resize(, 5).Value
    DK = Sheet2.[A1].Value
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 6) = DK Then
        K = K + 1
        For J = 2 To 5
            Arr(1, J - 1) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheets("Ket qua").[B65000].End(xlUp).Offset(1).Resize(, 9).Value = Arr
    Else
        MsgBox "Vui Long Nhap Tay"
        Sheets("Ket qua").[D65000].End(xlUp).Offset(1).Select
    End If
End Su

Bạn BATE ơi, mình thử code mới bạn gửi nhưng ô để gõ dữ liệu cần tìm kiếm vẫn là ô A2 của sheet Ket qua chứ nhập ô A1 (sheet Ket qua) thi ko thấy chạy (dù minh thấy là code bạn đã sửa là : DK = Sheet2.[A1].Value ) ? Bạn xem giúp mình nhớ
 
Upvote 0
Bạn BATE ơi, mình thử code mới bạn gửi nhưng ô để gõ dữ liệu cần tìm kiếm vẫn là ô A2 của sheet Ket qua chứ nhập ô A1 (sheet Ket qua) thi ko thấy chạy (dù minh thấy là code bạn đã sửa là : DK = Sheet2.[A1].Value ) ? Bạn xem giúp mình nhớ
Còn 1 code trong sheet1 chắc bạn không "sửa sang" gì lại rồi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    If Target <> "" Then GPE
End If
End Sub
Xem file nhé.
 

File đính kèm

  • Sample 2.rar
    9.6 KB · Đọc: 39
Upvote 0
Còn 1 code trong sheet1 chắc bạn không "sửa sang" gì lại rồi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    If Target <> "" Then GPE
End If
End Sub
Xem file nhé.

Bate ơi, có 1 thiết sót nhỏ ở trong sheet kết quả, đó là khi tìm đc dư liệu trùng thì chỉ sao chép từ cột B sheet Du lieu mà lại ko bắt đầu từ cột A (sheet Du lieu). Ban chỉnh lại giúp mình với. Nếu bạn giúp mình ghi chú thích ngắn gọn bên cạnh dòng lệnh thì càng tốt vì sau minh cần chỉnh gì cũng có hướng dẫn của bạn rồi. Tks nhé
 
Upvote 0
Hình như code của anh Ba Tê sửa lại thế này là đúng ý của bạn nè
PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant
    Rng = Sheets("Du lieu").Range(Sheets("Du lieu").[A2], Sheets("Du lieu").[A65000].End(xlUp)).Resize(, 5).Value
    DK = Sheet2.[A1].Value
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 6) = DK Then
        K = K + 1
        For J = 1 To 5
            Arr(1, J) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheets("Ket qua").[B65000].End(xlUp).Offset(1).Resize(, 9).Value = Arr
    Else
        MsgBox "Vui Long Nhap Tay"
        Sheets("Ket qua").[D65000].End(xlUp).Offset(1).Select
    End If
End Sub
 
Upvote 0
Hình như code của anh Ba Tê sửa lại thế này là đúng ý của bạn nè
PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant
    Rng = Sheets("Du lieu").Range(Sheets("Du lieu").[A2], Sheets("Du lieu").[A65000].End(xlUp)).Resize(, 5).Value
    DK = Sheet2.[A1].Value
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 6) = DK Then
        K = K + 1
        For J = 1 To 5
            Arr(1, J) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheets("Ket qua").[B65000].End(xlUp).Offset(1).Resize(, 9).Value = Arr
    Else
        MsgBox "Vui Long Nhap Tay"
        Sheets("Ket qua").[D65000].End(xlUp).Offset(1).Select
    End If
End Sub

Oh, được rồi :D Em cảm ơn anh :D
 
Upvote 0
Hình như code của anh Ba Tê sửa lại thế này là đúng ý của bạn nè
PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant
    Rng = Sheets("Du lieu").Range(Sheets("Du lieu").[A2], Sheets("Du lieu").[A65000].End(xlUp)).Resize(, 5).Value
    DK = Sheet2.[A1].Value
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 6) = DK Then
        K = K + 1
        For J = 1 To 5
            Arr(1, J) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheets("Ket qua").[B65000].End(xlUp).Offset(1).Resize(, 9).Value = Arr
    Else
        MsgBox "Vui Long Nhap Tay"
        Sheets("Ket qua").[D65000].End(xlUp).Offset(1).Select
    End If
End Sub

Anh quanghai1969 va ban Ba Tê ơi, nếu giờ bảng dữ liệu của mình nằm ở 1 file khác thì làm thế nào thể tham chiếu đến (thay vì sheet Data trong cùng 1 file) :-S

Giúp mình với :-S
 

File đính kèm

  • Sample 2.rar
    13.3 KB · Đọc: 10
Upvote 0
Anh quanghai1969 va ban Ba Tê ơi, nếu giờ bảng dữ liệu của mình nằm ở 1 file khác thì làm thế nào thể tham chiếu đến (thay vì sheet Data trong cùng 1 file) :-S

Giúp mình với :-S
Làm cái mới còn khoẻ hơn xử lý mấy cái vụ này mệt quá
PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant, x
x = Application.FindFile
If x Then
With ActiveWorkbook.ActiveSheet
    Rng = .Range(.[A2], .[A65000].End(xlUp)).Resize(, 10).Value
   ActiveWorkbook.Close False
End With

DK = Sheet2.[A1]
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 4) = DK Then
        K = K + 1
        For J = 1 To 10
            Arr(1, J) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheet2.[B65000].End(xlUp).Offset(1).Resize(, 10).Value = Arr
    Else
        MsgBox "Pls input manually"
        Sheet2.[D65000].End(xlUp).Offset(1).Select
    End If
End If
End Sub
 
Upvote 0
Làm cái mới còn khoẻ hơn xử lý mấy cái vụ này mệt quá
PHP:
Public Sub GPE()
Dim Rng(), Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant, x
x = Application.FindFile
If x Then
With ActiveWorkbook.ActiveSheet
    Rng = .Range(.[A2], .[A65000].End(xlUp)).Resize(, 10).Value
   ActiveWorkbook.Close False
End With

DK = Sheet2.[A1]
For I = 1 To UBound(Rng, 1)
    If Right(Rng(I, 1), 4) = DK Then
        K = K + 1
        For J = 1 To 10
            Arr(1, J) = Rng(I, J)
        Next J
    End If
Next I
    If K Then
        Sheet2.[B65000].End(xlUp).Offset(1).Resize(, 10).Value = Arr
    Else
        MsgBox "Pls input manually"
        Sheet2.[D65000].End(xlUp).Offset(1).Select
    End If
End If
End Sub

Anh Hải ơi, em thấy file chưa đc ổn. Khi em mở file "File sử dụng" mà nhập 4 số vào thì có 1 bảng hiện ra để chọn file đích để tìm (neu em hiểu đúng), nếu chọn rồi thì nhập 4 số kết quả tìm đc chính xác, nhưng lại hạn chế là thế thì mỗi lần nhập em lại fai chọn file à ? Có thể tìm ở file Data mà file Data ko mở, giống như chế độ Paste Link trong excel, tự link dù k mở file ko anh?

Trường hợp của em thế này:
-hàng ngày em tải 1 file dữ liệu từ server về máy tính (trong ví dụ tương ứng với file Data)
-File "File sử dụng" theo ví dụ sẽ là file em sử dụng trong suốt ngày làm việc. Em đã thử cách là chọn toàn bộ dữ liệu ở file "Data" rồi Paste Link vào 1 sheet (giả sử là sheet A) trong file "File sử dụng" để làm nguồn tìm kiếm. Về ý tưởng và tiện ích thì cái này ok nhưng code mà anh và bạn Bate cho em lại ko tìm đc dữ liệu trong sheet A. Nhưng nếu dữ liệu trong sheet A là dữ liệu ko fai Paste Link từ 1 file khác thì code lại tìm đc. Đó là lí do em muốn hỏi mọi ng cách link đến 1 workbook mới là vì thế.


Anh giúp em nhé
 
Upvote 0
Anh Hải ơi, em thấy file chưa đc ổn. Khi em mở file "File sử dụng" mà nhập 4 số vào thì có 1 bảng hiện ra để chọn file đích để tìm (neu em hiểu đúng), nếu chọn rồi thì nhập 4 số kết quả tìm đc chính xác, nhưng lại hạn chế là thế thì mỗi lần nhập em lại fai chọn file à ? Có thể tìm ở file Data mà file Data ko mở, giống như chế độ Paste Link trong excel, tự link dù k mở file ko anh?

Trường hợp của em thế này:
-hàng ngày em tải 1 file dữ liệu từ server về máy tính (trong ví dụ tương ứng với file Data)
-File "File sử dụng" theo ví dụ sẽ là file em sử dụng trong suốt ngày làm việc. Em đã thử cách là chọn toàn bộ dữ liệu ở file "Data" rồi Paste Link vào 1 sheet (giả sử là sheet A) trong file "File sử dụng" để làm nguồn tìm kiếm. Về ý tưởng và tiện ích thì cái này ok nhưng code mà anh và bạn Bate cho em lại ko tìm đc dữ liệu trong sheet A. Nhưng nếu dữ liệu trong sheet A là dữ liệu ko fai Paste Link từ 1 file khác thì code lại tìm đc. Đó là lí do em muốn hỏi mọi ng cách link đến 1 workbook mới là vì thế.


Anh giúp em nhé
Copy code này xem được chưa, nhưng vẫn phải bấm chuột không update remote...
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim Rng, Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant, x
Workbooks.Open ThisWorkbook.Path & "\data.xls"
With Workbooks("data.xls")
   With .ActiveSheet
      Rng = .Range(.[A2], .[A65000].End(xlUp)).Resize(, 10).Value
   End With
   .Close False
End With

DK = Sheet2.[A1]
   For I = 1 To UBound(Rng, 1)
      If Right(Rng(I, 1), 4) = DK Then
        K = K + 1
        For J = 1 To 10
            Arr(1, J) = Rng(I, J)
        Next J
      End If
   Next I
   If K Then
        Sheet2.[B65000].End(xlUp).Offset(1).Resize(, 10).Value = Arr
   Else
      MsgBox "Pls input manually"
      Sheet2.[D65000].End(xlUp).Offset(1).Select
   End If
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Copy code này xem được chưa, nhưng vẫn phải bấm chuột không update remote...
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim Rng, Arr(1 To 1, 1 To 10), I As Long, J As Long, K As Long, DK As Variant, x
Workbooks.Open ThisWorkbook.Path & "\data.xls"
With Workbooks("data.xls")
   With .ActiveSheet
      Rng = .Range(.[A2], .[A65000].End(xlUp)).Resize(, 10).Value
   End With
   .Close False
End With

DK = Sheet2.[A1]
   For I = 1 To UBound(Rng, 1)
      If Right(Rng(I, 1), 4) = DK Then
        K = K + 1
        For J = 1 To 10
            Arr(1, J) = Rng(I, J)
        Next J
      End If
   Next I
   If K Then
        Sheet2.[B65000].End(xlUp).Offset(1).Resize(, 10).Value = Arr
   Else
      MsgBox "Pls input manually"
      Sheet2.[D65000].End(xlUp).Offset(1).Select
   End If
Application.ScreenUpdating = True
End Sub

Rất tốt rồi anh Hải ơi. Vậy file data có bắt buộc fai để ở đâu để link ko anh?
 
Upvote 0
Web KT
Back
Top Bottom