Lọc dữ liệu trong nhiều sheet

Liên hệ QC

gigihieu

Thành viên mới
Tham gia
14/11/18
Bài viết
23
Được thích
3
Cả nhà ơi,

Gigi có dữ liệu trong 12 tháng ở 12 sheet khác nhau. Gigi muốn lọc dữ liệu của thành viên thành 1 file tổng (Gigi đã làm thủ công kết quả mong muốn như ở sheet sum).

Nhờ cả nhà tư vấn công thức để đạt kết quả như sheet sum.

Cảm ơn cả nhà
 

File đính kèm

  • Report_KPIs_2018.xlsx
    94.2 KB · Đọc: 9
Cả nhà ơi,

Gigi có dữ liệu trong 12 tháng ở 12 sheet khác nhau. Gigi muốn lọc dữ liệu của thành viên thành 1 file tổng (Gigi đã làm thủ công kết quả mong muốn như ở sheet sum).

Nhờ cả nhà tư vấn công thức để đạt kết quả như sheet sum.

Cảm ơn cả nhà
Có trường hợp trùng tên thì làm sao ta.
 
Làm mẫu cho bạn 3 tháng nhé, copy công thức và sửa tên các "tháng" ở các tháng tiếp theo
 

File đính kèm

  • Report_KPIs_2018.xlsx
    98.1 KB · Đọc: 12
Dear Snow25,

Cám ơn câu hỏi hay của Snow25, vậy mình có thể căn cứ theo mã nhân viên ở cột A => có cái này thì đảm bảo không trùng :)
Mã:
Sub locdulieu()
Dim arr, arr1(1 To 500, 1 To 8)
Dim a As Long, b As Long, i As Long, j As Long, lr As Long
Dim thang As String, dk As String
Dim sh As Worksheet
With Sheets("sum")
    dk = .Range("C4").Value
End With
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> "Sum" Then
        b = 1
       lr = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
       If lr > 9 Then
          arr = sh.Range("B9:i" & lr).Value
          thang = "Thang " & Month(sh.Range("G2").Value)
          For i = 1 To UBound(arr, 1)
              If UCase(dk) = UCase(arr(i, 1)) Then
                 a = a + 1
                 arr1(a, 1) = thang
                 arr1(a, 7) = arr(i, 7)
                 arr1(a, 8) = arr(i, 8)
                 Do While arr(i + b, 2) <> Empty
                    a = a + 1
                    For j = 1 To 8
                        arr1(a, j) = arr(i + b, j)
                    Next j
                    b = b + 1
                 Loop
                 a = a + 1
                 Exit For
              End If
         Next i
     End If
End If
Next
With Sheets("sum")
     lr = .Range("C" & Rows.Count).End(xlUp).Row
     .Range("A8:h" & lr).ClearContents
     If a Then .Range("A8").Resize(a, 8).Value = arr1
End With
End Sub
Bạn xem code nhé.Vì mình không để ý vẫn làm theo tên nếu có gì mai mình sửa.Giờ về rồi.Với lại form của bạn không chuẩn nên dữ liệu mà nó khác nhau thì sẽ bị lỗi.Vậy nên bạn đừng để gộp ô như vậy.Ở trong phần báo cáo.
Bài đã được tự động gộp:
 

File đính kèm

  • Report_KPIs_2018.xlsm
    104.7 KB · Đọc: 10
Lần chỉnh sửa cuối:
Mã:
Sub locdulieu()
Dim arr, arr1(1 To 500, 1 To 8)
Dim a As Long, b As Long, i As Long, j As Long, lr As Long
Dim thang As String, dk As String
Dim sh As Worksheet
With Sheets("sum")
    dk = .Range("C4").Value
End With
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> "Sum" Then
        b = 1
       lr = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
       If lr > 9 Then
          arr = sh.Range("B9:i" & lr).Value
          thang = "Thang " & Month(sh.Range("G2").Value)
          For i = 1 To UBound(arr, 1)
              If UCase(dk) = UCase(arr(i, 1)) Then
                 a = a + 1
                 arr1(a, 1) = thang
                 arr1(a, 7) = arr(i, 7)
                 arr1(a, 8) = arr(i, 8)
                 Do While arr(i + b, 2) <> Empty
                    a = a + 1
                    For j = 1 To 8
                        arr1(a, j) = arr(i + b, j)
                    Next j
                    b = b + 1
                 Loop
                 a = a + 1
                 Exit For
              End If
         Next i
     End If
End If
Next
With Sheets("sum")
     lr = .Range("C" & Rows.Count).End(xlUp).Row
     .Range("A8:h" & lr).ClearContents
     If a Then .Range("A8").Resize(a, 8).Value = arr1
End With
End Sub
Bạn xem code nhé.Vì mình không để ý vẫn làm theo tên nếu có gì mai mình sửa.Giờ về rồi.Với lại form của bạn không chuẩn nên dữ liệu mà nó khác nhau thì sẽ bị lỗi.Vậy nên bạn đừng để gộp ô như vậy.Ở trong phần báo cáo.
Bài đã được tự động gộp:
Dear Snow25,

Đây là Gigi lấy ví dụ một số thành viên. Thực tế Gigi còn vài bạn ở vị trí khác nhau nên sẽ có KPIs khác nhau (max 5 tiêu chí), Snow25 tư vấn giúp giải pháp nào tốt nhất nhé

Cám ơn Snow25
 
Dear Snow25,

Đây là Gigi lấy ví dụ một số thành viên. Thực tế Gigi còn vài bạn ở vị trí khác nhau nên sẽ có KPIs khác nhau (max 5 tiêu chí), Snow25 tư vấn giúp giải pháp nào tốt nhất nhé

Cám ơn Snow25
Vậy bạn bỏ gộp các ô là được.ở báo cáo ây.Nó sẽ trả kết quả đúng.
 
Dear Snow25,

Đây là Gigi lấy ví dụ một số thành viên. Thực tế Gigi còn vài bạn ở vị trí khác nhau nên sẽ có KPIs khác nhau (max 5 tiêu chí), Snow25 tư vấn giúp giải pháp nào tốt nhất nhé

Cám ơn Snow25
Bạn xem code này có được không nhé.
Mã:
Sub locdulieu()
Dim arr, arr1(1 To 500, 1 To 8)
Dim a As Long, b As Long, i As Long, j As Long, lr As Long
Dim thang As String, dk As String
Dim sh As Worksheet
With Sheets("sum")
    dk = .Range("C4").Value
End With
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> "Sum" Then
        b = 1
       lr = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
       If lr > 9 Then
          arr = sh.Range("B9:i" & lr).Value
          thang = "Th" & Chr(225) & "ng " & Month(sh.Range("G2").Value)
          For i = 1 To UBound(arr, 1)
              If UCase(dk) = UCase(arr(i, 1)) Then
                 a = a + 1
                 arr1(a, 1) = thang
                 arr1(a, 7) = arr(i, 7)
                 arr1(a, 8) = arr(i, 8)
                 Do While arr(i + b, 2) <> Empty
                    a = a + 1
                    For j = 1 To 8
                        arr1(a, j) = arr(i + b, j)
                    Next j
                    b = b + 1
                 Loop
                 a = a + 1
                 Exit For
              End If
         Next i
     End If
 End If
Next
With Sheets("sum")
     lr = .Range("C" & Rows.Count).End(xlUp).Row
     If lr > 7 Then .Range("A8:h" & lr).Clear
     If a Then
         .Range("A8").Resize(a - 1, 8).Value = arr1
         .Range("A8").Resize(a - 1, 8).Borders.LineStyle = 1
     End If
     lr = .Range("C" & Rows.Count).End(xlUp).Row
     For i = 1 To lr
         If .Cells(i, "A").Value <> Empty And .Cells(i, "B").Value <> Empty Then
            .Range("A" & i).Resize(b - 1, 1).Merge
            .Range("A" & i).Resize(b - 1, 1).Orientation = 90
            .Range("A" & i).Resize(b - 1, 1).HorizontalAlignment = xlCenter
            .Range("A" & i).Resize(b - 1, 1).VerticalAlignment = xlCenter
         End If
         If .Cells(i, "B").Value <> Empty And IsNumeric(.Cells(i, "B")) = False Then
             .Range("B" & i).Resize(, 7).Interior.Color = 6299648
             .Range("B" & i).Font.ThemeColor = xlThemeColorDark1
         End If
     Next i
End With
End Sub
 

File đính kèm

  • Report_KPIs_2018.xlsm
    105.6 KB · Đọc: 19
Bạn xem code này có được không nhé.
Mã:
Sub locdulieu()
Dim arr, arr1(1 To 500, 1 To 8)
Dim a As Long, b As Long, i As Long, j As Long, lr As Long
Dim thang As String, dk As String
Dim sh As Worksheet
With Sheets("sum")
    dk = .Range("C4").Value
End With
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> "Sum" Then
        b = 1
       lr = sh.Range("C" & Rows.Count).End(xlUp).Row + 1
       If lr > 9 Then
          arr = sh.Range("B9:i" & lr).Value
          thang = "Th" & Chr(225) & "ng " & Month(sh.Range("G2").Value)
          For i = 1 To UBound(arr, 1)
              If UCase(dk) = UCase(arr(i, 1)) Then
                 a = a + 1
                 arr1(a, 1) = thang
                 arr1(a, 7) = arr(i, 7)
                 arr1(a, 8) = arr(i, 8)
                 Do While arr(i + b, 2) <> Empty
                    a = a + 1
                    For j = 1 To 8
                        arr1(a, j) = arr(i + b, j)
                    Next j
                    b = b + 1
                 Loop
                 a = a + 1
                 Exit For
              End If
         Next i
     End If
End If
Next
With Sheets("sum")
     lr = .Range("C" & Rows.Count).End(xlUp).Row
     If lr > 7 Then .Range("A8:h" & lr).Clear
     If a Then
         .Range("A8").Resize(a - 1, 8).Value = arr1
         .Range("A8").Resize(a - 1, 8).Borders.LineStyle = 1
     End If
     lr = .Range("C" & Rows.Count).End(xlUp).Row
     For i = 1 To lr
         If .Cells(i, "A").Value <> Empty And .Cells(i, "B").Value <> Empty Then
            .Range("A" & i).Resize(b - 1, 1).Merge
            .Range("A" & i).Resize(b - 1, 1).Orientation = 90
            .Range("A" & i).Resize(b - 1, 1).HorizontalAlignment = xlCenter
            .Range("A" & i).Resize(b - 1, 1).VerticalAlignment = xlCenter
         End If
         If .Cells(i, "B").Value <> Empty And IsNumeric(.Cells(i, "B")) = False Then
             .Range("B" & i).Resize(, 7).Interior.Color = 6299648
             .Range("B" & i).Font.ThemeColor = xlThemeColorDark1
         End If
     Next i
End With
End Sub
Dear Snow25,

Gigi sẽ run xem thế nào. Nhìn sơ qua chắc là chuẩn rồi :). Gigi cảm ơn nhiều nhé
 
Web KT
Back
Top Bottom