Cách lọc các kết quả có các giá trị giống nhau trong 1 vùng Excell (1 người xem)

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

candy man

Thành viên mới
Tham gia
25/12/13
Bài viết
3
Được thích
0
251213.png


Xin chào mọi người
Em có 1 vấn đề như sau:
Em muốn lọc tất cả các giá trị có cùng kết quả là 0, 1, 2, 3, 4++ trong các ô số trên ra 1 chuỗi text. Vì khi e làm bôi màu xong, lọc các kết quả có giá trị ví dụ tương ứng với số 0 ở dưới là 00.02.04.05.06... 96.97.98.99 hoặc lọc tương úng với số 3 kết quả là 80.81 thì rất mất tgian và sợ nhầm lẫn
Vậy nên nhờ anh chị giúp đỡ em vấn đề này, sao cho cách làm đơn giản, dễ hiểu 1 chút ạ
Cảm ơn mọi người
 
251213.png


Xin chào mọi người
Em có 1 vấn đề như sau:
Em muốn lọc tất cả các giá trị có cùng kết quả là 0, 1, 2, 3, 4++ trong các ô số trên ra 1 chuỗi text. Vì khi e làm bôi màu xong, lọc các kết quả có giá trị ví dụ tương ứng với số 0 ở dưới là 00.02.04.05.06... 96.97.98.99 hoặc lọc tương úng với số 3 kết quả là 80.81 thì rất mất tgian và sợ nhầm lẫn
Vậy nên nhờ anh chị giúp đỡ em vấn đề này, sao cho cách làm đơn giản, dễ hiểu 1 chút ạ
Cảm ơn mọi người

Tôi thấy nội dung bạn yêu cầu chưa cụ thể, nếu bạn Up File lên có nội dung và tiêu đề rồi nói rõ mục đích của mình thì mọi người sẽ có giải pháp thích hợp hơn.

Còn bạn nêu yêu cầu với 1 cái hình thì chẳng nói lên được điều gì, vì muốn điều khiển 1 cái gì đó thì phải biết đích xác nó ở vị trí nào, tên sheet là gì, chứ bạn nêu như hình thì chẳng ai hiểu.

Ví dụ:
Nếu ở nhà bạn mà bạn nói lấy giùm tôi 500.000 đồng thì chẳng ai hiểu bạn nói cái gì, vì nếu bạn để tiền trong túi thì có túi trên, túi dưới, túi sau hoặc trong tủ, dưới gầm bàn, trên giường...v...v....

Ý tôi là bạn nêu 1 câu hỏi không xác định thì không ai trả lời cho bạn, hoặc nếu trả lời cũng không chính xác.
 
251213.png


Xin chào mọi người
Em có 1 vấn đề như sau:
Em muốn lọc tất cả các giá trị có cùng kết quả là 0, 1, 2, 3, 4++ trong các ô số trên ra 1 chuỗi text. Vì khi e làm bôi màu xong, lọc các kết quả có giá trị ví dụ tương ứng với số 0 ở dưới là 00.02.04.05.06... 96.97.98.99 hoặc lọc tương úng với số 3 kết quả là 80.81 thì rất mất tgian và sợ nhầm lẫn
Vậy nên nhờ anh chị giúp đỡ em vấn đề này, sao cho cách làm đơn giản, dễ hiểu 1 chút ạ
Cảm ơn mọi người

1. Theo tôi bạn miêu tả không chính xác và thiếu. Nếu là tôi thì tôi thử miêu tả như sau:

"Giá trị TƯƠNG ỨNG với một giá trị k (k = 0, 1, 2, 3, 4) là giá trị ở cùng cột và ở dòng ngay trên của giá trị k. Tôi muốn liệt kê tất cả những giá trị TƯƠNG ỨNG với giá trị k (k = 0, 1, 2, 3, 4) trong 5 dòng liên tiếp. Ví dụ các giá trị TƯƠNG ỨNG với 3 là 80 và 81".

2. Bạn gửi tập tin lên. Không ai ngồi gõ và tạo tập tin hộ bạn đâu.

3. Tôi đề nghị liệt kê các giá trị TƯƠNG ỨNG với k (k = 0, 1, 2, 3, 4) trong cùng 1 dòng ở những ô liên tiếp thay vì nối chúng bằng dấu "." thành 1 chuỗi.
 


Xin chào mọi người
Em có 1 vấn đề như sau:
Em muốn lọc tất cả các giá trị có cùng kết quả là 0, 1, 2, 3, 4++ trong các ô số trên ra 1 chuỗi text. Vì khi e làm bôi màu xong, lọc các kết quả có giá trị ví dụ tương ứng với số 0 ở dưới là 00.02.04.05.06... 96.97.98.99 hoặc lọc tương úng với số 3 kết quả là 80.81 thì rất mất tgian và sợ nhầm lẫn
Vậy nên nhờ anh chị giúp đỡ em vấn đề này, sao cho cách làm đơn giản, dễ hiểu 1 chút ạ
Cảm ơn mọi người

Ngồi rảnh, đoán ý bạn làm thử trúng thì tốt không trúng thì sửa sau vậy.

Bạn thử với hàm tự tạo này xem sao.
 

File đính kèm

Macro dưới đây sẽ liệt kê kết quả trên 2 cột [N:O]

PHP:
Option Explicit
Sub gpe()
 Dim Rng As Range, sRng As Range, WF As Object
 Dim fAdd As String, StrC As String
 Dim J As Long, Rws As Long, Max_ As Double, Min_ As Double, Col As Byte
 
 Rws = [b2].CurrentRegion.Rows.Count
 Col = [b2].CurrentRegion.Columns.Count
 For J = 2 To Rws Step 2
    If Rng Is Nothing Then
        Set Rng = Cells(J, "A").Resize(, Col)
    Else
        Set Rng = Union(Rng, Cells(J, "A").Resize(, Col))
    End If
 Next J
 Set WF = Application.WorksheetFunction
 Min_ = WF.Min(Rng):                    Max_ = WF.Max(Rng)
' MsgBox Min_  '
 For J = Min_ To Max_
    Set sRng = Rng.Find(J, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        fAdd = sRng.Address
        Do
            StrC = StrC & sRng.Offset(-1).Value & ";"
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> fAdd
    End If
    If Len(StrC) > 1 Then
        With [N65500].End(xlUp)
            .Offset(1).Value = J
            .Offset(1, 1).Value = StrC
            StrC = ""
        End With
    End If
 Next J
End Sub

Macro này chạy trên file của MHung & xin cảm ơn MHung
 
Ngồi rảnh, đoán ý bạn làm thử trúng thì tốt không trúng thì sửa sau vậy.

Bạn thử với hàm tự tạo này xem sao.
Mã:
Public Function noi(ByVal Rng As Range, ByVal Tag As Range, Optional ByVal Delimiter As String) As String
  Dim SrcArr
  Dim i As Long, j As Long
  Dim sTmp As String
  SrcArr = Rng.Value
  For i = 2 To UBound(SrcArr) Step 2
    For j = 1 To UBound(SrcArr, 2)
      If Len(SrcArr(i, j)) Then
        If SrcArr(i, j) = Tag Then
          sTmp = sTmp & Delimiter & SrcArr(i - 1, j)
        End If
      End If
    Next j
  Next i
  If Delimiter <> "" Then
    noi = Right(sTmp, Len(sTmp) - 1)
  Else
    noi = sTmp
  End If
End Function
về cơ bản hàn bạn viết mình hiểu thuật và các ý đồ vòng lặp nhưng mình không hiểu một vài vấn đề bạn giải thích giúp với?
1. Thông thường viết hàm xong và khi xử dụng chúng ta phải đưa các đối số vào hàm nhưng cái này của bạn không phải đưa gì vào cả và chạy luôn???
2. Vì sao bạn làm nó chỉ nhận vùng dữ liệu cố định đó được?
3. vì sao code chỉ chạy khi ô bạn bôi đậm được thay đổi vậy?
4. kết quả lại chỉ dặt cố định vào ô bên cạnh ô bôi đậm
Tất cả trong code không thấy được những cái trên >>> tò mò quá
 
À, màbạn phải miêu tả dữ liệu chứ.
Tôi "mớm" cho bạn cách miêu tả sau, nếu đúng thì "gật" còn sai thì phải sửa lại:

"Các giá trị k (k = 0, 1, 2, 3, 4, ...?) là các số có 1 chữ số và nằm ở các dòng chẵn của vùng dữ liệu. Còn các giá trị TƯƠNG ỨNG với k nằm ở các dòng lẻ của vùng dữ liệu và là các số có ít nhất (có đúng) 2 chữ số"
 
Mã:
Public Function noi(ByVal Rng As Range, ByVal Tag As Range, Optional ByVal Delimiter As String) As String
  Dim SrcArr
  Dim i As Long, j As Long
  Dim sTmp As String
  SrcArr = Rng.Value
  For i = 2 To UBound(SrcArr) Step 2
    For j = 1 To UBound(SrcArr, 2)
      If Len(SrcArr(i, j)) Then
        If SrcArr(i, j) = Tag Then
          sTmp = sTmp & Delimiter & SrcArr(i - 1, j)
        End If
      End If
    Next j
  Next i
  If Delimiter <> "" Then
    noi = Right(sTmp, Len(sTmp) - 1)
  Else
    noi = sTmp
  End If
End Function
về cơ bản hàn bạn viết mình hiểu thuật và các ý đồ vòng lặp nhưng mình không hiểu một vài vấn đề bạn giải thích giúp với?
1. Thông thường viết hàm xong và khi xử dụng chúng ta phải đưa các đối số vào hàm nhưng cái này của bạn không phải đưa gì vào cả và chạy luôn???
2. Vì sao bạn làm nó chỉ nhận vùng dữ liệu cố định đó được?
3. vì sao code chỉ chạy khi ô bạn bôi đậm được thay đổi vậy?
4. kết quả lại chỉ dặt cố định vào ô bên cạnh ô bôi đậm
Tất cả trong code không thấy được những cái trên >>> tò mò quá

Điểm 4. Thì bạn chọn ô "bên cạnh ô bôi đậm" thì bạn thấy người ta nhập công thức mà.
Các điểm khác cũng sáng tỏ rồi chứ?
 
xin chào mọi người
mình cũng có 1 file excel, trong đó mình cần thống kê tổng số lỗi của 1 mã lỗi được phân loại theo ngày tháng, line sản xuất, theo mã lỗi và theo ca xản xuất. mình đã thử dùng hàm sumifs để tính nhưng vẫn không được.
rất mong mọi người có thể giúp mình giải quyêt vấn đề này.cám ơn mọi người rất nhiều.
mình gửi mọi người file đính kèm.
 

File đính kèm

Nhân tiện có tập tin của bạn mhung12005 (để có chỗ viết và test) tôi làm thử cho bạn bằng công thức. Muốn vậy thì: Các số tương ứng được liệt kê cùng dòng ở các ô liên tiếp như tôi đã kiến nghị ở bài #3.
Ngoài ra tôi làm với dữ liệu thỏa đk như sau: các số dò nằm ở dòng chẵn của vùng dữ liệu, còn các số tương ứng nằm ở dòng lẻ. Các số dò cũng có thể có 2 chữ số. Vd.: liệt kê tất cả các số tương ứng với 11 (số dò là 11)
-----------
Trong tập tin của bạn mhung12005 ở bài #4 bạn chọn vd. L1 và
1. Đặt name pos
Mã:
=SMALL(IF($A$1:$J$20<>ROWS($1:1)-1;"";IF(MOD(ROW($A$1:$J$20);2);"";(ROW($A$1:$J$20)-2)*[COLOR=#ff0000]10^4[/COLOR]+COLUMN($A$1:$J$20)-1));COLUMNS($A:A))

2. Công thức cho L1
Mã:
=OFFSET($A$1;INT(pos/[COLOR=#ff0000]10^4[/COLOR]);MOD(pos;[COLOR=#ff0000]10^4[/COLOR]))

Kéo công thức xuống dưới và sang phải.

À, 10^4 có thể thay bằng số khác miễn là "đủ lớn". Vd. bạn có vùng dữ liệu 10 cột (như trong tập tin) thì thay 10^4 bằng 10, nếu vùng dữ liệu 100 cột thì thay 10^4 bằng 100 ...

Mới test và kiểm tra sơ qua bằng mắt với dữ liệu của bạn mhung12005. Chưa test với những dữ liệu khác.

Làm bằng công thức để giết thời gian thôi. Nếu bạn cần nối các số tương ứng, code thì đợi các sư phụ nhé. Bài này mà làm bằng code thì "phình phường"
 
Lần chỉnh sửa cuối:
PHP:
Option Explicit
Sub gpe()
 Dim Rng As Range, sRng As Range, WF As Object
 Dim fAdd As String, StrC As String
 Dim J As Long, Rws As Long, Max_ As Double, Min_ As Double, Col As Byte
 
 Rws = [b2].CurrentRegion.Rows.Count
 Col = [b2].CurrentRegion.Columns.Count
 For J = 2 To Rws Step 2
    If Rng Is Nothing Then
        Set Rng = Cells(J, "A").Resize(, Col)
    Else
        Set Rng = Union(Rng, Cells(J, "A").Resize(, Col))
    End If
 Next J
 Set WF = Application.WorksheetFunction
 Min_ = WF.Min(Rng):                    Max_ = WF.Max(Rng)
' MsgBox Min_  '
 For J = Min_ To Max_
    Set sRng = Rng.Find(J, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        fAdd = sRng.Address
        Do
            StrC = StrC & sRng.Offset(-1).Value & ";"
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> fAdd
    End If
    If Len(StrC) > 1 Then
        With [N65500].End(xlUp)
            .Offset(1).Value = J
            .Offset(1, 1).Value = StrC
            StrC = ""
        End With
    End If
 Next J
End Sub

Macro này chạy trên file của MHung & xin cảm ơn MHung

Với số dò mà các phần tử tương ứng có chứa "00" thì kết quả trả về đưa phần tử "00" xuống cuối chuỗi.
Như ở tập tin hiện hành thì "00" tương ứng với số dò 0 nên trong kết quả cho số dò 0 thì "00" bị chuyển xuống cuối. Nếu ta sửa A2 = 1 thì "00" tương ứng với số dò 1 nên trong kết quả cho số dò 1 thì "00" bị chuyển xuống cuối.

Thứ tự sẽ có quan trọng với chủ chủ đề không?
 
xin chào mọi người
mình cũng có 1 file excel, trong đó mình cần thống kê tổng số lỗi của 1 mã lỗi được phân loại theo ngày tháng, line sản xuất, theo mã lỗi và theo ca xản xuất. mình đã thử dùng hàm sumifs để tính nhưng vẫn không được.
rất mong mọi người có thể giúp mình giải quyêt vấn đề này.cám ơn mọi người rất nhiều.
mình gửi mọi người file đính kèm.

Sao lại có chuyện chen vào chủ đề của người khác thế? Bạn lập chủ đề mới để hỏi nhé.
 
Ngồi rảnh, đoán ý bạn làm thử trúng thì tốt không trúng thì sửa sau vậy.

Bạn thử với hàm tự tạo này xem sao.

bạn giỏi đoán mô tả của người hỏi thật, tôi đọc mãi khôg hiểu người hỏi muốn gì - đành hiểu qua code của bạn.

Nên chăng đổi thành, cho gọn chút

PHP:
Public Function noi(ByVal Rng As Range, _
                    ByVal Tag As Range, _
                    Optional ByVal Delimiter As String _
                   ) As String
    Dim SrcArr, i As Long, j As Long, sTmp As String
    
    SrcArr = Rng.Value
    For i = 2 To UBound(SrcArr) Step 2
      For j = 1 To UBound(SrcArr, 2)
          If SrcArr(i, j) = Tag Then _
            sTmp = IIf(sTmp = "", SrcArr(i - 1, j), sTmp & Delimiter & SrcArr(i - 1, j))
      Next j
    Next i
    noi = sTmp
End Function
 
To NguyenVanXuat

Đúng là bạn đã chen ngang như thông báo dưới đây:
[ThongBao]Sao lại có chuyện chen vào chủ đề của người khác thế? Bạn lập chủ đề mới để hỏi nhé.[/ThongBao]

Nhưng dù sao cũng góp vài í cho bạn trước khi bạn lập topic mới (từ con kiến đến con voi):

(*) Tên trang tính nên là "TKLoi"

(*) Đầu trang tính đã có tiêu đề "THỐNG KÊ LỖI PHÁT HIỆN TRONG CÔNG ĐOẠN SMT THÁNG 12 NĂM 2013", thì cột 'A:A' (tại [A2] nên lấy tiêu đề trường là "Ngày"' & tất nhiên trường này chỉ là các con số chỉ ngày trong tháng đó.

(*) Số liệu ngày tháng năm của CSDL trong excel nên theo hệ Mẽo (MM/DD/YYYY); Cái ni tiện cho việc tính toán. Còn để dễ nhìn, ta có thể định dạng Custom "DD/MM/YYYY" toàn bộ cột số liệu này.

Thân!
 
Em cảm ơn mọi người đã tìm hiểu và chỉ dẫn cho em
Em cũng xin lỗi vì k up file đó lên
Em up lên dựa trên bài của anh mhung12005. Về cơ bản đó là đúng rồi. Em cũng thử đã ok rồi .
Còn mấy cái code em cũng chưa hiểu rõ nên thôi ko làm nữa
Tiện đây anh mhung12005 cho em hỏi em gõ cái công thức đó sang file của em thì ko được
cách làm cái đó như thế nào ạ
Hàm noi(A1:J20,L2,".") đó hình như là không có, phải tự tạo ra hàm đó ạ
 
bạn giỏi đoán mô tả của người hỏi thật, tôi đọc mãi khôg hiểu người hỏi muốn gì - đành hiểu qua code của bạn.

Nên chăng đổi thành, cho gọn chút

PHP:
Public Function noi(ByVal Rng As Range, _
                    ByVal Tag As Range, _
                    Optional ByVal Delimiter As String _
                   ) As String
    Dim SrcArr, i As Long, j As Long, sTmp As String
    
    SrcArr = Rng.Value
    For i = 2 To UBound(SrcArr) Step 2
      For j = 1 To UBound(SrcArr, 2)
          If SrcArr(i, j) = Tag Then _
            sTmp = IIf(sTmp = "", SrcArr(i - 1, j), sTmp & Delimiter & SrcArr(i - 1, j))
      Next j
    Next i
    noi = sTmp
End Function

Hàm của anh viết gọn hơn em rất nhiều. Cảm ơn anh đã chia sẻ.
Nhưng nếu anh bỏ đi 1 điều kiện if(len(SrcArr(i,j)) then... thì khi dữ liệu có ô trống hàm vẫn lấy giá trị SrcArr(i-1,j) anh ạ.
 
Em cảm ơn mọi người đã tìm hiểu và chỉ dẫn cho em
Em cũng xin lỗi vì k up file đó lên
Em up lên dựa trên bài của anh mhung12005. Về cơ bản đó là đúng rồi. Em cũng thử đã ok rồi .
Còn mấy cái code em cũng chưa hiểu rõ nên thôi ko làm nữa
Tiện đây anh mhung12005 cho em hỏi em gõ cái công thức đó sang file của em thì ko được
cách làm cái đó như thế nào ạ
Hàm noi(A1:J20,L2,".") đó hình như là không có, phải tự tạo ra hàm đó ạ

Thì mình đã nói là hàm tự tạo rồi mà. Bạn nhấn Alt + F11 --> Module sẽ thấy code của nó. Nếu bạn muốn dùng trong file của bạn thì bạn copy code đó và paste vào module trong file của bạn là dùng được.
 
Em làm được rồi, cảm ơn các anh, nay e mới hiểu về module, hihi. Hay quá }}}}}
 

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

Back
Top Bottom