Thầy cho em hỏi em có một bài toán như sau:
- Gồm 3 loại bài tập (A, B, C), mỗi bài tập sẽ làm trong 3 ngày
- Em cần đếm (0-2) cho bài tập A sau đó đến B và C rồi quay lại A và cứ thế lặp lại đến ngày mình cần kết thúc (như file đính kèm)
https://docs.google.com/spreadsheets/...
Thầy cho em xin hướng dẫn cách làm theo vba với ạ. Em cám ơn.
theo mình hiểu thì xác định ngày nào bắt đầu của A, ngày nào kết thúc của A, cứ như vậy tìm tiếp cho B và C.
Có thể dùng hàm index+match để tìm, trong đó ngày bắt đầu dựa trên số 0 để tìm, ngày kết thúc dựa trên số 2 để tìm.
Còn nếu dùng VBA phải dùng vòng lặp với biến i chạy theo số dòng của các bài A, B, C (từ dòng 5 tới dòng 7)
trong đó xét tiếp 1 vòng lặp nữa theo cột (từ cột G tới R => quy đổi ra số thứ tự cột thì mới chạy vòng lặp được)
=> tại vị trí nào có giá trị = 0 thì là ngày bắt đầu, giá trị = 2 là ngày kết thúc.
Việc dò tìm theo vòng lặp VBA này cũng tương tự như dò tìm với hàm index match thôi. Mình nghĩ cách dùng hàm sẽ nhanh hơn và cũng dễ hơn. Mình có làm mẫu, bạn tham khảo trong file nhé.
Thầy hiểu sai ý em rồi. Em muốn tạo ra bảng này chứ không phải đếm ngày bắt đầu và kết thúc.
Bắt đầu từ ngày 3, lần lượt điền lần lượt 0-2 vào B, sau đó điền lần lượt 0-2 vào C và quay lại A, B, C. Lặp lại theo thứ tự đến hết khoảng mình xác định.
Bạn tham khảo cách làm sau:
Sub bt()
Dim i As Long 'Bien vong lap theo dong
Dim j As Long 'bien tang them cot khi xuong dong
Dim k As Long 'bien lap lai tu dong dau
For i = 3 To 5
For k = 0 To 1
Cells(i, 2 + 9 * k + j * 3).Value = 0
Cells(i, 3 + 9 * k + j * 3).Value = 1
Cells(i, 4 + 9 * k + j * 3).Value = 2
Next k
j = j + 1
Next i
End Sub
với cách này bạn sẽ có logic đánh số 0-1-2 bắt đầu từ A, cột 2
=> bạn chạy vòng lặp trên, sau đó viết thêm lệnh xóa bỏ các giá trị thừa và các giá trị vượt quá phạm vi bảng là được (xác định phạm vi bảng, xác định vị trí nào là thừa => xóa các vị trí đó với lệnh .ClearContents)
Như hình dưới đây:
- tạo thêm 1 cột phụ ở trước Ngày 1 để giúp các vị trí chạy đúng, chỉ cần ẩn cột này là được)
- xóa các nội dung thừa sau khi có kết quả vòng lặp.