Trích lọc những ô có chứa cụm từ GPE bằng công thức (1 người xem)

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

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

LinDan

Thành viên tiêu biểu
Tham gia
8/2/12
Bài viết
412
Được thích
111
Yêu cầu của bài toán là trích lọc toàn bộ các ô có chứa từ GPE từ cột A (kết quả điền minh họa ở cột B)

Bài này làm bằng VBA trên diễn đàn đã có rất nhiều, tuy vậy tôi muốn biết cách làm theo công thức như thế nào? Xin hãy chỉ giúp
 

File đính kèm

Yêu cầu của bài toán là trích lọc toàn bộ các ô có chứa từ GPE từ cột A (kết quả điền minh họa ở cột B)

Bài này làm bằng VBA trên diễn đàn đã có rất nhiều, tuy vậy tôi muốn biết cách làm theo công thức như thế nào? Xin hãy chỉ giúp

Bạn xem file đính kèm nhé.
 

File đính kèm

Xin lỗi, ô minh họa kết quả tôi không cập nhật hết trường hợp ô A6 (343GPE345) cũng được trích lọc ra, nghĩa là GPE có thể xuất hiện bất kỳ không nhất thiết nằm ở bên trái.

Rất mong bác giúp cho trường hợp này
 
Xin lỗi, ô minh họa kết quả tôi không cập nhật hết trường hợp ô A6 (343GPE345) cũng được trích lọc ra, nghĩa là GPE có thể xuất hiện bất kỳ không nhất thiết nằm ở bên trái.

Rất mong bác giúp cho trường hợp này

Nếu GPE ở đâu cũng được thì thế này.
 

File đính kèm

Bài này trên diễn đàn có nhiều rồi mà
PHP:
Data=Sheet1!$A$1:$A$7
PHP:
DK=IF(ISNUMBER(FIND("GPE";Data));ROW(INDIRECT("1:"&ROWS(Data)));"")

--> Công thức:
PHP:
=IF(ROWS($1:1)>COUNT(DK);"";INDEX(Data;SMALL(DK;ROWS($1:1))))
 

File đính kèm

Bây giờ từ bài này giả sử em muốn mở rộng bài toán lọc ra những ô bao gồm G, P, E ở một vị trí bất kỳ (không nhất thiết phải liền nhau, miễn theo thứ tự) ví dụ 13GjjPjkjE --> Lọc ra

Xin gửi file đính kèm, nhờ được giúp đỡ (nếu có cả 2 cách VBA và công thức).
 

File đính kèm

Bây giờ từ bài này giả sử em muốn mở rộng bài toán lọc ra những ô bao gồm G, P, E ở một vị trí bất kỳ (không nhất thiết phải liền nhau, miễn theo thứ tự) ví dụ 13GjjPjkjE --> Lọc ra

Xin gửi file đính kèm, nhờ được giúp đỡ (nếu có cả 2 cách VBA và công thức).
Code củ chuối nè, thử xem.
PHP:
Public Sub GPE()
Dim Clls As Range, Tem As Variant, Str As String, I As Long, K As Long
    For Each Clls In Range("A1:A100")
        Str = ""
            For I = 1 To Len(Clls)
                If Mid(Clls, I, 1) = "G" Or Mid(Clls, I, 1) = "P" Or Mid(Clls, I, 1) = "E" Then
                    Str = Str & Mid(Clls, I, 1)
                End If
            Next I
        If Str = "GPE" Then
            K = K + 1
            Cells(K, 4) = Clls.Value
        End If
    Next
End Sub
 

File đính kèm

Một công thức Xi-Ma-Chao & một code....Củ khoai một vòng lặp đây
Ngồi buồn làm chơi thôi chứ bài này còn sửa & cãi nhau nhiều
Ba Tê chơi ăn gian, làm có một kiểu hè
Híc, Robo con Việt Nam hay quá
Bài này chỉ đúng khi GPE duy nhất, nếu khác ....phải sửa, hihi
 

File đính kèm

Em muốn nội dung cột A là GPEE thì cũng lọc ra thì phải làm thế nào ah, code của bác nếu ba chữ trên xuất hiện quá 1 lần thì chưa lọc ra. Mong bác tiếp tục hộ cho.
 
Em muốn nội dung cột A là GPEE thì cũng lọc ra thì phải làm thế nào ah, code của bác nếu ba chữ trên xuất hiện quá 1 lần thì chưa lọc ra. Mong bác tiếp tục hộ cho.

VBA thì mình chịu, cái này mình dùng công thức bạn xem có đúng yêu cầu không nhé.
 

File đính kèm

Em muốn nội dung cột A là GPEE thì cũng lọc ra thì phải làm thế nào ah, code của bác nếu ba chữ trên xuất hiện quá 1 lần thì chưa lọc ra. Mong bác tiếp tục hộ cho.
Hihi, thì mình đã nói bài này còn phải sửa nhiều. Làm xong cái này rồi sẽ phát sinh là có phân biệt chữ thường chữ hoa ???? rồi có theo thứ tự G, P, E hay không ????..vân vân..... và vân vân......
Với dạng bài này nếu càng nhiều yêu cầu thì công thức càng.....chóng mặt, nên đến lúc nào đó thì ....quên công thức đi, dùng code "chơi" nó luôn
Với code thì vô tư, bạn thêm điều kiện phức tạp cỡ nào cũng được (miễn đừng phi lý)
Thân
+-+-+-+Híc+-+-+-+
 

File đính kèm

Thưa thày Concogia, em muốn phải ít nhất có 1 cụm G,P,E xuất hiện theo thứ tự lần lượt G-->P-->E : Ví dụ EPG thì không lọc ra, trong Code của thày nó vẫn lọc thì sửa thế nào ah?

(EGPE thì lọc ra vì có ít nhất 1 cụm từ GPE tô màu đỏ thỏa mãn)
 
Thưa thày Concogia, em muốn phải ít nhất có 1 cụm G,P,E xuất hiện theo thứ tự lần lượt G-->P-->E : Ví dụ EPG thì không lọc ra, trong Code của thày nó vẫn lọc thì sửa thế nào ah?

(EGPE thì lọc ra vì có ít nhất 1 cụm từ GPE tô màu đỏ thỏa mãn)
Nếu dùng code thì quá dễ rồi
VBScript.RegExp là món chuyên trị vụ xử lý chuổi
Mã:
Function StrExists(ByVal Str As String, ByVal Patt As String, ByVal MCase As Boolean) As Boolean
  Dim tmp As String
  On Error Resume Next
  tmp = Str
  With CreateObject("VBScript.RegExp")
    .Global = True
    If MCase Then
      .Pattern = "[" & Patt & "]"
      tmp = .Replace(tmp, "")
    Else
      .Pattern = "[" & LCase(Patt) & "]"
      tmp = .Replace(tmp, "")
      .Pattern = "[" & UCase(Patt) & "]"
      tmp = .Replace(tmp, "")
    End If
    .Pattern = "[" & tmp & "]"
    tmp = .Replace(Str, "")
    StrExists = (InStr(1, tmp, Patt, IIf(MCase, 0, 1)) > 0)
  End With
End Function
Mã:
Sub Main()
  Dim sArray, Item, Arr, tmp As String, n As Long
  sArray = Range("A1:A1000").Value
  On Error Resume Next
  Range("I1:I1000").ClearContents
  ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
  For Each Item In sArray
    If CStr(Item) <> "" Then
      [B]If StrExists(CStr(Item), "GPE", [COLOR=#ff0000]False[/COLOR]) Then[/B]
        n = n + 1
        Arr(n, 1) = CStr(Item)
      End If
    End If
  Next
  If n Then Range("I1").Resize(n) = Arr
End Sub
Code cho phép phân biệt HOA thường
Chú ý chổ này StrExists(CStr(Item), "GPE", False) ---> Nếu giá trị màu đỏ bằng FALSE thì không phân biệt HOA thường và ngược lại
 

File đính kèm

Lần chỉnh sửa cuối:
Có thể sử dụng hàm kiểm tra sự tồn tại một chuỗi con có xuất hiện (theo thứ tự) trong một chuỗi hay không như sau:

Function SubStr(s As String, d As String) As Boolean
Dim i As Byte, k As Byte, k1 As Byte, kq As Boolean
kq = True
k1 = 1
i = 1
Do
k = InStr(k1, s, Mid(d, i, 1))
kq = kq And (k > 0)
k1 = k + 1
i = i + 1
Loop Until (i > Len(d)) Or (k < 0)
SubStr = kq
End Function

Dùng hàm này làm điều kiện lọc.
 
Có thể sử dụng hàm kiểm tra sự tồn tại một chuỗi con có xuất hiện (theo thứ tự) trong một chuỗi hay không như sau:

Function SubStr(s As String, d As String) As Boolean
Dim i As Byte, k As Byte, k1 As Byte, kq As Boolean
kq = True
k1 = 1
i = 1
Do
k = InStr(k1, s, Mid(d, i, 1))
kq = kq And (k > 0)
k1 = k + 1
i = i + 1
Loop Until (i > Len(d)) Or (k < 0)
SubStr = kq
End Function

Dùng hàm này làm điều kiện lọc.
Bài này thì đâu cần dùng vòng lặp. Chỉ cần như thế này:
PHP:
Function InString(ByVal Str1 As String, ByVal Str2 As String, ByVal Case_ As Boolean)
Str2 = "*" & Join(Split(StrConv(Str2, 64), Chr(0)), "*")
InString = IIf(Case_, Str1 Like Str2, LCase(Str1) Like LCase(Str2))
End Function
 
Bài này thì đâu cần dùng vòng lặp. Chỉ cần như thế này:
PHP:
Function InString(ByVal Str1 As String, ByVal Str2 As String, ByVal Case_ As Boolean)
Str2 = "*" & Join(Split(StrConv(Str2, 64), Chr(0)), "*")
InString = IIf(Case_, Str1 Like Str2, LCase(Str1) Like LCase(Str2))
End Function

Hạn chế của cách này là không dùng được với chuổi Unicode
-------------------------
Có thể sử dụng hàm kiểm tra sự tồn tại một chuỗi con có xuất hiện (theo thứ tự) trong một chuỗi hay không như sau:

.

Lâu lắm mới thấy bạn lên diễn đàn nhỉ?
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom