Lọc giá trị Max theo điều kiện? (1 người xem)

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

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

790312

Thành viên hoạt động
Tham gia
7/4/08
Bài viết
181
Được thích
8
Nhờ các bác viết giùm Marco lọc giá trị như trong file đính kèm. Khi ta nhấn nút LỌC trong sheet1 thì giá trị sẽ được lọc qua sheet2. Chân thành cảm ơn.
 

File đính kèm

Ô B4 là Max của X cột C (Ô C4 là Max của Y cột C) trong sheet1 liên quan đến cột A là giá trị T16. Tương tự T15, T14 cũng vậy. Cảm ơn bác.
Sheet2 ô B4 giá trị là 0,002158 mới đúng nghe bạn.
Bạn dùng code này thử xem
Mã:
Sub GPE()
Dim Dic As Object, Tmp As String
Dim i As Long, k As Long
Dim Arr, dArr
Arr = Range(Sheet1.[A4], Sheet1.[D4].End(xlDown)).Resize(, 4)
ReDim dArr(1 To UBound(Arr, 1), 1 To 3)
Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        For i = 1 To UBound(Arr, 1)
            Tmp = Arr(i, 1)
            If Not .Exists(Tmp) Then
                k = k + 1
                .Add Tmp, k
                dArr(k, 1) = Arr(i, 1)
                If Arr(i, 3) = "X" Then
                   dArr(k, 2) = Arr(i, 4)
                ElseIf Arr(i, 3) = "Y" Then
                   dArr(k, 3) = Arr(i, 4)
                End If
            Else
                If (Arr(i, 3) = "X") And (Arr(i, 4) > dArr(.Item(Tmp), 2)) Then
                   dArr(.Item(Tmp), 2) = Arr(i, 4)
                ElseIf (Arr(i, 3) = "Y") And (Arr(i, 4) > dArr(.Item(Tmp), 3)) Then
                   dArr(.Item(Tmp), 3) = Arr(i, 4)
                End If
            End If
        Next i
    End With
    Sheet2.Range("A4:C65000").ClearContents
    Sheet2.Range("A4").Resize(k, 3) = dArr
End Sub
 
Upvote 0
Bài này dùng Pivot table cũng giải quyết được.
 

File đính kèm

Upvote 0
Thật ra dùng hàm cũng giải quyết được nửa, nhưng chỉ thực hiện theo yêu cầu của chủ topic thôi.
Cảm ơn 2 bác đã nhiệt tình giúp đỡ. Tiện đây e cũng cần lọc dữ liệu tương tự như bài 1 nhưng có khác chút, mong bác bớt tí thời gian giúp e cho trót. Lọc giá trị MAX cell cột E có cùng tên trong cell cột A sang sheet2. E gửi file đính kèm.
 

File đính kèm

Upvote 0
Cảm ơn 2 bác đã nhiệt tình giúp đỡ. Tiện đây e cũng cần lọc dữ liệu tương tự như bài 1 nhưng có khác chút, mong bác bớt tí thời gian giúp e cho trót. Lọc giá trị MAX cell cột E có cùng tên trong cell cột A sang sheet2. E gửi file đính kèm.

Thử code này xem sao:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), Tem As String
Dim I As Long, K As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheet1.Range("A4", Sheet1.Range("F4").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr), 1 To 3)
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 1)
        If Not Dic.Exists(Tem) Then
            K = K + 1
            Dic.Add Tem, K
            dArr(K, 1) = sArr(I, 1)
        End If
        Rws = Dic.Item(Tem)
        If dArr(Rws, 2) < sArr(I, 5) Then dArr(Rws, 2) = sArr(I, 5)
        If dArr(Rws, 3) < sArr(I, 6) Then dArr(Rws, 3) = sArr(I, 6)
    Next I
    Sheet2.Range("A4:C1000").ClearContents
    Sheet2.Range("A4:C4").Resize(K) = dArr
Set Dic = Nothing
End Sub
 
Upvote 0
Thử code này xem sao:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), Tem As String
Dim I As Long, K As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheet1.Range("A4", Sheet1.Range("F4").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr), 1 To 3)
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 1)
        If Not Dic.Exists(Tem) Then
            K = K + 1
            Dic.Add Tem, K
            dArr(K, 1) = sArr(I, 1)
        End If
        Rws = Dic.Item(Tem)
        If dArr(Rws, 2) < sArr(I, 5) Then dArr(Rws, 2) = sArr(I, 5)
        If dArr(Rws, 3) < sArr(I, 6) Then dArr(Rws, 3) = sArr(I, 6)
    Next I
    Sheet2.Range("A4:C1000").ClearContents
    Sheet2.Range("A4:C4").Resize(K) = dArr
Set Dic = Nothing
End Sub
Cảm ơn bác, code chạy Ok, nhưng bổ sung giùm e, cột E và F lấy giá trị Max giá trị tuyệt đối giùm e với. Do giá trị cột E, F có số âm và dương.
 
Upvote 0
Cảm ơn bác, code chạy Ok, nhưng bổ sung giùm e, cột E và F lấy giá trị Max giá trị tuyệt đối giùm e với. Do giá trị cột E, F có số âm và dương.

Lấy giá trị tuyệt đối? Là sao ta? -500 và 499 thì lấy kết quả là -500 hay lấy 500.
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ lấy 500 bác ah. Cảm ơn bác.
Nếu vậy thì thay Sub bài #8 bằng cái này:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), Tem As String
Dim I As Long, K As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheet1.Range("A4", Sheet1.Range("F4").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr), 1 To 3)
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 1)
        If Not Dic.Exists(Tem) Then
            K = K + 1
            Dic.Add Tem, K
            dArr(K, 1) = sArr(I, 1)
        End If
        Rws = Dic.Item(Tem)
        If dArr(Rws, 2) < Abs(sArr(I, 5)) Then dArr(Rws, 2) = Abs(sArr(I, 5))
        If dArr(Rws, 3) < Abs(sArr(I, 6)) Then dArr(Rws, 3) = Abs(sArr(I, 6))
    Next I
    Sheet2.Range("A4:C1000").ClearContents
    Sheet2.Range("A4:C4").Resize(K) = dArr
Set Dic = Nothing
End Sub
Bảng dữ liệu là số âm, kết quả là số dương????
Tìm lại kết quả trong dữ liệu thì không kể dấu, vậy khi tạo bảng dữ liệu không "tuyệt đối" nó trước cho rồi.
 
Upvote 0
Nếu vậy thì thay Sub bài #8 bằng cái này:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), Tem As String
Dim I As Long, K As Long, Rws As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheet1.Range("A4", Sheet1.Range("F4").End(xlDown)).Value
ReDim dArr(1 To UBound(sArr), 1 To 3)
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 1)
        If Not Dic.Exists(Tem) Then
            K = K + 1
            Dic.Add Tem, K
            dArr(K, 1) = sArr(I, 1)
        End If
        Rws = Dic.Item(Tem)
        If dArr(Rws, 2) < Abs(sArr(I, 5)) Then dArr(Rws, 2) = Abs(sArr(I, 5))
        If dArr(Rws, 3) < Abs(sArr(I, 6)) Then dArr(Rws, 3) = Abs(sArr(I, 6))
    Next I
    Sheet2.Range("A4:C1000").ClearContents
    Sheet2.Range("A4:C4").Resize(K) = dArr
Set Dic = Nothing
End Sub
Bảng dữ liệu là số âm, kết quả là số dương????
Tìm lại kết quả trong dữ liệu thì không kể dấu, vậy khi tạo bảng dữ liệu không "tuyệt đối" nó trước cho rồi.
Do bảng dữ liệu e xuất từ phần mềm ra có giá trị âm dương. Muốn rút gọn thời gian không phải qua một bước "tuyệt đối" nên e mới làm phiền bác. Cảm ơn bác nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom