Giúp lọc dữ liệu đưa kết quả vào sheet mới (1 người xem)

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

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

d1207t

Thành viên mới
Tham gia
24/11/11
Bài viết
40
Được thích
6
Dear các nah chị diễn đàn em xin giúp đỡ vấn đề sau:
Em có 1 file mà cột B (Phương án) bao gồm một số giá trị cố định. Em muốn có hàm vba nào có thể giúp lọc riêng từng phương án copy toàn bộ giá trị bảng tính (sau khi lọc) của phương án đó ra 1 sheet mới (Sheet mới mang tên phương án).
Như vậy có báo nhiêu phương án thì sẽ có tương ứng số sheets được tạo mới.
Rất mong các anh chị giúp đỡ em vấn đề này.
Trân thành cảm ơn các anh chị.
 

File đính kèm

Dear các nah chị diễn đàn em xin giúp đỡ vấn đề sau:
Em có 1 file mà cột B (Phương án) bao gồm một số giá trị cố định. Em muốn có hàm vba nào có thể giúp lọc riêng từng phương án copy toàn bộ giá trị bảng tính (sau khi lọc) của phương án đó ra 1 sheet mới (Sheet mới mang tên phương án).
Như vậy có báo nhiêu phương án thì sẽ có tương ứng số sheets được tạo mới.
Rất mong các anh chị giúp đỡ em vấn đề này.
Trân thành cảm ơn các anh chị.
Mã:
Sub TachPhuongAn()
  Dim sArr(), Res()
  Dim eRow&, sR&, sC&, i&, i2&, j&, k&, ikey$
 
  With Sheets("SL")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 2 Then Exit Sub
    sArr = .Range("A1:H" & eRow).Value
  End With
  sR = UBound(sArr, 1): sC = UBound(sArr, 2)
  Application.ScreenUpdating = False
  With CreateObject("scripting.dictionary")
    For i = 2 To sR
      ikey = sArr(i, 2)
      If Len(ikey) > 0 Then
        If .exists(ikey) = False Then
          .Add ikey, ""
          ReDim Res(1 To sR, 1 To sC)
          k = 1
          For j = 1 To sC 'Tieu De
            Res(k, j) = sArr(k, j)
          Next j
          For i2 = i To sR 'Loc Du lieu
            If sArr(i2, 2) = ikey Then
              k = k + 1
              For j = 1 To sC
                Res(k, j) = sArr(i2, j)
              Next j
            End If
          Next i2
          For j = 1 To Sheets.Count
            With Sheets(j)
              If .Name = ikey Then
                .UsedRange.ClearContents
                .Range("A1:H" & k) = Res
                Exit For
              End If
            End With
          Next j
          If j > Sheets.Count Then
            Sheets.Add After:=Sheets(Sheets.Count)
            With Sheets(Sheets.Count)
              .Name = ikey
              .Range("A1").Resize(k, sC) = Res
            End With
          End If
        End If
      End If
    Next i
  End With
  Sheets("SL").Select
  Application.ScreenUpdating = True
End Sub
 
Dear các nah chị diễn đàn em xin giúp đỡ vấn đề sau:
Em có 1 file mà cột B (Phương án) bao gồm một số giá trị cố định. Em muốn có hàm vba nào có thể giúp lọc riêng từng phương án copy toàn bộ giá trị bảng tính (sau khi lọc) của phương án đó ra 1 sheet mới (Sheet mới mang tên phương án).
Như vậy có báo nhiêu phương án thì sẽ có tương ứng số sheets được tạo mới.
Rất mong các anh chị giúp đỡ em vấn đề này.
Trân thành cảm ơn các anh chị.
Cách khách cho bạn lựa chọn
Mã:
Sub tachsheet()
Dim sArr As Variant
Dim i As Long, Lr As Long, Lr1 As Long, ShN As String

Application.ScreenUpdating = False
With Sheets("SL")
    Lr = .Range("A10000").End(xlUp).Row
    sArr = .Range("A2:H" & Lr).Value2
End With
For i = 1 To UBound(sArr)
    If InStr(ShN, sArr(i, 2)) = 0 Then
        ShN = ShN & sArr(i, 2)
        Sheets.Add After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Range("A1").Value = "Phuong An"
            .Range("B1").Value = sArr(i, 2)
            .Range("A2:H2").Value = Sheets("SL").Range("A1:H1").Value
            .Cells.Font.Name = ".VnTime"
            .Name = sArr(i, 2)
        End With
    End If
    With ActiveSheet
        If .Range("B1").Value = sArr(i, 2) Then
            Lr1 = .Range("A10000").End(xlUp).Row + 1
            .Range("A" & Lr1) = sArr(i, 1)
            .Range("B" & Lr1) = sArr(i, 2)
            .Range("C" & Lr1) = sArr(i, 3)
            .Range("D" & Lr1) = sArr(i, 4)
            .Range("E" & Lr1) = sArr(i, 5)
            .Range("F" & Lr1) = sArr(i, 6)
            .Range("G" & Lr1) = sArr(i, 7)
            .Range("H" & Lr1) = sArr(i, 8)
        End If
    End With
Next i
Sheets("SL").Select
Application.ScreenUpdating = True

End Sub
 
Cách khách cho bạn lựa chọn
Mã:
Sub tachsheet()
Dim sArr As Variant
Dim i As Long, Lr As Long, Lr1 As Long, ShN As String

Application.ScreenUpdating = False
With Sheets("SL")
    Lr = .Range("A10000").End(xlUp).Row
    sArr = .Range("A2:H" & Lr).Value2
End With
For i = 1 To UBound(sArr)
    If InStr(ShN, sArr(i, 2)) = 0 Then
        ShN = ShN & sArr(i, 2)
        Sheets.Add After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Range("A1").Value = "Phuong An"
            .Range("B1").Value = sArr(i, 2)
            .Range("A2:H2").Value = Sheets("SL").Range("A1:H1").Value
            .Cells.Font.Name = ".VnTime"
            .Name = sArr(i, 2)
        End With
    End If
    With ActiveSheet
        If .Range("B1").Value = sArr(i, 2) Then
            Lr1 = .Range("A10000").End(xlUp).Row + 1
            .Range("A" & Lr1) = sArr(i, 1)
            .Range("B" & Lr1) = sArr(i, 2)
            .Range("C" & Lr1) = sArr(i, 3)
            .Range("D" & Lr1) = sArr(i, 4)
            .Range("E" & Lr1) = sArr(i, 5)
            .Range("F" & Lr1) = sArr(i, 6)
            .Range("G" & Lr1) = sArr(i, 7)
            .Range("H" & Lr1) = sArr(i, 8)
        End If
    End With
Next i
Sheets("SL").Select
Application.ScreenUpdating = True

End Sub
em cảm ơn anh nhiều nhé!
Bài đã được tự động gộp:

Mã:
Sub TachPhuongAn()
  Dim sArr(), Res()
  Dim eRow&, sR&, sC&, i&, i2&, j&, k&, ikey$

  With Sheets("SL")
    eRow = .Range("B" & Rows.Count).End(xlUp).Row
    If eRow < 2 Then Exit Sub
    sArr = .Range("A1:H" & eRow).Value
  End With
  sR = UBound(sArr, 1): sC = UBound(sArr, 2)
  Application.ScreenUpdating = False
  With CreateObject("scripting.dictionary")
    For i = 2 To sR
      ikey = sArr(i, 2)
      If Len(ikey) > 0 Then
        If .exists(ikey) = False Then
          .Add ikey, ""
          ReDim Res(1 To sR, 1 To sC)
          k = 1
          For j = 1 To sC 'Tieu De
            Res(k, j) = sArr(k, j)
          Next j
          For i2 = i To sR 'Loc Du lieu
            If sArr(i2, 2) = ikey Then
              k = k + 1
              For j = 1 To sC
                Res(k, j) = sArr(i2, j)
              Next j
            End If
          Next i2
          For j = 1 To Sheets.Count
            With Sheets(j)
              If .Name = ikey Then
                .UsedRange.ClearContents
                .Range("A1:H" & k) = Res
                Exit For
              End If
            End With
          Next j
          If j > Sheets.Count Then
            Sheets.Add After:=Sheets(Sheets.Count)
            With Sheets(Sheets.Count)
              .Name = ikey
              .Range("A1").Resize(k, sC) = Res
            End With
          End If
        End If
      End If
    Next i
  End With
  Sheets("SL").Select
  Application.ScreenUpdating = True
End Sub
Em cảm ơn anh nhiều nhé
 
em cảm ơn anh nhiều nhé!
Bài đã được tự động gộp:


Em cảm ơn anh nhiều nhé
bạn dùng Sub này trong trường hợp dữ liệu chưa được sort (không liền kề với nhau
Mã:
Sub tachsheet()
Dim sArr As Variant, sh As Worksheet
Dim i As Long, Lr As Long, Lr1 As Long, ShN As String

Application.ScreenUpdating = False
With Sheets("SL")
    Lr = .Range("A10000").End(xlUp).Row
    sArr = .Range("A2:H" & Lr).Value2
End With
For i = 1 To UBound(sArr)
    If InStr(ShN, sArr(i, 2)) = 0 Then
        ShN = ShN & sArr(i, 2)
        Sheets.Add After:=Sheets(Sheets.Count)
        With ActiveSheet
            .Range("A1").Value = "Phuong An"
            .Range("B1").Value = sArr(i, 2)
            .Range("A2:H2").Value = Sheets("SL").Range("A1:H1").Value
            .Cells.Font.Name = ".VnTime"
            .Name = sArr(i, 2)
        End With
    End If
    For Each sh In Worksheets
    If sh.Name <> "SL" Then
    With sh
        If .Name = sArr(i, 2) Then
            Lr1 = .Range("A10000").End(xlUp).Row + 1
            .Range("A" & Lr1) = sArr(i, 1)
            .Range("B" & Lr1) = sArr(i, 2)
            .Range("C" & Lr1) = sArr(i, 3)
            .Range("D" & Lr1) = sArr(i, 4)
            .Range("E" & Lr1) = sArr(i, 5)
            .Range("F" & Lr1) = sArr(i, 6)
            .Range("G" & Lr1) = sArr(i, 7)
            .Range("H" & Lr1) = sArr(i, 8)
        End If
    End With
    End If
    Next sh
Next i
Sheets("SL").Select
Application.ScreenUpdating = True
 
Dear Các Anh Chị, em muốn hỏi thêm 1 chút nữa, nếu khi tác sang các sheet mà em chỉ muốn lấy 1 số cột trong sheet SL thôi (do file gốc em có rất nhiều cột) Giả sử em chỉ muốn lấy sang sheet mới các cột A, B,D,F,H thì làm như thế nào ạ.
Em cảm ơn các anh chị.
 
Dear Các Anh Chị, em muốn hỏi thêm 1 chút nữa, nếu khi tác sang các sheet mà em chỉ muốn lấy 1 số cột trong sheet SL thôi (do file gốc em có rất nhiều cột) Giả sử em chỉ muốn lấy sang sheet mới các cột A, B,D,F,H thì làm như thế nào ạ.
Em cảm ơn các anh chị.
Bạn thay:
PHP:
If .Name = sArr(i, 2) Then
            Lr1 = .Range("A10000").End(xlUp).Row + 1
            .Range("A" & Lr1) = sArr(i, 1)
            .Range("B" & Lr1) = sArr(i, 2)
            .Range("C" & Lr1) = sArr(i, 3)
            .Range("D" & Lr1) = sArr(i, 4)
            .Range("E" & Lr1) = sArr(i, 5)
            .Range("F" & Lr1) = sArr(i, 6)
            .Range("G" & Lr1) = sArr(i, 7)
            .Range("H" & Lr1) = sArr(i, 8)
        End If

thành:

PHP:
If .Name = sArr(i, 2) Then
            Lr1 = .Range("A10000").End(xlUp).Row + 1
            .Range("A" & Lr1) = sArr(i, 1)
            .Range("B" & Lr1) = sArr(i, 2)
          '  .Range("C" & Lr1) = sArr(i, 3)
            .Range("D" & Lr1) = sArr(i, 4)
           ' .Range("E" & Lr1) = sArr(i, 5)
            .Range("F" & Lr1) = sArr(i, 6)
          '  .Range("G" & Lr1) = sArr(i, 7)
            .Range("H" & Lr1) = sArr(i, 8)
        End If
 
Web KT

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

Back
Top Bottom