Rút trích dữ liệu có điều kiện bằng VBA (3 người xem)

Liên hệ QC

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

kokano90

Thành viên hoạt động
Tham gia
10/8/19
Bài viết
117
Được thích
25
Chào các anh chị ạ
Hiện tại em có file như đính kèm
Gồm 3 sheet : Input, Graph, aid
Em muốn lọc dữ liệu của sheet "Input" dựa vào điều kiện ô B1 của sheet " Graph"
Sau khi lọc xong thì copy dữ liệu sang sheet "aid"
Nhờ các anh chị giúp em với ạ
 

File đính kèm

Có anh chị, thầy cô nào có cách giải quyết nào giúp em với ạ
 
Chào các anh chị ạ
Hiện tại em có file như đính kèm
Gồm 3 sheet : Input, Graph, aid
Em muốn lọc dữ liệu của sheet "Input" dựa vào điều kiện ô B1 của sheet " Graph"
Sau khi lọc xong thì copy dữ liệu sang sheet "aid"
Nhờ các anh chị giúp em với ạ
Chạy code
Mã:
Sub Loc()
  Dim sArr(), Res(), i&, k&, j&, sRow&, sCol&, SP$
 
  Application.ScreenUpdating = False
  With Sheets("aid")
    i = .Range("D" & Rows.Count).End(xlUp).Row
    If i > 12 Then .Range("D13:BN" & i).ClearContents
  End With
  SP = Sheets("graph").Range("B1")
  If Len(SP) = 0 Then MsgBox ("Ma San Pham chua nhap"): Exit Sub
  With Sheets("input")
    If .AutoFilterMode = True Then .AutoFilterMode = False
    i = .Range("D" & Rows.Count).End(xlUp).Row
    If i < 6 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("D6:BN" & i).Value
  End With
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  ReDim Res(1 To sRow, 1 To sCol)
  For i = 1 To sRow
    If SP = sArr(i, 1) Then
      k = k + 1
      Res(k, 1) = k
      For j = 2 To sCol
        Res(k, j) = sArr(i, j)
      Next j
    End If
  Next i
 
  With Sheets("aid")
    If k Then .Range("D13:BN13").Resize(k) = Res
  End With
  Application.ScreenUpdating = True
End Sub
 
Anh @HieuCD ơi. Còn trường hợp B1 của sheets(graph) là ALL thì nó không lấy được dữ liệu ạ
 
Anh @HieuCD ơi. Còn trường hợp B1 của sheets(graph) là ALL thì nó không lấy được dữ liệu ạ
Tạo sự kiện chạy sub Loc
Nhập "ALL" lấy tất cả
Mã:
Sub Loc()
  Dim sArr(), Res(), i&, k&, j&, sRow&, sCol&, SP$, dkBln As Boolean
  Application.ScreenUpdating = False
  With Sheets("aid")
    i = .Range("D" & Rows.Count).End(xlUp).Row
    If i > 12 Then .Range("D13:BN" & i).ClearContents
  End With
  SP = Sheets("graph").Range("B1")
  If Len(SP) = 0 Then
    MsgBox ("Ma San Pham chua nhap"): Exit Sub
  Else
    If UCase(SP) = "ALL" Then dkBln = True
  End If
  With Sheets("input")
    If .AutoFilterMode = True Then .AutoFilter.ShowAllData
    i = .Range("D" & Rows.Count).End(xlUp).Row
    If i < 6 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("D6:BN" & i).Value
  End With
  sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
  ReDim Res(1 To sRow, 1 To sCol)
  For i = 1 To sRow
    If SP = sArr(i, 1) Or dkBln Then
      k = k + 1
      Res(k, 1) = k
      For j = 2 To sCol
        Res(k, j) = sArr(i, j)
      Next j
    End If
  Next i

  With Sheets("aid")
    If k Then .Range("D13:BN13").Resize(k) = Res
  End With
  Application.ScreenUpdating = True
End Sub
 

File đính kèm

Web KT

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

Back
Top Bottom