Xin code lọc trùng và copy ra một ô mới ạ!

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

daiphong2601

Thành viên mới
Tham gia
21/10/23
Bài viết
6
Được thích
4
Nhờ các bác giúp đỡ với ạ!
Bài toán là em có một bảng tính, em muốn lọc trùng dữ liệu của 2 ô ở 2 cột khác nhau và xuất ra 1 cột mới (không phân biệt chữ in thường và in hoa ạ)
Ví dụ:
- Ô A1: TH, DA, C10, B28, 40
- Ô B1: TH, C10, C12, DA, 40
Thì sẽ lọc trùng và xuất ra ô C1: TH, DA, C10, 40
tương tự cho các ô tiếp theo của 2 cột. Cảm ơn các bác ạ
 
Lần chỉnh sửa cuối:
Hehe, tớ có thể hiểu tâm tư của bạn, và ai cũng có lần đầu, lần 3, lần 5, lần 7, ...
Nên tớ giúp tí, nhưng chưa thể bẫy lỗi hết các khả năng, nên nên và nên hiểu những lời khuyên chân thành để không mất đi sự giúp đỡ của những người có khả năng tốt hơn.
...
Giải thuật này còn thô quá.
1. Cần so sánh chiều dài 2 mảng. Vòng lặp duyệt mảng nhỏ hơn (vì nó nhanh hết hơn)
2. Nếu chuỗi ngắn thì so sánh bằng InStr hiệu quả hơn tra mảng. Nếu dài thì dùng hàm Match hiệu quả hơn.
 
Upvote 0
nên giải thích sử dụng trong code
Không nên giải thích, dùng, rồi gặp lỗi gì sẽ hỏi thêm.
Giải thuật này còn thô quá.
1. Cần so sánh chiều dài 2 mảng. Vòng lặp duyệt mảng nhỏ hơn (vì nó nhanh hết hơn)
2. Nếu chuỗi ngắn thì so sánh bằng InStr hiệu quả hơn tra mảng. Nếu dài thì dùng hàm Match hiệu quả hơn.
Giải thuật này đáp ứng theo cách hiểu cực kỳ phổ thông mà bác (trường phái dò lô tô).
1. Em tưởng 2 mảng (3 và 10 giá trị) thì vòng lặp nó đều là 3x10=30. Nếu duyệt mảng 3 trước thì nhanh hơn hả bác?
2. Để em nghĩ đã.

PS: Bài này mà chuỗi dài chắc phải đổi cách tra khác, ví dụ chuỗi 1 nó thế này thì toi:
TH, ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ...TH, ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ...TH,, ..., ..., ..., ..., ..., ..., ..., ..., ..., ...
 
Upvote 0
Không nên giải thích, dùng, rồi gặp lỗi gì sẽ hỏi thêm.

Giải thuật này đáp ứng theo cách hiểu cực kỳ phổ thông mà bác (trường phái dò lô tô).
1. Em tưởng 2 mảng (3 và 10 giá trị) thì vòng lặp nó đều là 3x10=30. Nếu duyệt mảng 3 trước thì nhanh hơn hả bác?
...
Nếu duyệt bằng 2 vòng lặp thì độ sử dụng năng lượng như nhau:
n*m/2
n nhỏ hơn hay m nhỏ hơn kết quả vẫn vậy.

Suy tính chỉ cho trường hợp duyệt một mảng, mỗi phần từ đem dò với cái thứ hai. (bằng chuỗi hay hàm match)
 
Upvote 0
Mã:
Option Explicit
Function trung2o(cell1 As Range, cell2 As Range)
Dim arr1, arr2
Dim i&, j&
arr1 = Split(cell1.Value, ",")
arr2 = Split(cell2.Value, ",")
For i = LBound(arr1) To UBound(arr1)
For j = LBound(arr2) To UBound(arr2)
    If arr1(i) = arr2(j) Then
    trung2o = trung2o & "," & arr1(i)
    End If
Next
Next
trung2o = Mid(trung2o, 2, Len(trung2o))
End Function
Chủ bài đăng yêu cầu là : "(không phân biệt chữ in thường và in hoa ạ)"
 
Upvote 0
Phiên bản cải tiến. --=0 --=0 --=0
Mã:
Function trung2oV2(cell1 As Range, cell2 As Range)
Dim arr1
Dim i&
arr1 = Split(Replace(cell1.Value, " ", "") & ",", ",")
For i = LBound(arr1) To UBound(arr1)
    If InStr(1, cell2.Value, arr1(i), vbTextCompare) Then
        trung2oV2 = trung2oV2 & ", " & arr1(i)
    End If
Next
trung2oV2 = Mid(trung2oV2, 3, Len(trung2oV2) - 4)
End Function
 
Upvote 0
Phiên bản cải tiến. --=0 --=0 --=0
Mã:
Function trung2oV2(cell1 As Range, cell2 As Range)
Dim arr1
Dim i&
arr1 = Split(Replace(cell1.Value, " ", "") & ",", ",")
For i = LBound(arr1) To UBound(arr1)
    If InStr(1, cell2.Value, arr1(i), vbTextCompare) Then
        trung2oV2 = trung2oV2 & ", " & arr1(i)
    End If
Next
trung2oV2 = Mid(trung2oV2, 3, Len(trung2oV2) - 4)
End Function


Đọc lại bài #11 của bác @HieuCD .

.
 
Upvote 0
Đọc lại bài #11 của bác @HieuCD .

.
Hehe, em đọc rồi mà đến lúc viết code 1 lại quên mất, sửa lại chút thôi nhưng để chiều lòng tác giả và diễn đàn thì những code trên đáp ứng được đề bài và mong muốn của các bên bác ạ.
 
Upvote 0
Hehe, em đọc rồi mà đến lúc viết code 1 lại quên mất, sửa lại chút thôi nhưng để chiều lòng tác giả và diễn đàn thì những code trên đáp ứng được đề bài và mong muốn của các bên bác ạ.
Trong nhóm "mong muốn" ấy chẳng có tôi. Quan niệm của tôi là mấy người hỏi bài hời hợt thế này thì code voi cũng như code chuột.
Tôi chỉ mách cho bạn vài cách làm việc với mảng và chuỗi thôi. Không ai có thể vỗ ngực bảo mình "biết lập trình" mà không rành mảng và chuỗi cả.

Chỗ mà tôi muốn dẫn bạn tới là chỉ cần khai báo một mảng thôi.

a1 = Split(chuỗi 1,... ' bắt buộc là vì mảng a1 sẽ được referenced nhiều lần
For Each CH In Split(chuỗi 2... ' chỉ cần 1 lần cho nên chả cần chứa, VBA chứa và xóa giùm
If Not IsError(Application.Match(CH, a1, 0)) Then ' có trùng
' làm cái gì đó ở đây
Next CH
' hiệu quả hóa hơn bàng cách so sánh và chọn chuoic nào làm a1
' và nếu chuỗi rất dài thì sort a1, hàm Match hoạt động hiệu quả hơn
 
Upvote 0
Trong 4 người đó, có tôi không Chú @VetMini.
Nói thiệt, nhiều lúc cũng phải thông cảm cho tụi nhỏ. Giờ nhắn tin hơi bị nhiều, nên phải viết tắt cho kịp tiến trình, tiến độ của thời cuộc.
Với lại, thời đại Tây vs Ta lẫn lọn, lâu lâu chem một vài câu tiếng Anh thì thấy bình thường (trước giờ không thấy ai chem tiếng TQ hay Thái vô zạ ta!)
Tôi thì không phản ánh gì chủ thớt, vì tôi cũng như chủ thớt thôi. Giờ mà viết đầy đủ, không thiếu đầu, hụt đuôi, thiếu giữa như là một cực hình vậy. Vãi lâu...
Nhưng thôi, cở mình là cơ dưới, nên vào đây Chủ thớt phải theo thời cuộc.
Nhưng tôi cũng khuyên chủ thớt 1 câu: "Ta là ta, ai cũng có cái tôi hết. Ok!"
Nói thật với anh, em với tâm lý là người đi hỏi thì cũng cầu thị lắng nghe, bác kia vào bảo sửa viết tắt, em cũng sửa. Nhưng thấy có 2 người vào bảo đọc qua thấy câu cú không ổn nên bỏ qua không giúp, trong khi em không teencode hay không chủ vị gì (viết tắt chữ "e" và "tks"). Em chỉ muốn là cái mình không biết, mình nhờ mọi người, ai không giúp thì thôi, động viên cũng được, nói mấy cái nó đáng nói một chút. Trong khi e đọc nhiều chủ đề có viết tắt, mấy người đó vẫn vào bình luận bình thường. Mấy người này đa nhân cách quá!
 
Upvote 0
Nói thật với anh, em với tâm lý là người đi hỏi thì cũng cầu thị lắng nghe, bác kia vào bảo sửa viết tắt, em cũng sửa. Nhưng thấy có 2 người vào bảo đọc qua thấy câu cú không ổn nên bỏ qua không giúp, trong khi em không teencode hay không chủ vị gì (viết tắt chữ "e" và "tks"). Em chỉ muốn là cái mình không biết, mình nhờ mọi người, ai không giúp thì thôi, động viên cũng được, nói mấy cái nó đáng nói một chút. Trong khi e đọc nhiều chủ đề có viết tắt, mấy người đó vẫn vào bình luận bình thường. Mấy người này đa nhân cách quá!
Thôi, tập trung vào vấn đề của bạn: các code viết ra đã giải quyết được chưa? Vấn đề kia tất yếu sẽ được giải tỏa nếu bạn thực sự cầu thị.

Tôi thả cái haha vì bạn viết cũng dính 1 chữ e. --=0
 
Upvote 0
Em thêm cái bo nút cho trọn vẹn:
- V1.5 mà không viết được dấu ".", VBA chết tiệt.
Cả 2 đều cập nhật B40.

PS: các bác chiêm ngưỡng thôi nhé, bắt sửa là em lại ngứa tay.
 

File đính kèm

  • 1698055685860.png
    1698055685860.png
    551.2 KB · Đọc: 13
Upvote 0
@
Em giải quyết được vấn đề rồi bác ạ
Nói thật với bạn nhé, từ bài của bạn nên mình đã làm một bài để kính nhờ các bác và các anh các chị làm giúp ở bài này nè.
Chắc chắn rằng bạn cũng đã đọc roài.
 
Upvote 0
Thôi, tập trung vào vấn đề của bạn: ...
Những người biết tập trung vào vấn đề thì dẫu không cho rằng cần bảo vệ văn hóa Việt đi nữa thì hỏi bài cũng nên rõ ràng.

Lý do không nên viết tắt (trên bề mặt khách quan, không liên quan gì đến sở thích cá nhân):
- Excel là môi trường mà a có thể hiểu là cột A, e có thể hiểu là cột E (chưa kể chính thức từ e có nghĩa là ngại).
- VBA, môi trường code, cũng là nơi sử dụng các từ viết tắt nhiều.

Lý do không nên dùng tiếng Tây (cũng bề mặt khách quan):
- Có đến vài trường phái dùng tiếng Tây. Ví dụ như dân mạng xã hội dùng vs là "với", nhưng dân biết tiếng Anh thì vs là "đối lại". Có những bối cảnh mà sự khác niệt này không quan trọng; nhưng cũng có những bối cảnh mà làm cho câu hỏi được hiểu sai.
- Có nhiều trường hợp mà từ Tây ấy có thể hiểu theo nghĩa châm biếm. Làm sao người đọc hiểu là người dùng tiếng Tây ấy chỉ biết từ Tây bồi (không biết châm biếm), hay rất giỏi (chắc chắn là châm biếm - nếu không châm biếm thì người ta sẽ dùng từ khác)

Đây là diễn đành khoa hoc, khoa học thì nên theo tiêu chuẩn. Người hỏi chịu khó dùng tiếng Việt có tiêu chuẩn không được sao mà cứ khăng khăng dùng ngôn ngữ theo ý thích mình? Ở đây ai là bên cần người bên kia hiểu rõ câu hỏi của mình?
 
Upvote 0
Lý do không nên viết tắt (trên bề mặt khách quan, không liên quan gì đến sở thích cá nhân):


...

Đây là diễn đành khoa hoc, khoa học thì nên theo tiêu chuẩn. Người hỏi chịu khó dùng tiếng Việt có tiêu chuẩn không được sao mà cứ khăng khăng dùng ngôn ngữ theo ý thích mình? Ở đây ai là bên cần người bên kia hiểu rõ câu hỏi của mình?
1. Về việc viết tắt: Chuyện này thì chắc chắn phải khắc phục rồi. Ngày xưa khi đi học, các thầy cô đã rất cẩn thận dặn dò là không được viết tắt trong các văn bản, thư từ... nhằm thể hiện sự tôn trọng của mình với người nhận. Nếu mình thích thì mình viết tắt ắt là sai mười mươi rồi. Còn nếu mình theo thói quen mà viết tắt thì phải sửa thói quen nếu tôn trọng người khác.

2. Diễn đàn GPE đâu giống cái group của Facebook. Các bạn trẻ theo thói quen cứ đem cái cách viết vô tội vạ, hỏi bài không có cứ liệu (xin lỗi 1 số bạn không nằm trong số này) từ mạng XH vào GPE, điều đó theo tôi là không chấp nhận được. Nhập gia tùy tục là nguyên tắc xưa nay mà. Nếu dễ dãi thì chả lẽ GPE ta lại giống y như 1 cái group Facebook sao?
 
Upvote 0
Web KT

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

Back
Top Bottom