Tìm nhóm ký tự trong chuỗi so sánh cột điều kiện liệt kê ra bảng thống kê

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

tai15525

Thành viên mới
Tham gia
30/9/17
Bài viết
3
Được thích
0
Giới tính
Nam
Xin chào cộng đồng excel
nhờ cả nhà chỉ giáo giúp giùm, sao sao để lọc dữ liệu ra bảng mới như file đính kèm với, áp dụng số lượng lớn lọc không nổi
- dựa vào dữ liệu sheet dữ liệu thống kê, so với mã tỉnh để lọc ra đối với sản phẩm đó đang được bán ở tỉnh nào
chân thành cảm ơn cả nhà !
 

File đính kèm

  • Thống kê SP được phân bổ theo tỉnh.xlsx
    11.9 KB · Đọc: 22
Xin chào cộng đồng excel
nhờ cả nhà chỉ giáo giúp giùm, sao sao để lọc dữ liệu ra bảng mới như file đính kèm với, áp dụng số lượng lớn lọc không nổi
- dựa vào dữ liệu sheet dữ liệu thống kê, so với mã tỉnh để lọc ra đối với sản phẩm đó đang được bán ở tỉnh nào
chân thành cảm ơn cả nhà !
Bài này tôi nghĩ là phải làm bằng VBA sẽ nhanh và chính xác hơn.
Nếu muốn có đáp án Chủ thớt hãy nhờ mod chuyển bài sang phần lập trình. Tôi tin là sẽ có người giúp.
 
Upvote 0
cảm ơn bạn nhiều đã trả lời
Bạn nên có 1 Sheet để làm Data chung trong đó có Tên tỉnh, thị thành , mã tỉnh thị thành; Ví dụ Cột A là TT, cột B là tên tỉnh , thị thành, Cột C là Mã tỉnh:
Đây là code của tôi, bạn tham khỏa trong khi chờ giải pháp khác.
Mã:
Option Explicit

Sub ThongKe()
Dim i&, j&, Lr&, t&, k&, Z&, Col&, x&
Dim Arr(), KQ(), S
Dim Dic As Object, Key, Temp
Dim Sh As Worksheet, Ws As Worksheet
 Set Ws = Sheets("ChiTietTinh")
Set Sh = Sheets("ThongKe")
    Lr = Sh.Cells(100000, 4).End(3).Row
    Arr = Sh.Range("A3:F" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To 70, 1 To UBound(Arr) + 3)

For i = 2 To UBound(Arr)
        k = k + 1
    For Col = 4 To 6
If Col = 4 Then
    Arr(1, Col) = "DMX"
ElseIf Col = 5 Then
    Arr(1, Col) = "NCCK"
ElseIf Col = 6 Then
    Arr(1, Col) = "KS"
End If
        If Arr(i, Col) <> Empty Then x = InStr(1, Arr(i, Col), "(") Else Exit For
            Temp = Mid(Arr(i, Col), x, Len(Arr(i, Col)) - x)
            Temp = Replace(Temp, "(", "")
            Temp = Replace(Temp, ")", "")
            Temp = Replace(Temp, ";", ",")
            S = Split(Trim(Temp), ", ")
            For j = 0 To UBound(S)
                Key = S(j)
                If Not Dic.Exists(Key) Then
                    t = t + 1: Dic.Add (Key), t
                    KQ(t, 1) = t
                    KQ(t, 3) = Key
                    KQ(t, k + 3) = Arr(1, Col)
                Else
                    Z = Dic.Item(Key)
                    KQ(Z, k + 3) = Arr(1, Col)
                End If
            Next j
    Next Col
Next i
If t Then
    Ws.Range("K5").Resize(100, 7).ClearContents
    Ws.Range("K5").Resize(Dic.Count, 7) = KQ
End If
Set Dic = Nothing
MsgBox "Done"
End Sub
xem file đính kèm. nhấn vào nút " Chay code để xem kết quả từ K5:Qn.
 

File đính kèm

  • Thống kê SP được phân bổ theo tỉnh.xlsm
    23.7 KB · Đọc: 7
Upvote 0
Bạn nên có 1 Sheet để làm Data chung trong đó có Tên tỉnh, thị thành , mã tỉnh thị thành; Ví dụ Cột A là TT, cột B là tên tỉnh , thị thành, Cột C là Mã tỉnh:
Đây là code của tôi, bạn tham khỏa trong khi chờ giải pháp khác.
Mã:
Option Explicit

Sub ThongKe()
Dim i&, j&, Lr&, t&, k&, Z&, Col&, x&
Dim Arr(), KQ(), S
Dim Dic As Object, Key, Temp
Dim Sh As Worksheet, Ws As Worksheet
 Set Ws = Sheets("ChiTietTinh")
Set Sh = Sheets("ThongKe")
    Lr = Sh.Cells(100000, 4).End(3).Row
    Arr = Sh.Range("A3:F" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To 70, 1 To UBound(Arr) + 3)

For i = 2 To UBound(Arr)
        k = k + 1
    For Col = 4 To 6
If Col = 4 Then
    Arr(1, Col) = "DMX"
ElseIf Col = 5 Then
    Arr(1, Col) = "NCCK"
ElseIf Col = 6 Then
    Arr(1, Col) = "KS"
End If
        If Arr(i, Col) <> Empty Then x = InStr(1, Arr(i, Col), "(") Else Exit For
            Temp = Mid(Arr(i, Col), x, Len(Arr(i, Col)) - x)
            Temp = Replace(Temp, "(", "")
            Temp = Replace(Temp, ")", "")
            Temp = Replace(Temp, ";", ",")
            S = Split(Trim(Temp), ", ")
            For j = 0 To UBound(S)
                Key = S(j)
                If Not Dic.Exists(Key) Then
                    t = t + 1: Dic.Add (Key), t
                    KQ(t, 1) = t
                    KQ(t, 3) = Key
                    KQ(t, k + 3) = Arr(1, Col)
                Else
                    Z = Dic.Item(Key)
                    KQ(Z, k + 3) = Arr(1, Col)
                End If
            Next j
    Next Col
Next i
If t Then
    Ws.Range("K5").Resize(100, 7).ClearContents
    Ws.Range("K5").Resize(Dic.Count, 7) = KQ
End If
Set Dic = Nothing
MsgBox "Done"
End Sub
xem file đính kèm. nhấn vào nút " Chay code để xem kết quả từ K5:Qn.
cảm ơn Bạn nhiều nhe!
Bài đã được tự động gộp:

Dùng hàm filter trong excel 365
cảm ơn Bạn nhiều nhe!
 
Upvote 0
Thêm cách khác tham khảo. Sử dụng file bài #1 chạy code. Thấy kết quả sau khi chạy và kết quả mẫu trong file khác nhau.
Mã:
Sub ABC()
    Dim Dic As Object, sArr(), i&, Title(), j&, Temp$, S, n&
    Set Dic = CreateObject("scripting.dictionary")
    Title = Array("DMX", "NCCK", "KS", "CC")
    With Sheet1
        sArr = .Range("B3:G" & .Range("B" & Rows.Count).End(3).Row).Value
        For j = 3 To UBound(sArr, 2)
            sArr(1, j) = Title(j - 3)
        Next
        For j = 3 To UBound(sArr, 2)
            For i = 2 To UBound(sArr)
                If sArr(i, j) <> Empty Then
                    Temp = VBA.Replace(Mid(sArr(i, j), InStr(1, sArr(i, j), "(") + 1, Len(sArr(i, j)) - InStr(1, sArr(i, j), "(") - 1), ";", ",")
                    S = Split(Temp, ",")
                    For n = 0 To UBound(S)
                        If Dic.exists(sArr(i, 1) & "|" & Trim(S(n))) = False Then
                            Dic.Add sArr(i, 1) & "|" & Trim(S(n)), sArr(1, j)
                        End If
                    Next
                End If
            Next
        Next
    End With
    With Sheet2
        .Range("F5:I16").ClearContents
        sArr = .Range("E4:I16").Value
        For j = 2 To UBound(sArr, 2)
            For i = 2 To UBound(sArr)
                If Dic.exists(sArr(1, j) & "|" & sArr(i, 1)) = True Then
                    sArr(i, j) = Dic.Item(sArr(1, j) & "|" & sArr(i, 1))
                End If
            Next
        Next
        .Range("E4").Resize(UBound(sArr), UBound(sArr, 2)).Value = sArr
    End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom