Hỏi về code copy/dán lấy dữ liệu duy nhất

Liên hệ QC

tuyenbui

Thành viên mới
Tham gia
19/6/08
Bài viết
36
Được thích
15
em muốn tạo một commanbutton để khi lick vào nó sẽ coppy cột tài khoản trong dữ liệu nguồn và paster ra phần kết qua?, nhưng khi paster em chỉ muốn lấy dữ liệu duy nhất thôi (mỗi tài khoản xuất hiện 1 lần), em gửi file mẫu kèm, anh chị nào biết code chỉ em với, em chưa từng học bva chỉ mày mò thôi nên anh chị chỉ giáo dùm, em cám ơn nhìu
 
Lần chỉnh sửa cuối:
em muốn tạo một commanbutton để khi lick vào nó sẽ coppy cột tài khoản trong dữ liệu nguồn và paster ra phần kết qua?, nhưng khi paster em chỉ muốn lấy dữ liệu duy nhất thôi (mỗi tài khoản xuất hiện 1 lần), em gửi file mẫu kèm, anh chị nào biết code chỉ em với, em chưa từng học bva chỉ mày mò thôi nên anh chị chỉ giáo dùm, em cám ơn nhìu
Dùng Advanced Filter, với tùy chọn Unique Records only ---> Đâu có vấn đề gì chứ
Ví dụ:
- Vào menu Data\Filter\Advanced Filter
- Khung Listrange, quét chọn 1 cột mà bạn muốn lọc (ví dụ: $E$8:$E$53)
- Check vào mục Unique Records only rồi bấm OK
- Bảng tính sẽ được thu gọn lại, chỉ hiện ra những dòng thỏa điều kiện (tức các dòng trùng sẽ bị ẩn đi
- Giờ việc còn lại chỉ là copy phần dử liệu bạn nhìn thấy rồi paste sang nơi khác
- Paste xong, vào lại menu Data\Filter\Advanced Filter, chọn Show All
===> Nếu muốn tạo code thì hãy record macro quá trình này
 
Upvote 0
Dùng Advanced Filter, với tùy chọn Unique Records only ---> Đâu có vấn đề gì chứ
Ví dụ:
- Vào menu Data\Filter\Advanced Filter
- Khung Listrange, quét chọn 1 cột mà bạn muốn lọc (ví dụ: $E$8:$E$53)
- Check vào mục Unique Records only rồi bấm OK
- Bảng tính sẽ được thu gọn lại, chỉ hiện ra những dòng thỏa điều kiện (tức các dòng trùng sẽ bị ẩn đi
- Giờ việc còn lại chỉ là copy phần dử liệu bạn nhìn thấy rồi paste sang nơi khác
- Paste xong, vào lại menu Data\Filter\Advanced Filter, chọn Show All
===> Nếu muốn tạo code thì hãy record macro quá trình này

thì biết là vậy nhưng e cần đoạn code để làm việc này, em có hiểu cái record macro bác nói là gì đâu em chưa từng học bva em ghi rõ vậy rồi mà, anh chị nào biết chỉ dùm em với
 
Upvote 0
thì biết là vậy nhưng e cần đoạn code để làm việc này, em có hiểu cái record macro bác nói là gì đâu em chưa từng học bva em ghi rõ vậy rồi mà, anh chị nào biết chỉ dùm em với
Bạn thử đoạn code sau của anh Ndu96081631:(Bạn tạo 1 sheet mới để lấy dữ liệu nhé)
HTML:
Sub TKNo()
'Tao TKNo
  Sheet2.[a4:b2000].ClearContents
  With Range(S08.[e9], S08.[e65536].End(xlUp))
    .AdvancedFilter 1, , , True
    .Offset(1).Copy: Sheet1.Range("B4").PasteSpecial 3
  End With
  S08.ShowAllData
  With Range(Sheet1.[B4], Sheet1.[B4].End(xlDown))
    .Offset(, -1).Value = Evaluate("=Row(R1:R2000)")
 
  End With
 
  'Tao TKCo
  Sheet2.[d4:e2000].ClearContents
  With Range(S08.[g9], S08.[g65536].End(xlUp))
    .AdvancedFilter 1, , , True
    .Offset(1).Copy: Sheet1.Range("e4").PasteSpecial 3
  End With
  S08.ShowAllData
  With Range(Sheet1.[e4], Sheet1.[e4].End(xlDown))
    .Offset(, -1).Value = Evaluate("=Row(R1:R2000)")
 
  End With
 
End Sub
Hoặc để dể hình dung bạn xem trong file đính kèm nhé
Cũng có thể tham khảo ở đây: http://www.giaiphapexcel.com/forum/showthread.php?t=19194
Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
thì biết là vậy nhưng e cần đoạn code để làm việc này, em có hiểu cái record macro bác nói là gì đâu em chưa từng học bva em ghi rõ vậy rồi mà, anh chị nào biết chỉ dùm em với
Record macro giống như 1 máy quay phim, thu lại toàn bộ quá trình bạn làm để mai này "chiếu" lại (tức bắt chước y chang những gì bạn làm)
- Trước khi thao tác quá trình lọc bằng Advanced Filter, bạn hãy vào menu Tools\Macro\Record new macro ...
- Vậy là kể từ thời điểm này, những gì bạn làm trên bảng tính sẽ được ghi thành code...
- Để kết thúc quá trình thu macro, bấm nút Stop Recording
- Để chạy macro đã thu, bấm Alt + F8, chọn tên macro rồi bấm nút Run
- Để xem code, bấm Alt + F11
Đơn giản vậy thôi mà ---> Học VBA bắt đầu bằng công việc đơn giản này đây!
 
Upvote 0
Cảm ơn bạn domfootwear và anh Ndu96081631 mình sẽ tìm hiều cách tạo code này, mình cũng đang mày mò học BVA, nhưng domfootwear cho mình hỏi nhé doạm code bạn dưa sao lại không lấy được tài khoản 4111 ở dòng thứ 9, mặc dù dữ liệu tham chiếu trong code là bắt đầu từ dòng 9...
 
Upvote 0
Cảm ơn bạn domfootwear và anh Ndu96081631 mình sẽ tìm hiều cách tạo code này, mình cũng đang mày mò học BVA, nhưng domfootwear cho mình hỏi nhé doạm code bạn dưa sao lại không lấy được tài khoản 4111 ở dòng thứ 9, mặc dù dữ liệu tham chiếu trong code là bắt đầu từ dòng 9...
Bạn xem file này thử có đúng ý không nha!
 

File đính kèm

Upvote 0
Record macro giống như 1 máy quay phim, thu lại toàn bộ quá trình bạn làm để mai này "chiếu" lại (tức bắt chước y chang những gì bạn làm)
- Trước khi thao tác quá trình lọc bằng Advanced Filter, bạn hãy vào menu Tools\Macro\Record new macro ...
- Vậy là kể từ thời điểm này, những gì bạn làm trên bảng tính sẽ được ghi thành code...
- Để kết thúc quá trình thu macro, bấm nút Stop Recording
- Để chạy macro đã thu, bấm Alt + F8, chọn tên macro rồi bấm nút Run
- Để xem code, bấm Alt + F11
Đơn giản vậy thôi mà ---> Học VBA bắt đầu bằng công việc đơn giản này đây!

Hôm nay mới hé sáng lên một vấn đề này !
Như bài #5 anh đã làm !Anh Ndu có thể minh họa lại các thao tác đó dùm em không ?
Làm sao anh để cái đoạn code anh vừa ghi vào đó được ?
Em làm gióng anh chỉ như trên thì em thu được đoạn code trong File đính kèm ,anh xem thử .
Thanks anh !
Cho em hỏi luôn vậy là tất cả những đoạn code có trong các File khác củng ghi lại thế này hả anh ?
Thanks!!!!!!!!!
Mốt chúc gì đó hé sáng lên ......
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hôm nay mới hé sáng lên một vấn đề này !
Như bài #5 anh đã làm !Anh Ndu có thể minh họa lại các thao tác đó dùm em không ?
Làm sao anh để cái đoạn code anh vừa ghi vào đó được ?
Em làm gióng anh chỉ như trên thì em thu được đoạn code trong File đính kèm ,anh xem thử .
Thanks anh !
Cho em hỏi luôn vậy là tất cả những đoạn code có trong các File khác củng ghi lại thế này hả anh ?
Thanks!!!!!!!!!
Mốt chúc gì đó hé sáng lên ......
Hình như bạn Record macro bị sai thì phải... Nếu làm đúng như tôi nói thì ta sẽ thu được đoạn code như sau:
PHP:
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 30/03/2009 by ndu
'

'
    Range("A4:A9").Select
    Range("A4:A9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C4" _
        ), Unique:=True
End Sub
Giờ việc cuối cùng là sửa VÙNG DỬ LIỆU NGUỒN và VÙNG KẾT QUẢ cho đúng với file
Vùng nguồn = Range("A4:A9")
Vùng Kết quả = Range("C4")
Và cũng có thể rút gọn code trên thành:
PHP:
Sub Macro1()
    Range("A4:A9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("C4"), Unique:=True
End Sub
Bỏ qua đoạn .Select
Rút gọn thêm lần nữa
PHP:
Sub Macro1()
    Range("A4:A9").AdvancedFilter 2, , [C4], True
End Sub
Và cuối cùng nên quan tâm thêm 1 chuyện: Xóa vùng tại C4 trước khi chạy Advanced Filterxác định vùng tại cột A theo kiểu "động" ---> Nó sẽ thế này:
PHP:
Sub Macro1()
    Range([C4], [C65536].End(xlUp)).Clear
    Range([A4], [A65536].End(xlUp)).AdvancedFilter 2, , [C4], True
End Sub
XONG!
-------------------------
Thêm 1 vài "râu ria" mà người dùng thường đòi hỏi:
- Như ta đã biết advanced filter khi lọc ra xong nó lấy luôn cả Format của vùng nguồn... đây là chuyện mà có khi người dùng không thích ---> Tôi muôn tô màu cho vùng lọc ra theo kiểu khác cơ
- Vậy thay vì dùng:
Range([C4], [C65536].End(xlUp)).Clear ---> Clear toàn bộ dử liệu, kể cả Format
ta thay bằng
Range([C4], [C65536].End(xlUp)).ClearContents ---> Chỉ clear dử liệu, không clear Format
- Còn Advanced Filter, thay vì lọc thẳng sang vùng kết quả, ta thay bằng kiểu lọc tại chổ... sau đó mới copy dử liệu sang vủng kết quả
PHP:
Sub Macro1()
    Range([C4], [C65536].End(xlUp)).ClearContents
    With Range([A4], [A65536].End(xlUp))
      .AdvancedFilter 1, , , True
      .Copy: Range("C4").PasteSpecial 3
    End With
End Sub
(Khác nhau ở số 1 và 2 trong Advanced Filter nha)
- Thêm 1 cái nữa: Show All Data sau khi lọc xong:
PHP:
Sub Macro1()
    Range([C4], [C65536].End(xlUp)).ClearContents
    With Range([A4], [A65536].End(xlUp))
      .AdvancedFilter 1, , , True
      .Copy: Range("C4").PasteSpecial 3
    End With
    ActiveSheet.ShowAllData
End Sub
KẾT THÚC ---> Thêm gì nữa là tùy
Với code cuối này thì ta có thể chủ động Format vùng đích trước (chẳng hạn dùng Conditional Formating)
 
Lần chỉnh sửa cuối:
Upvote 0
to ndu96081631
Mình dang áp dụng theo bài bạn hướng dẫn để lọc dữ liệu duy nhất. Xin cho mình hỏi thêm nếu giả sử mình muốn vừa lọc tài khoản duy nhất vừa cộng các số tiền trong cột số tiền theo tài khoản duy nhất đó thì phải làm thế nào. Cảm ơn ban nhiều.
 
Upvote 0
to ndu96081631
Mình dang áp dụng theo bài bạn hướng dẫn để lọc dữ liệu duy nhất. Xin cho mình hỏi thêm nếu giả sử mình muốn vừa lọc tài khoản duy nhất vừa cộng các số tiền trong cột số tiền theo tài khoản duy nhất đó thì phải làm thế nào. Cảm ơn ban nhiều.

Hướng giải quyết như sau :

1. Trích lọc duy các phần tử duy nhất và dán vào một vùng mới.
2.Sau đó dùng for cho chạy lần lượt qua các phần tử vừa mới trích lọc duy nhất xong, chạy đến phần tử nào thì ta dùng hàm Sumif để cộng thành tiền ứng với phần tử này và vùng dữ liệu cũ.
 
Upvote 0
to hoangdanh282vn
Mình yếu về VBA lắm nên không thể làm theo hướng dẫn của bạn được. Bạn có thể giúp mình được không. Mình cảm ơn nhiều.
 
Upvote 0
to ndu96081631
Mình dang áp dụng theo bài bạn hướng dẫn để lọc dữ liệu duy nhất. Xin cho mình hỏi thêm nếu giả sử mình muốn vừa lọc tài khoản duy nhất vừa cộng các số tiền trong cột số tiền theo tài khoản duy nhất đó thì phải làm thế nào. Cảm ơn ban nhiều.
Với yêu cầu này không nên dùng Advanced Filter mà nên là Consolidate bạn à!
Nghiên cứu xem! (Consolidate nằm trong menu Data)
 
Upvote 0
Web KT

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

Back
Top Bottom