Chào các anh chị. Em là newbee, đang chập chững tìm hiểu VBA.
Em có một bài toán sau nhờ các anh chị giúp đỡ ạ.
Nội dung:
Mảng "A11:N". Cần lọc các dòng có dữ liệu ở cột C có giá trị "VP", xóa những dòng có giá trị khác đi và dồn hàng lên. Trong đó cột H:K có chứa công thức, cần giữ lại công thức. File dữ liệu của em khá lớn, hơn 4000 hàng ạ. Em chỉ copy 1 phần vào file ví dụ thôi.
Em đã thử viết công thức như sau, nhưng chạy thử bị báo lỗi #9 ạ. Anh chị nào xem giúp em cách giải quyết được không ạ. Em cám ơn.
Sub LocDuLieu()
Dim WS As Worksheet
Dim dataRange As Range
Dim dataArray As Variant
Dim resultArray() As Variant
Dim resultIndex As Long
Dim i, j As Long
Dim lastRow As Long
Set WS = ThisWorkbook.Worksheets("Sheet1")
lastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
On Error Resume Next
Set dataRange = WS.Range("A11:N" & lastRow).SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If dataRange Is Nothing Then
MsgBox "KHONG TIM THAY DU LIEU", vbExclamation
Exit Sub
End If
dataArray = dataRange.Value
ReDim resultArray(1 To UBound(dataArray, 1), 1 To UBound(dataArray, 2))
resultIndex = 1
For i = 1 To UBound(dataArray, 1)
If dataArray(i, 3) = "VP" Then
For j = 1 To 14
resultArray(resultIndex, j) = dataArray(i, j)
Next j
resultIndex = resultIndex + 1
End If
Next i
dataRange.ClearContents
If resultIndex > 1 Then
Set dataRange = dataRange.Resize(resultIndex - 1, UBound(dataArray, 2))
dataRange.Value = resultArray
End If
WS.Cells(1, 1).Select
End Sub
Em có một bài toán sau nhờ các anh chị giúp đỡ ạ.
Nội dung:
Mảng "A11:N". Cần lọc các dòng có dữ liệu ở cột C có giá trị "VP", xóa những dòng có giá trị khác đi và dồn hàng lên. Trong đó cột H:K có chứa công thức, cần giữ lại công thức. File dữ liệu của em khá lớn, hơn 4000 hàng ạ. Em chỉ copy 1 phần vào file ví dụ thôi.
Em đã thử viết công thức như sau, nhưng chạy thử bị báo lỗi #9 ạ. Anh chị nào xem giúp em cách giải quyết được không ạ. Em cám ơn.
Sub LocDuLieu()
Dim WS As Worksheet
Dim dataRange As Range
Dim dataArray As Variant
Dim resultArray() As Variant
Dim resultIndex As Long
Dim i, j As Long
Dim lastRow As Long
Set WS = ThisWorkbook.Worksheets("Sheet1")
lastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
On Error Resume Next
Set dataRange = WS.Range("A11:N" & lastRow).SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If dataRange Is Nothing Then
MsgBox "KHONG TIM THAY DU LIEU", vbExclamation
Exit Sub
End If
dataArray = dataRange.Value
ReDim resultArray(1 To UBound(dataArray, 1), 1 To UBound(dataArray, 2))
resultIndex = 1
For i = 1 To UBound(dataArray, 1)
If dataArray(i, 3) = "VP" Then
For j = 1 To 14
resultArray(resultIndex, j) = dataArray(i, j)
Next j
resultIndex = resultIndex + 1
End If
Next i
dataRange.ClearContents
If resultIndex > 1 Then
Set dataRange = dataRange.Resize(resultIndex - 1, UBound(dataArray, 2))
dataRange.Value = resultArray
End If
WS.Cells(1, 1).Select
End Sub
File đính kèm
Lần chỉnh sửa cuối: