lọc các từ

  • Thread starter Thread starter nguyennb
  • Ngày gửi Ngày gửi
Liên hệ QC

nguyennb

Thành viên hoạt động
Tham gia
23/10/07
Bài viết
103
Được thích
32
Giải sử mình có các từ dạng như sau: "blue" , "red', green. "yellow ".... có hàm nào chỉ lấy ra các từ chỉ màu sắc: blue, red, green, yellow. Loại bỏ hết các kí hiệu không phải là kí tự chữ cái phía trước và sau của một cụm tự. Các bạn đã gặp tình huống này chia sẻ cùng mình giải pháp với
 
Giải sử mình có các từ dạng như sau: "blue" , "red', green. "yellow ".... có hàm nào chỉ lấy ra các từ chỉ màu sắc: blue, red, green, yellow. Loại bỏ hết các kí hiệu không phải là kí tự chữ cái phía trước và sau của một cụm tự. Các bạn đã gặp tình huống này chia sẻ cùng mình giải pháp với
Nếu các từ của bạn tuân thủ theo nguyên tắc nhất định; trước và sau có ký tự không phải là chữ thì Bạn thử file sau xem nhé. Thân
 

File đính kèm

Upvote 0
Bạn dùng công thức sau an toàn hơn khi có lỗi chính tả (Ví dụ ô A1 chứa chuỗi cần chuyển đổi):

=SUBSTITUTE(A1,CHAR(34),"")
 
Upvote 0
Bạn dùng công thức sau an toàn hơn khi có lỗi chính tả (Ví dụ ô A1 chứa chuỗi cần chuyển đổi):

=SUBSTITUTE(A1,CHAR(34),"")
Anh ơi công thức của anh chỉ loại bỏ ký tự " nếu là "....,,,Black" và nhiều ký tự khác không phải là Chữ cái chắc phải dùng cách khác anh nhỉ?. Thân
 
Upvote 0
Cái này dùng VBA cho nó lẹ ---> InStr chuổi với các từ khóa, thấy "có" là THU GOM
Tuy nhiên, nếu có file đính kèm của tác giả sẽ dể hình dung hơn (làm cho cố, mất công người ta bào.. SAI)
 
Upvote 0
Câu trả lời của mình là căn cứ vào ví dụ của chủ Topic thôi, còn lọc chuân xác thì mình nhất trí với Ndu là dùng VBA nhưng dùng khoảng code của ký tự chắc ăn hơn.
 
Upvote 0
Cảm ơn mọi người nhé. Bài toán của mình thế này. Từ một đoạn văn do người dùng viết, nằm trên một textbox chẳng hạn, ta cần tìm ra người đó đã sử dụng được bao nhiêu từ tiếng anh thuộc một chủ đề nào đó, ví dụ color. Cái khó là họ có thể viết theo rất nhiều tình huống, chẳng hạn:
My house is white. I like "red" music. I like green, blue.... I want to try drinking a redbull
Trước và sau các từ cần tìm có thể có các kí tự đặc biệt, có thể cả khoảng trắng, làm sao lọc được chúng ra, đếm số lượng sau đó liệt kê.
Tiếp tục, ta cần tạo ra một câu mà các từ này bị ẩn đi, ví dụ:
My house is ___. I like "___" music. I like ___, ___.... I want to try drinking a ___bull
 
Upvote 0
Bạn có thể nói rõ là bạn làm trên Word hay Excel được không?
Mình nghĩ cái này bạn phải dùng một bản liệt kê các tên màu cụ thể. Mà nếu diện rộng quá thì làm không xuể đâu!
Chắc phải dùng VBA quét lọc chọn theo bảng tên màu và ghi ra số liệu đếm được thôi.
Bạn đưa file cụ thể lên xem đã.
Thân.
 
Upvote 0
Cảm ơn mọi người nhé. Bài toán của mình thế này. Từ một đoạn văn do người dùng viết, nằm trên một textbox chẳng hạn, ta cần tìm ra người đó đã sử dụng được bao nhiêu từ tiếng anh thuộc một chủ đề nào đó, ví dụ color. Cái khó là họ có thể viết theo rất nhiều tình huống, chẳng hạn:
My house is white. I like "red" music. I like green, blue.... I want to try drinking a redbull
Trước và sau các từ cần tìm có thể có các kí tự đặc biệt, có thể cả khoảng trắng, làm sao lọc được chúng ra, đếm số lượng sau đó liệt kê.
Tiếp tục, ta cần tạo ra một câu mà các từ này bị ẩn đi, ví dụ:
My house is ___. I like "___" music. I like ___, ___.... I want to try drinking a ___bull
Dùng UDF này thử xem sao. Xem file nhé.
 

File đính kèm

Upvote 0
Dùng UDF này thử xem sao. Xem file nhé.
Thay vì dùng vòng lập duyệt qua từng ký tự trong chuổi, tại sao không duyệt qua từng cell trong Lookup_Range nhỉ? ---> Dùng InStr để xét xem từ khóa có tồn tại hay không!... Như vậy chỉ cần 1 vòng lập duy nhất, mà code lại vô cùng đơn giản
Như code của bạn tôi sẽ làm thế này:
PHP:
Function MyFunction(Text As String, Range_Lookup As Range, Optional mType As Long = 1)
  Dim Clls As Range, mCount As Long, mList As String, mReplace As String
  mReplace = Text
  For Each Clls In Range_Lookup
    If InStr(Text, Clls) Then
      mCount = mCount + 1
      mList = mList & " - " & Clls
      mReplace = Replace(mReplace, Clls, "______")
    End If
  Next Clls
  mList = Mid(mList, 4, Len(mList))
  MyFunction = Choose(mType, mCount, mList, mReplace)
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Thay vì dùng vòng lập duyệt qua từng ký tự trong chuổi, tại sao không duyệt qua từng cell trong Lookup_Range nhỉ? ---> Dùng InStr để xét xem từ khóa có tồn tại hay không!... Như vậy chỉ cần 1 vòng lập duy nhất, mà code lại vô cùng đơn giản
Như code của bạn tôi sẽ làm thế này:
PHP:
Function MyFunction(Text As String, Range_Lookup As Range, Optional mType As Long = 1)
  Dim Clls As Range, mCount As Long, mList As String, mReplace As String
  mReplace = Text
  For Each Clls In Range_Lookup
    If InStr(Text, Clls) Then
      mCount = mCount + 1
      mList = mList & " - " & Clls
      mReplace = Replace(mReplace, Clls, "______")
    End If
  Next Clls
  mList = Mid(mList, 4, Len(mList))
  MyFunction = Choose(mType, mCount, mList, mReplace)
End Function
Tùy cách sử dụng của tác giả thôi. Duyệt như thế này thì chỉ đếm và liệt kê mỗi từ 1 lần. Còn duyệt kiểu kia thì đếm và liệt kê tất cả cá từ, kể cả các từ lặp lại.
 
Upvote 0
Tùy cách sử dụng của tác giả thôi. Duyệt như thế này thì chỉ đếm và liệt kê mỗi từ 1 lần. Còn duyệt kiểu kia thì đếm và liệt kê tất cả cá từ, kể cả các từ lặp lại.
OK... Nếu thật sự tác giả muốn vậy thì cùng lắm là thay:
mCount = mCount + 1
thành:
mCount = mCount + (Len(Text) - Len(Replace(Text, Clls, ""))) / Len(Clls)
Còn phần liệt kê tôi nghĩ không cần thiết phải là:
red - blue - white - yellow - red
Lý nào lại thế? ---> Đoạn văn với 1000 từ trùng nhau mà liệt kê hết chắc đói luôn
 
Upvote 0
OK... Nếu thật sự tác giả muốn vậy thì cùng lắm là thay:
mCount = mCount + 1
thành:
mCount = mCount + (Len(Text) - Len(Replace(Text, Clls, ""))) / Len(Clls)
Còn phần liệt kê tôi nghĩ không cần thiết phải là:
red - blue - white - yellow - red
Lý nào lại thế? ---> Đoạn văn với 1000 từ trùng nhau mà liệt kê hết chắc đói luôn
Theo tôi thì không có gì vô lý cả. Mỗi người nghĩ một cách thôi. Và với tôi, liệt kê theo kiểu kia sẽ hợp lý hơn vì ở đây chúng ta cần tạo ra một câu với các chỗ trống để điền các từ. Tất cả các từ được liệt kê theo thứ tự sẽ là đáp án cho câu bài tập mới vừa tạo ra. Lần lượt thay một chỗ trống trong câu vừa tạo bằng một từ trong danh sách được liệt kê sẽ được câu hoàn chỉnh.

mCount = mCount + (Len(Text) - Len(Replace(Text, Clls, ""))) / Len(Clls)

Nếu trong Range_Lookup có chứa cell rỗng thì đoạn màu đỏ sẽ là cho hàm này lỗi.
 
Upvote 0
Nếu trong Range_Lookup có chứa cell rỗng thì đoạn màu đỏ sẽ là cho hàm này lỗi.
Trời.......
Bạn nói kiểu này thì tôi "bó 2 chân" luôn ---> Nếu đã gọi là "lổi" thì vô cùng, Nhập liệu lung tung thì ngay cả MS cũng không thể nào rào hết các lổi chứ đừng nói là I TỜ như ta ---> Code cũng phải biết cách dùng chứ bạn!
 
Upvote 0
Web KT

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

Back
Top Bottom