Lọc trong cột ô có số từ >5 (2 người xem)

Liên hệ QC

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

kegiaumat055

Thành viên chính thức
Tham gia
22/4/11
Bài viết
91
Được thích
2
Làm thế nào để lọc ra những dòng có 5 từ trở lên vậy các bạn ?
Ví dụ:
1. Xin chào mọi người
2. Xin chào
3. Xin chào các bạn giaiphapexcel

thì kết quả sau khi lọc là:

Xin chào các bạn giaiphapexcel
 
Bạn chạy đoạn CODE này xem nhé (click vào mũi tên CHẠY CODE trong file)
PHP:
Sub Loc5tu()
Dim Arr(), dArr()
Dim i As Long, j As Long, k As Long, d As Long
Arr = Range("A1:A" & [A65536].End(xlUp).Row).Value

ReDim dArr(1 To UBound(Arr), 1 To 1)
    For i = 1 To UBound(Arr, 1)
        Arr(i, 1) = Trim(Arr(i, 1))
        k = 0
        For j = 1 To Len(Arr(i, 1))
            If Mid(Arr(i, 1), j, 1) = " " Then
                k = k + 1
            End If
            If k >= 4 Then
                d = d + 1
                dArr(d, 1) = Arr(i, 1)
                Exit For
            End If
        Next j
    Next i
 [B2].Resize(UBound(Arr), 1).Value = dArr
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
bạn chạy đoạn code này xem nhé (click vào mũi tên chạy code)
PHP:
sub loc5tu()
dim arr(), darr()
dim i as long, j as long, k as long, d as long
arr = range("a1:a" & [a65536].end(xlup).row).value

redim darr(1 to ubound(arr), 1 to 1)
    for i = 1 to ubound(arr, 1)
        arr(i, 1) = trim(arr(i, 1))
        k = 0
        for j = 1 to len(arr(i, 1))
            if mid(arr(i, 1), j, 1) = " " then
                k = k + 1
            end if
        next j
        if k = 4 then
            d = d + 1
            darr(d, 1) = arr(i, 1)
        end if
    next i
 [b2].resize(ubound(arr), 1).value = darr
end sub
đối với code này chỉ có tác dụng khi dữ liệu chuẩn cách nhau 1 khoảng chắn. Bé còi thử gõ bất kỳ 2 khoảng chắn xem . Code tèo luôn rồi
nếu dữ liệu mà chuẩn thì công thức này cũng như code
=if(len(a2)-len(substitute(a2," ",""))>3,a2,"")
hì hì
 
đối với code này chỉ có tác dụng khi dữ liệu chuẩn cách nhau 1 khoảng chắn. Bé còi thử gõ bất kỳ 2 khoảng chắn xem . Code tèo luôn rồi
nếu dữ liệu mà chuẩn thì công thức này cũng như code
=if(len(a2)-len(substitute(a2," ",""))>3,a2,"")
hì hì
Anh có thể thêm hàm SuperTrim giống như anh tigertiger viết tại bài này SuperTrim để cắt khoảng chắn vô nghĩa (đổi TheStr As String thành TheStr As Variant để đưa Arr vào)
Hoặc dùng hàm Trim :
PHP:
Sub Loc5tu()
Dim Arr(), dArr()
Dim i As Long, j As Long, k As Long, d As Long
Arr = Range("A1:A" & [A65536].End(xlUp).Row).Value

ReDim dArr(1 To UBound(Arr), 1 To 1)
    For i = 1 To UBound(Arr, 1)
        Arr(i, 1) = Application.WorksheetFunction.Trim(Arr(i, 1))
        k = 0
        For j = 1 To Len(Arr(i, 1))
            If Mid(Arr(i, 1), j, 1) = " " Then
                k = k + 1
            End If
            If k >3 Then
                d = d + 1
                dArr(d, 1) = Arr(i, 1)
                Exit For
            End If
        Next j
    Next i
 [B2].Resize(UBound(Arr), 1).Value = dArr
End Sub
Hoặc ngắn hơn thì thế này :
PHP:
Sub Loc5tu()
Dim Arr(), dArr()
Dim i As Long, k As Long
Arr = Range("A1:A" & [A65536].End(xlUp).Row).Value

ReDim dArr(1 To UBound(Arr), 1 To 1)
    For i = 1 To UBound(Arr, 1)
        Arr(i, 1) = Application.WorksheetFunction.Trim(Arr(i, 1))
        If UBound(Split(Arr(i, 1), " ")) >3 Then
            k = k + 1
            dArr(k, 1) = Arr(i, 1)
        End If
    Next i
 [B2].Resize(k, 1).Value = dArr
End Sub
 
Lần chỉnh sửa cuối:
Anh có thể thêm hàm SuperTrim giống như anh tigertiger viết tại bài này SuperTrim để cắt khoảng chắn vô nghĩa (đổi TheStr As String thành TheStr As Variant để đưa Arr vào)
Hoặc dùng hàm Trim :
PHP:
Sub Loc5tu()
Dim Arr(), dArr()
Dim x As Long
Dim i As Long, j As Long, k As Long, d As Long
Arr = Range("A1:A" & [A65536].End(xlUp).Row).Value

ReDim dArr(1 To UBound(Arr), 1 To 1)
    For i = 1 To UBound(Arr, 1)
        Arr(i, 1) = Application.WorksheetFunction.Trim(Arr(i, 1))
        k = 0
        For j = 1 To Len(Arr(i, 1))
            If Mid(Arr(i, 1), j, 1) = " " Then
                k = k + 1
            End If
        Next j
        If k = 4 Then
            d = d + 1
            dArr(d, 1) = Arr(i, 1)
        End If
    Next i
 [B2].Resize(UBound(Arr), 1).Value = dArr
End Sub
cần sửa câu lệnh này chứ bé còi nhỉ
If k >= 4 Then
 
Lần chỉnh sửa cuối:
Okie, tại em cứ nghĩ là chỉ lọc ra những dòng có 5 từ thôi, hehe, giờ mới xem lại yêu cầu của tác giả là từ 5 từ trở lên...ẹc ẹc
nói gì thì nói code chính để giải quyết đề là đoạn này
PHP:
Private Function SuperTrim(TheStr As Variant)
Dim Temp As String, DoubleSpase As String
DoubleSpase = Chr(32) & Chr(32)
Temp = Trim(TheStr)
Temp = Replace(Temp, DoubleSpase, Chr(32))
Do Until InStr(Temp, DoubleSpase) = 0
    Temp = Replace(Temp, DoubleSpase, Chr(32))
Loop
SuperTrim = Temp
End Function
có đoạn này thì không những code mà công thức cũng làm được dễ dàng.
cám ơn những người đi trước như nvson, tiger và các thành viên trong topic này
 
nói gì thì nói code chính để giải quyết đề là đoạn này
PHP:
Private Function SuperTrim(TheStr As Variant)
Dim Temp As String, DoubleSpase As String
DoubleSpase = Chr(32) & Chr(32)
Temp = Trim(TheStr)
Temp = Replace(Temp, DoubleSpase, Chr(32))
Do Until InStr(Temp, DoubleSpase) = 0
    Temp = Replace(Temp, DoubleSpase, Chr(32))
Loop
SuperTrim = Temp
End Function
có đoạn này thì không những code mà công thức cũng làm được dễ dàng.
cám ơn những người đi trước như nvson, tiger và các thành viên trong topic này
Thực ra vấn đề cũng là ở chỗ dữ liệu không chuẩn thôi, nếu làm bằng công thức thì đơn giản hơn bằng cách dùng hàm Trim để cắt khoảng trống vô nghĩa và dùng Index trích ra thế này mới chuẩn vì thao tác với nhiều dòng.
Dữ liệu chưa xử lý chứa khoảng trống vô nghĩa nằm tại A1:A5, dữ liệu được xử lý qua B1:B5 bằng hàm Trim sau đó :
Tạo 1 name DK :
PHP:
=IF(LEN(Sheet1!$B$1:$B$5)-LEN(SUBSTITUTE(Sheet1!$B$1:$B$5," ",""))>3,ROW(Sheet1!$B$1:$B$5),"")
Hoặc có thể đưa thẳng hàm Trim vào trong name thế này khỏi cần cột phụ B nhưng dữ liệu xuất ra sẽ không đẹp (muốn đẹp lại dùng Trim nữa) :
PHP:
IF(LEN(Trim(Sheet1!$A$1:$A$5))-LEN(SUBSTITUTE(Trim(Sheet1!$A$1:$A$5)," ",""))>3,ROW(Sheet1!$A$1:$A$5),"")
Công thức trích tại C1 :
PHP:
=IF(COUNT(DK)<ROW(1:1),"",INDEX($B$1:$B$5,SMALL(DK,ROW(1:1))))
Hoặc thế này nếu không có cột phụ B trích thẳng trên cột A
PHP:
 = IF(COUNT(DK)<ROW(1:1),"",INDEX($A$1:$A$5,SMALL(DK,ROW(1:1))))
@anh Thương :
cám ơn những người đi trước như nvson, tiger và các thành viên trong topic này
Em hem thấy anh nhấn nút cảm ơn anh Tigertiger vì bài viết hay tại topic này nhé, hiiiiiiiiiii
 
Lần chỉnh sửa cuối:
Làm thế nào để lọc ra những dòng có 5 từ trở lên vậy các bạn ?
Ví dụ:
1. Xin chào mọi người
2. Xin chào
3. Xin chào các bạn giaiphapexcel

thì kết quả sau khi lọc là:

Xin chào các bạn giaiphapexcel
Bài này có thể dùng Advanced Filter cái rụp ra ngay
Muốn biết chi tiết thế nào hãy cho file của bạn lên đây tôi làm giúp cho
--------------------------------
_____________________________________________
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Phras e;REPT(" ";8);" ");REPT(" ";4);" ");REPT(" ";2);" ");REPT(" ";2);" ")
Công thức loại bỏ khoảng trắng thừa (đúng với tối đa 38 khoảng trắng liên tục) và có thể tiếp túc mở rộng tuỳ thix!
Excel có hàm TRIM sao không dùng? Hàm TRIM trên Excel nó cắt tất tần tật mọi khoảng trắng thừa (bao nhiêu khoảng trắng liên tục nó cũng cắt hết chỉ chừa lại 1)
 
Làm thế nào để lọc ra những dòng có 5 từ trở lên vậy các bạn ?
Ví dụ:
1. Xin chào mọi người
2. Xin chào
3. Xin chào các bạn giaiphapexcel
thì kết quả sau khi lọc là:

Xin chào các bạn giaiphapexcel
Bạn thử xem file đính kèm nhé, đầu tiên dùng hàm trim để chỉ giữ lại 1 ký tự cách giữa các từ, sau đó đếm số từ trong dòng, nếu >5 thì lấy...
 

File đính kèm

Excel có hàm TRIM sao không dùng? Hàm TRIM trên Excel nó cắt tất tần tật mọi khoảng trắng thừa (bao nhiêu khoảng trắng liên tục nó cũng cắt hết chỉ chừa lại 1)

Oh.. Cám ơn NDU!
your message to at least 20 characters.
 
Lần chỉnh sửa cuối:
Thực ra vấn đề cũng là ở chỗ dữ liệu không chuẩn thôi, nếu làm bằng công thức thì đơn giản hơn bằng cách dùng hàm Trim để cắt khoảng trống vô nghĩa và dùng Index trích ra thế này mới chuẩn vì thao tác với nhiều dòng.
Dữ liệu chưa xử lý chứa khoảng trống vô nghĩa nằm tại A1:A5, dữ liệu được xử lý qua B1:B5 bằng hàm Trim sau đó :
Tạo 1 name DK :
PHP:
=IF(LEN(Sheet1!$B$1:$B$5)-LEN(SUBSTITUTE(Sheet1!$B$1:$B$5," ",""))>3,ROW(Sheet1!$B$1:$B$5),"")
Hoặc có thể đưa thẳng hàm Trim vào trong name thế này khỏi cần cột phụ B nhưng dữ liệu xuất ra sẽ không đẹp (muốn đẹp lại dùng Trim nữa) :
PHP:
IF(LEN(Trim(Sheet1!$A$1:$A$5))-LEN(SUBSTITUTE(Trim(Sheet1!$A$1:$A$5)," ",""))>3,ROW(Sheet1!$A$1:$A$5),"")
Công thức trích tại C1 :
PHP:
=IF(COUNT(DK)<ROW(1:1),"",INDEX($B$1:$B$5,SMALL(DK,ROW(1:1))))
Hoặc thế này nếu không có cột phụ B trích thẳng trên cột A
PHP:
 = IF(COUNT(DK)<ROW(1:1),"",INDEX($A$1:$A$5,SMALL(DK,ROW(1:1))))
@anh Thương :

Em hem thấy anh nhấn nút cảm ơn anh Tigertiger vì bài viết hay tại topic này nhé, hiiiiiiiiiii
nếu dùng công thức sao không làm 1 phát như thế này
PHP:
=TRIM(IFERROR(OFFSET($A$1,SMALL(IF(LEN(TRIM($A$1:$A$24))-LEN(SUBSTITUTE($A$1:$A$24," ",""))>3,ROW($A$1:$A$24),""),ROW())-1,,,),""))
.ẹc ẹc
@ hmtc
đã thanks rồi nhé
 
nếu dùng công thức sao không làm 1 phát như thế này
PHP:
=TRIM(IFERROR(OFFSET($A$1,SMALL(IF(LEN(TRIM($A$1:$A$24))-LEN(SUBSTITUTE($A$1:$A$24," ",""))>3,ROW($A$1:$A$24),""),ROW())-1,,,),""))
.ẹc ẹc
@ hmtc
đã thanks rồi nhé
Thanks anh, công thức trên của em cũng có thể gộp thành 1 vì vậy 1 phát hay 2 thì cũng thế thôi.hì hì. Hơn nữa em lại đang dùng Office 2003 nên hem có cái IFERROR (xài đồ cổ khổ thế đó) công thức viết ra dài ngoẵng, tác giả trông lại hoảng, he he.
 
Web KT

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

Back
Top Bottom