Nhờ các thày và mọi người trên diễn đàn tận tình chỉ bảo, em đã bước đầu hiểu được các thuật toán VBA. Em làm thử nghiên cứu bài toán lọc vật tư trên diễn đàn có 1 số chỗ em chưa hiểu hết bản chất, em xin mạn phép được hỏi một chút ah, cụ thể: Đầu bài toán của em như sau:
Yêu cầu của bài toán để tổng hợp vật tư ra Sheet THVT bên cạnh, theo mẫu em xin post hình để mọi người dễ nhìn:
Code của bài toán như sau:
Em có 1 số điều chưa rõ, xin được chỉ giúp:
1) Em hiểu đoạn Columns("G:G").Select; Selection.ClearContents là xoá toàn bộ cột G ở cả 2 Sheet, nhưng em thử Test bằng cách đánh số vào cột G của Sheet Bangdutoan thì nó không bị xoá khi chạy.
2) Em không biết mọi người khi đánh đoạn S02.Cells(i, 4) = "=SUMIF('Bang Du Toan'!R6C2:R" & n & "C2,RC[-2],'Bang Du Toan'!R6C5:R" & n & "C5)" chẳng hạn, có quay về màn hình excel nhờ trợ giúp viết cụm 'Bang Du Toan'! ...cho chính xác hay không? hay là cứ đánh thủ công bình thường như đánh Word (chứ không lấy tham chiếu trực tiếp từ Excel)
3) Ý này em mượn bài này để hỏi chung cho mọi bài, tức là tình trạng Code không liên hệ gì với Bảng excel khi bảng Excel bị thêm bớt dòng cột ( ví dụ nếu chèn hoặc xoá bớt dòng ở 1 trong 2 Sheet trên) thì Tổng hợp sẽ không đúng nữa? Vậy có cách nào cho Code trở thành "Code động", kiểu như khai biến mảng động ý ah?
4) Em không hiểu tại sao Code chưa hoàn thiện ở điểm gì mà nếu em xoá phần kết quả vừa chạy ra (SheetTHVT) thì em phải ấn Click Code chạy phải 2 lần nó mới được?
Yêu cầu của bài toán để tổng hợp vật tư ra Sheet THVT bên cạnh, theo mẫu em xin post hình để mọi người dễ nhìn:
Code của bài toán như sau:
PHP:
Sub TongVatTu()
Application.ScreenUpdating = False
''Loc lay vat tu
Dim n As Long, m As Long
m = S02.Range("C65000").End(xlUp).Row
If m > 5 Then
S02.Select
Rows("6:" & m + 1).Select
Selection.Delete Shift:=xlUp
End If
n = S01.Range("E65000").End(xlUp).Row
For i = 6 To n
If S01.Cells(i, 3) <> "công" And S01.Cells(i, 3) <> "ca" And S01.Cells(i, 3) <> "%" Then
m = S02.Range("C65000").End(xlUp).Row
DVT = S01.Cells(i, 3)
If S01.Cells(i, 4) <> 0 Then
S02.Cells(m + 1, 2) = S01.Cells(i, 2)
S02.Cells(m + 1, 3) = DVT
S02.Cells(m + 1, 7) = "=COUNTIF(R6C2:RC2,RC[-5])"
End If
End If
Next
''Xoa Vat tu trung va sort theo ten vat tu
m = S02.Range("G65000").End(xlUp).Row
For i = m To 6 Step -1
S02.Cells(i, 7).Select
If S02.Cells(i, 7) > 1 Then
Selection.EntireRow.Delete
End If
Next
m = S02.Range("C65000").End(xlUp).Row
Range("B6:C" & m).Select
Selection.Sort Key1:=Range("B6"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
''Lay tong so luong vat tu va tien cua tung vat tu
n = S01.Range("E65000").End(xlUp).Row
m = S02.Range("C65000").End(xlUp).Row
Columns("G:G").Select
Selection.ClearContents
For i = 6 To m
S02.Cells(i, 1) = i - 5
S02.Cells(i, 4) = "=SUMIF('Bang Du Toan'!R6C2:R" & n & "C2,RC[-2],'Bang Du Toan'!R6C5:R" & n & "C5)"
S02.Cells(i, 4).Select
Selection.NumberFormat = "#,##0.000"
S02.Cells(i, 6) = "=ROUND(RC[-2]*RC[-1],0)"
Next
Application.ScreenUpdating = True
End Sub
1) Em hiểu đoạn Columns("G:G").Select; Selection.ClearContents là xoá toàn bộ cột G ở cả 2 Sheet, nhưng em thử Test bằng cách đánh số vào cột G của Sheet Bangdutoan thì nó không bị xoá khi chạy.
2) Em không biết mọi người khi đánh đoạn S02.Cells(i, 4) = "=SUMIF('Bang Du Toan'!R6C2:R" & n & "C2,RC[-2],'Bang Du Toan'!R6C5:R" & n & "C5)" chẳng hạn, có quay về màn hình excel nhờ trợ giúp viết cụm 'Bang Du Toan'! ...cho chính xác hay không? hay là cứ đánh thủ công bình thường như đánh Word (chứ không lấy tham chiếu trực tiếp từ Excel)
3) Ý này em mượn bài này để hỏi chung cho mọi bài, tức là tình trạng Code không liên hệ gì với Bảng excel khi bảng Excel bị thêm bớt dòng cột ( ví dụ nếu chèn hoặc xoá bớt dòng ở 1 trong 2 Sheet trên) thì Tổng hợp sẽ không đúng nữa? Vậy có cách nào cho Code trở thành "Code động", kiểu như khai biến mảng động ý ah?
4) Em không hiểu tại sao Code chưa hoàn thiện ở điểm gì mà nếu em xoá phần kết quả vừa chạy ra (SheetTHVT) thì em phải ấn Click Code chạy phải 2 lần nó mới được?
File đính kèm
Lần chỉnh sửa cuối: