Hỏi cách tìm và lọc dữ liệu (1 người xem)

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

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

beijin

Thành viên mới
Tham gia
24/7/12
Bài viết
29
Được thích
0
Giới tính
Nam
Mình có 2 sheet như file đính kèm, từ sheet 1, mình muốn lọc tất cả danh từ ở sheet 2 thì làm như thế nào?
Ví dụ cụ thể là mình muốn tìm từ sheet 2, và cho trả về kết quả ở sheet 1 như sau:
Tam Tạng ăn bánh bao -->tìm từ sheet 1 và trả về từ "Tam Trạng"
Bát Giới thích chơi game -->tìm từ sheet 1 và trả về từ "Bát Giới"
Thanks ạ
 

File đính kèm

Mình có 2 sheet như file đính kèm, từ sheet 1, mình muốn lọc tất cả danh từ ở sheet 2 thì làm như thế nào?
Ví dụ cụ thể là mình muốn tìm từ sheet 2, và cho trả về kết quả ở sheet 1 như sau:
Tam Tạng ăn bánh bao -->tìm từ sheet 1 và trả về từ "Tam Trạng"
Bát Giới thích chơi game -->tìm từ sheet 1 và trả về từ "Bát Giới"
Thanks ạ

Tôi nghĩ bài toán của bạn muốn lọc ra các danh từ tôi thấy chưa hợp lý, vì:
Ví dụ như câu: Tam Tạng ăn bánh bao thì Tam Tạng & bánh bao đều là danh từ, "ăn" là động từ
..........
Vậy nên bài này phải là lọc tên riêng( Chữ hoa) trong câu mới đúng?
 
Thanks, mục đích của em là thế ạ, phần cần lọc ra của em chính là các từ đã liệt kê ở sheet1 (Trong trg hợp thực tế thì sheet1 sẽ có rất nhiều từ cần lọc đã được liệt kê), giống với cái của anh/chị đưa ra, có thể nó kèm cả 2 từ như trên . Từ danh sách cần lọc này, em muốn tìm ở trong các câu đã có ở sheet2
 
Hiện tại mình chỉ sử dụng được vlookup để tìm các giá trị chính xác trong dữ liệu, còn các giá trị có trong câu thì mình không thể lọc ra được,mong mọi người hiến kế giúp ^^
 
Cứ từ từ để đấy tối về tôi xem giúp cho ^^
 
Tiện thể em upload lại cái ví dụ, như phulien1902 nói. Trong trường hợp ở sheet 2 có 1 ô chứa trên 2 từ cần tìm ở sheet 1 thì mình sẽ xử lý nó như thế nào? có thể hiển thị ra các cột kế bên được không?
Cụ thể trong ví dụ này :
Bát Giới cầm Bồ Cào để cào rơm
Có thể tách các từ in đậm ra được không?
 

File đính kèm

Có lẽ mình đã nhầm lẫn, không phải lọc chữ béo trong câu, mà là lọc chữ in đậm?
 
Cám ơn bạn, trong ví dụ mình in đậm để mọi người hiểu vấn đề của mình, code trên không đúng trong ví dụ mình cần làm
Bạm có thể tải file mình đính kèm, mình đang muốn lọc các từ của sheet1 ở sheet2.
Nghĩa là mình đã có 1 mớ danh từ riêng ở sheet1, các danh từ này sẽ xuất hiện ở sheet 2, sheet2 nó sẽ bao gồm rất nhiều câu văn kèm theo các danh từ đó.
Vấn đề cần làm ở đây là từ sheet 2 này, mình sẽ lọc lại cột nào chứa các danh từ riêng ở sheet 1
Xem Hình để hiểu vấn đề của mình nhé
loctu.jpg
 
Lần chỉnh sửa cuối:
Tiện thể em upload lại cái ví dụ, như phulien1902 nói. Trong trường hợp ở sheet 2 có 1 ô chứa trên 2 từ cần tìm ở sheet 1 thì mình sẽ xử lý nó như thế nào? có thể hiển thị ra các cột kế bên được không?
Cụ thể trong ví dụ này :
Bát Giới cầm Bồ Cào để cào rơm
Có thể tách các từ in đậm ra được không?


Thử hàm dài ngoằng này xem sao
Hàm mảng

sheet2
D1=IFERROR(INDIRECT("Sheet1!B"&LARGE(IFERROR(IF(SEARCH(PROPER(Sheet1!$B$1:$B$13),PROPER($B1)),ROW(Sheet1!$B$1:$B$13),0),0),COLUMNS($D$1:D1))),"")
Kết thúc ctrl+shift+enter

Copy sang ngang và xuống dưới
 

File đính kèm

Cám ơn bạn, trong ví dụ mình in đậm để mọi người hiểu vấn đề của mình, code trên không đúng trong ví dụ mình cần làm
Bạm có thể tải file mình đính kèm, mình đang muốn lọc các từ của sheet1 ở sheet2.
Nghĩa là mình đã có 1 mớ danh từ riêng ở sheet1, các danh từ này sẽ xuất hiện ở sheet 2, sheet2 nó sẽ bao gồm rất nhiều câu văn kèm theo các danh từ đó.
Vấn đề cần làm ở đây là từ sheet 2 này, mình sẽ lọc lại cột nào chứa các danh từ riêng ở sheet 1
Xem Hình để hiểu vấn đề của mình nhé
View attachment 148147

Hàm tự tạo:
PHP:
Public Function GPE(Rng1 As Range, Rng2 As Range) As String
Dim Cll As Range
For Each Cll In Rng1
    If InStr(UCase(Rng2), UCase(Cll)) Then
        GPE = GPE & Cll.Value & " "
    End If
Next
GPE = Trim(GPE)
End Function
 

File đính kèm

cảm ơn ,đúng mục đích của em rồi,có vấn đề gì em sẽ hỏi tiếp ạh
 
Tình hình là các từ cần lọc của em lớn (Từ 1000 đến 3000 từ) và dữ liệu so sánh cũng lớn (nằm ở nhiều sheet và nội dung lớn), dấn đến việc khi kéo công thức qua thì treo máy luôn, chạy được 1 chút thì tắt hẳn
Anh chị có giải pháp nào trong trường hợp của em không ạ T_T
 
Tình hình là các từ cần lọc của em lớn (Từ 1000 đến 3000 từ) và dữ liệu so sánh cũng lớn (nằm ở nhiều sheet và nội dung lớn), dấn đến việc khi kéo công thức qua thì treo máy luôn, chạy được 1 chút thì tắt hẳn
Anh chị có giải pháp nào trong trường hợp của em không ạ T_T

Có giải pháp là dùng Sub ... thay cho Function.
Thấy file gần giống thật sẽ có người giúp bạn.
 
Lần chỉnh sửa cuối:
Thử hàm dài ngoằng này xem sao
Hàm mảng

sheet2
D1=IFERROR(INDIRECT("Sheet1!B"&LARGE(IFERROR(IF(SE ARCH(PROPER(Sheet1!$B$1:$B$13),PROPER($B1)),ROW(Sh eet1!$B$1:$B$13),0),0),COLUMNS($D$1:D1))),"")
Kết thúc ctrl+shift+enter

Copy sang ngang và xuống dưới

Cũng giống như file trước, file này có 2 sheet, sheet1 là danh từ và sheet2 là nội dung ạ
Em muốn làm như của hàm này ạ
thanks anh chị đã xem !!!
 

File đính kèm

Lần chỉnh sửa cuối:
View attachment 148147
Đây là ví dụ ạ, tức là muốn lọc hết danh từ ở sheet1 ở trong sheet2

- Ví dụ không giống file thật như bài #15
- Chưa sửa "thanks anh chị đã xem !!!". Sao khoái nửa ta nửa tây vậy không biết.
PHP:
Public Sub GPE()
Dim sArr(), tArr(), dArr(), I As Long, J As Long, Tem As String
With Sheets("DanhTu")
    tArr = .Range(.[A1], .[A1].End(xlDown)).Value2
End With
With Sheets("CotTruyen")
    sArr = .Range(.[A1], .[A1].End(xlDown)).Value2
    ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
    For I = 1 To UBound(sArr, 1)
        Tem = Empty
        For J = 1 To UBound(tArr, 1)
            If InStr(UCase(sArr(I, 1)), UCase(tArr(J, 1))) Then Tem = Tem & tArr(J, 1) & " "
        Next J
        dArr(I, 1) = Trim(Tem)
    Next I
    .[B1].Resize(I - 1) = dArr
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Tách kiểu này dễ kiểu tẩu hỏa nhập ma. Bát Giới cầm bồ cào để cào rơm có thể thành Bát Giới cào rơm bồ cào (do sắp xếp thứ tự bên sheet1 quyết định) nên không khoái.
 
- Ví dụ không giống file thật như bài #15
- Chưa sửa "thanks anh chị đã xem !!!". Sao khoái nửa ta nửa tây vậy không biết.
PHP:
Public Sub GPE()
Dim sArr(), tArr(), dArr(), I As Long, J As Long, Tem As String
With Sheets("DanhTu")
    tArr = .Range(.[A1], .[A1].End(xlDown)).Value2
End With
With Sheets("CotTruyen")
    sArr = .Range(.[A1], .[A1].End(xlDown)).Value2
    ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
    For I = 1 To UBound(sArr, 1)
        Tem = Empty
        For J = 1 To UBound(tArr, 1)
            If InStr(UCase(sArr(I, 1)), UCase(tArr(J, 1))) Then Tem = Tem & tArr(J, 1) & " "
        Next J
        dArr(I, 1) = Trim(Tem)
    Next I
    .[B1].Resize(I - 1) = dArr
End With
End Sub

Rất cám ơn anh đã hỗ trợ, vụ "thanks" em xin lỗi, không để ý là ý anh muốn em sửa lại nó
em xem qua có vấn đề gì sẽ báo lại ạ
1 lần nữa rất cám ơn anh -\\/.
 
Tách kiểu này dễ kiểu tẩu hỏa nhập ma. Bát Giới cầm bồ cào để cào rơm có thể thành Bát Giới cào rơm bồ cào (do sắp xếp thứ tự bên sheet1 quyết định) nên không khoái.

Có thể chỉnh code để thành Bát Giới-Cào Rơm-Bồ Cào. (có 3 cell bên sheet 1) chẳng cần thành câu có nghĩa gì cả.(Mà tác giả cũng chẳng cần ý nghĩa, thành câu)
 
Lần chỉnh sửa cuối:
Có thể chỉnh code để thành Bát Giới-Cào Rơm-Bồ Cào. (có 3 cell bên sheet 1) chẳng cần thành câu có nghĩa gì cả.(Mà tác giả cũng chẳng cần ý nghĩa, thành câu)
Vâng cháu chỉ thấy thế thôi. Trước cháu cũng thấy thầy Ntu dùng jointtext tách nhưng chỉ cho những cụm từ liền nhau thì còn thấy hay. Hoặc một bạn muốn tách 63 tỉnh Việt Nam từ trong chuỗi còn có ý nghĩa. Còn kiểu tách vu vơ, không đầu không cuối không rõ chủ thớt định làm gì?
 
Hiện tại Sub của anh Ba Tê giải quyết được vấn đề lọc các danh từ ra 1 ô mới rồi, nhưng vẫn chưa tách các danh từ này riêng ra từng ô
Anh Ba Tê có thể xem lại hình ví dụ của em được không ạ
aaaaaaaaaaa.jpg

Mục đích của em ở đây là lọc từ sheet2 tất cả danh từ riêng được liệt kê ở sheet1 và đưa từng danh từ ra từng ô
Vấn đề đã được giải quyết ở #10, nhưng không khả thi khi dữ liệu lớn sẽ bị treo máy luôn
 
Lần chỉnh sửa cuối:
Hiện tại Sub của anh Ba Tê giải quyết được vấn đề lọc các danh từ ra 1 ô mới rồi, nhưng vẫn chưa tách các danh từ này riêng ra từng ô
Anh Ba Tê có thể xem lại hình ví dụ của em được không ạ
View attachment 149099

Mục đích của em ở đây là lọc từ sheet2 tất cả danh từ riêng được liệt kê ở sheet1 và đưa từng danh từ ra từng ô
Vấn đề đã được giải quyết ở #10, nhưng không khả thi khi dữ liệu lớn sẽ bị treo máy luôn

Xem lại file này coi sao.
 

File đính kèm

Mình có một file dữ liệu sau ( file đính kèm)
Mình muốn tạo một sheet tổng hợp các món ăn mà khi mình lick chuột vào một món nào đó ( mỗi món nằm trong 1 cell của sheet khác) thì món ăn đó sẽ xuất hiện . Mình đã dùng hyperlink rồi ( cảm thấy rất bất tiện).
Mong nhận được giúp đỡ

quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 

File đính kèm

Lần chỉnh sửa cuối:
Cám ơn anh Ba Tê, đã giải quyết được vấn đề rồi ạ, em sẽ xem và kiểm tra lại nội dung được xuất ra như thế nào. Có vấn đề gì lại hỏi anh sau&&&%$R
 
Mình có một file dữ liệu sau ( file đính kèm)
Mình muốn tạo một sheet tổng hợp các món ăn mà khi mình lick chuột vào một món nào đó ( mỗi món nằm trong 1 cell của sheet khác) thì món ăn đó sẽ xuất hiện . Mình đã dùng hyperlink rồi ( cảm thấy rất bất tiện).
Mong nhận được giúp đỡ
Bạn lưu ý đừng chen ngang topic như thế. Hơn nữa, topic cũng dài rồi, bạn nên mở topic khác dễ theo dõi, mọi người cũng dễ dàng giúp bạn hơn
 
Tiếp tục với file TìmLọcDanhTừ
Ở sheet1 em có thêm 1 cột B là những Danh Từ muốn thay thế cho Cột A tương ứng. Thay vì phải tìm và thay thế, các danh từ này có thể thay thế đồng loạt vào sheet2 được không ạ?
 

File đính kèm

Tiếp tục với file TìmLọcDanhTừ
Ở sheet1 em có thêm 1 cột B là những Danh Từ muốn thay thế cho Cột A tương ứng. Thay vì phải tìm và thay thế, các danh từ này có thể thay thế đồng loạt vào sheet2 được không ạ?

Thử thay cái cũ bằng cái này:
PHP:
Public Sub GPE()
Dim sArr(), tArr(), dArr(), I As Long, J As Long, Num As Long, MaxNum As Long
With Sheets("DanhTu")
    tArr = .Range(.[A1], .[A1].End(xlDown)).Resize(, 2).Value2
End With
With Sheets("CotTruyen")
    sArr = .Range(.[A1], .[A1].End(xlDown)).Value2
    ReDim dArr(1 To UBound(sArr, 1), 1 To 100)
    For I = 1 To UBound(sArr, 1)
        Num = 0
        For J = 1 To UBound(tArr, 1)
            If InStr(UCase(sArr(I, 1)), UCase(tArr(J, 1))) Then
                Num = Num + 1
                dArr(I, Num) = tArr(J, 2)
            End If
        Next J
        If MaxNum < Num Then MaxNum = Num
    Next I
    .[B1].Resize(I - 1, MaxNum) = dArr
End With
End Sub
 
dòng bôi đỏ là bị làm sao mọi người giúp với
Private Sub Worksheet_Activate()

Sheet80.Range("B12:B36").ClearContents
Sheet59.Range("A3:A65000").AdvancedFilter 2, , [B12], Unique:=True
Sheet80.Range("B12:B" & [B65000].End(3).Row).Sort [B11], 2
Sheet80.Range("B12:B" & [B65000].End(3).Row - 1).Sort [B11], 1
End Sub
 
Cám ơn anh Ba Tê!!!
Có thể thay trực tiếp vào sheet2 không anh Bate, tức là thay vì tao tác "find and replace" từng dòng ở sheet 2 thì mình trực tiếp thay toàn bộ vào sheet2
Ví dụ như câu đầu tiên là : [TABLE="width: 355"]
[TR]
[TD="class: xl67, width: 355"]Hay, như vậy có thể so sánh con khỉ già với Tề Thiên Đại Thánh Tôn Ngộ Không ta.
thì khi chạy sẽ thay thành:


[TABLE="width: 355"]
[TR]
[TD="class: xl67, width: 355"]Hay, như vậy có thể so sánh con khỉ già với Bá Ba Bôn Yêu Vương Ngộ Không ta.

thay trực tiếp vào cột A ở sheet2 luôn ạ[/TD]
[/TR]
[/TABLE]


[/TD]
[/TR]
[/TABLE]
 
Lần chỉnh sửa cuối:
Có thể thay trực tiếp vào sheet2 không anh Bate, tức là thay vì tao tác "find and replace" từng dòng ở sheet 2 thì mình trực tiếp thay toàn bộ vào sheet2

Hổng hiểu!
Bạn chạy thử code chưa?
-------------------
"chèn ơi"!. Hỏi rồi, trả lời rồi mới cho ví dụ.
 
Lần chỉnh sửa cuối:
Em sửa lại cho dễ hiểu ý em rồi ạ
 
Em sửa lại cho dễ hiểu ý em rồi ạ

Bạn xem lại ví dụ kết quả ở bài 31 đi. Khi nào xem ví dụ mà người khác hiểu được thì mới có cách giải quyết.
Muốn người khác hiểu rõ, chính xác yêu cầu của mình thì kết quả mẫu phải chính xác, nói rõ cái nào thay thay bằng cái nào...
Không hiểu rõ mình muốn gì làm sao người khác hiểu được.
Cám ơn anh Ba Tê!!!
Có thể thay trực tiếp vào sheet2 không anh Bate, tức là thay vì tao tác "find and replace" từng dòng ở sheet 2 thì mình trực tiếp thay toàn bộ vào sheet2
Ví dụ như câu đầu tiên là : [TABLE="width: 355"]
[TR]
[TD="class: xl67, width: 355"]Hay, như vậy có thể so sánh con khỉ già với Tề Thiên Đại Thánh Tôn Ngộ Không ta.
thì khi chạy sẽ thay thành:


[TABLE="width: 355"]
[TR]
[TD="class: xl67, width: 355"]Hay, như vậy có thể so sánh con khỉ già với Bá Ba Bôn Yêu Vương Ngộ Không ta.

thay trực tiếp vào cột A ở sheet2 luôn ạ[/TD]
[/TR]
[/TABLE]


[/TD]
[/TR]
[/TABLE]
 
Cụ thể là ở sheet1, em có 2 cột Danh Từ, Cột A là Các cột gốc, cột B là các danh từ cần thay thế cho cột A
Em muốn thay thế hàng loạt các danh từ này ở Cột A sheet2.
Bình thường thì sẽ copy từng dòng ở cột A sheet1, sau đó sang sheet2 Find and Replace giá trị cột B vào

Unnamed QQ Screenshot20151023134731.jpg

Phần này thì không liên quan gì đến phần tìm trước đâu ạ
Ví dụ 1: sau khi thay ở A1 (sheet2)
Hay, như vậy có thể so sánh con khỉ già với Tề Thiên Đại Thánh Tôn Ngộ Không ta.
-->
Hay, như vậy có thể so sánh con khỉ già với Bá Ba Bôn Yêu Vương Ngộ Không ta.
Ví dụ 2: sau khi thay ở A9 (sheet2)
Ta dùng pháp nhãn kiểm tra, Hỗn Thế Ma Vương không phải kẻ đại gian đại ác, đừng giết hắn, người này cũng là người hữu ích
--->
Ta dùng pháp nhãn kiểm tra, Lộc Lực Đại Tiên không phải kẻ đại gian đại ác, đừng giết hắn, người này cũng là người hữu ích
Unnamed QQ Screenshot20151023134945.jpg
 
Lần chỉnh sửa cuối:
Cụ thể là ở sheet1, em có 2 cột Danh Từ, Cột A là Các cột gốc, cột B là các danh từ cần thay thế cho cột A
Em muốn thay thế hàng loạt các danh từ này ở Cột A sheet2.
Bình thường thì sẽ copy từng dòng ở cột A sheet1, sau đó sang sheet2 Find and Replace giá trị cột B vào

View attachment 149295

Phần này thì không liên quan gì đến phần tìm trước đâu ạ
Ví dụ 1: sau khi thay ở A1 (sheet2)
Hay, như vậy có thể so sánh con khỉ già với Tề Thiên Đại Thánh Tôn Ngộ Không ta.
-->
Hay, như vậy có thể so sánh con khỉ già với Bá Ba Bôn Yêu Vương Ngộ Không ta.
Ví dụ 2: sau khi thay ở A9 (sheet2)
Ta dùng pháp nhãn kiểm tra, Hỗn Thế Ma Vương không phải kẻ đại gian đại ác, đừng giết hắn, người này cũng là người hữu ích
--->
Ta dùng pháp nhãn kiểm tra, Lộc Lực Đại Tiên không phải kẻ đại gian đại ác, đừng giết hắn, người này cũng là người hữu ích
View attachment 149296

1/ Sheet1: Tôn Ngộ Không --->Sheet2: Bá Ba Bôn
Bạn lại muốn Tề Thiên Đại Thánh thành Bá Ba Bôn??????????
2/ Dòng 103:
"Đứng lại! Ta phụng mệnh chủ nhân Hồng Hài Nhi, những kẻ không liên quan đều không cho qua!"
Thay Hồng Hài Nhi-->Cửu Vỹ Hồ, Vì chưa biết trong câu còn trùng với "cái quái" nào nữa không, nên tiếp tục Replace:
Cửu Vỹ Hồ-->Hao Thiên Quyển
Hao Thiên Quyển-->Như Ý Chân Tiên
Như Ý Chân Tiên-->Tập Như Hỏa
.....
Thay mệt nghỉ hay sao?
 
Lần chỉnh sửa cuối:
Vậy là không có cách thay hàng loạt mà phải tìm và thay thủ công từng dòng rồi -+*/
Em tìm thấy 1 ví dụ tìm và thay thế nhưng không biết áp dụng vào trường hợp của mình có được không

Unnamed QQ Screenshot20151023142822.jpg
 
Lần chỉnh sửa cuối:
Cho em hỏi hướng tìm và thay thế như sau có thể làm được không ạ. Sử dụng code của anh Ba Tê thao tác như sau:
Từ file TimLocDanhTu, sử dụng Code 1 sẽ lọc ra được các danh từ đã có

1.jpg

Tiếp tục dùng Code 2 dùng để lọc ra từ thay thế

2.jpg

Khi đã có các danh từ cần thay thế ở các hàng tương đương rồi, mình có thể dựa vào đó để thay vào cốt truyện của sheet2 được không ạ?
 
Cho em hỏi hướng tìm và thay thế như sau có thể làm được không ạ. Sử dụng code của anh Ba Tê thao tác như sau:
Từ file TimLocDanhTu, sử dụng Code 1 sẽ lọc ra được các danh từ đã có

View attachment 149306

Tiếp tục dùng Code 2 dùng để lọc ra từ thay thế

View attachment 149307

Khi đã có các danh từ cần thay thế ở các hàng tương đương rồi, mình có thể dựa vào đó để thay vào cốt truyện của sheet2 được không ạ?
Chỗ này cần xác định là mỗi danh từ thay 1 lần hay mấy lần
 
Dạ thay duy nhất 1 lần thôi ạ. đây là ví dụ có 100 danh từ, nhưng trên thực tế sẽ có nhiều hơn thì thao tác tay sẽ tốn nhiều thời gian và dễ sai sót, nên em muốn tìm cách thay thế khác tối ưu hơn
Trên thực tế thì cột danh từ cần thay thế nó sẽ không hẳn là giống hết với cột A. Cái ví dụ của em lúc copy vào có vẻ "hơi tào lao" rồi ^^
 
1/ Sheet1: Tôn Ngộ Không --->Sheet2: Bá Ba Bôn
Bạn lại muốn Tề Thiên Đại Thánh thành Bá Ba Bôn??????????
2/ Dòng 103:
"Đứng lại! Ta phụng mệnh chủ nhân Hồng Hài Nhi, những kẻ không liên quan đều không cho qua!"
Thay Hồng Hài Nhi-->Cửu Vỹ Hồ, Vì chưa biết trong câu còn trùng với "cái quái" nào nữa không, nên tiếp tục Replace:
Cửu Vỹ Hồ-->Hao Thiên Quyển
Hao Thiên Quyển-->Như Ý Chân Tiên
Như Ý Chân Tiên-->Tập Như Hỏa
.....
Thay mệt nghỉ hay sao?
Em đổi lại ví dụ ở cột B thành những từ không trùng với cột A thì có được không nhỉ?
 

File đính kèm

Cám ơn anh Ba Tê, em xem qua thế nào rồi có gì lại hỏi ạ -\\/.
 
Dạ thay duy nhất 1 lần thôi ạ. đây là ví dụ có 100 danh từ, nhưng trên thực tế sẽ có nhiều hơn thì thao tác tay sẽ tốn nhiều thời gian và dễ sai sót, nên em muốn tìm cách thay thế khác tối ưu hơn
Trên thực tế thì cột danh từ cần thay thế nó sẽ không hẳn là giống hết với cột A. Cái ví dụ của em lúc copy vào có vẻ "hơi tào lao" rồi ^^
Chỉ thay thế danh từ tìm thấy lần 1
Mã:
Public Sub Thay_The()
Dim Nguon, Dl, Tam1, Tam2, dic As Object
Dim r As Long, rw As Long, c As Long

Set dic = CreateObject("scripting.dictionary")
Nguon = Sheet1.Range("A1").CurrentRegion
Dl = Sheet2.Range("A1").CurrentRegion

With CreateObject("vbscript.regexp")
.Global = True
For r = 1 To UBound(Dl)
ReDim Tam1(Len(Dl(r, 1))), Tam2(Len(Dl(r, 1)))

For rw = 1 To UBound(Nguon)
.Pattern = Nguon(rw, 1)

If .test(Dl(r, 1)) Then
For c = 0 To .Execute(Dl(r, 1)).Count - 1
If Not dic.exists(.Execute(Dl(r, 1))(c).firstindex) Then
dic.Add .Execute(Dl(r, 1))(c).firstindex, ""
Tam1(.Execute(Dl(r, 1))(c).firstindex) = "#" & Nguon(rw, 1)
Tam2(.Execute(Dl(r, 1))(c).firstindex) = "#" & Nguon(rw, 2)
End If
Next c
Dl(r, 1) = Replace(Dl(r, 1), Nguon(rw, 1), "#" & Nguon(rw, 1))
End If

Next rw
Tam1 = Split(Application.Trim(Join(Tam1)), "#")
Tam2 = Split(Application.Trim(Join(Tam2)), "#")
Dl(r, 1) = Split(Dl(r, 1), "#")

For c = 0 To UBound(Tam1)
Dl(r, 1)(c) = Replace(Dl(r, 1)(c), Tam1(c), Tam2(c))
Next c
Dl(r, 1) = Join(Dl(r, 1))

dic.RemoveAll
Next r
End With

Sheet2.Range("C1", Sheet2.Range("C1000000").End(xlUp)).Clear
Sheet2.Range("C1").Resize(UBound(Dl), 1) = Dl
End Sub
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom