Nguyễn Lê Khoa
Nguyễn Lê Khoa
Thảo luận 4 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 124 lượt xem

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

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.




Thảo luận 4 câu trả lời
Lượt xem 124 lượt xem
Vỗ tay vỗ tay
Nguyễn Lê Khoa 10:09 - Sep 30, 2021

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é.

Vỗ tay vỗ tay
Nguyễn Lê Khoa 10:09 - Sep 30, 2021

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.


Vỗ tay vỗ tay
Nguyễn Lê Khoa 10:10 - Oct 01, 2021

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)

Vỗ tay vỗ tay
Nguyễn Lê Khoa 10:10 - Oct 01, 2021

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.

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông