2. Với nhiều sheet dữ liệu
Bạn cần đăng nhập để thấy hình ảnh
So với input là một sheet dữ liệu thì bài toán nhiều sheet dữ liệu sẽ có một chút rắc rối sau.
Dữ liệu kiểu này không phải là file do máy xuất ra. Một số phần mềm chuyên dụng tạo ra file csv hay Excel thì chúng đều chỉ có một sheet dữ liệu. Dữ liệu như vậy đều có định dạng (format, cấu trúc dữ liệu) rất chuẩn. Người code hầu như không phải tốn công tốn sức kiểm tra input đầu vào.
Tuy nhiên với dữ liêu kiểu nhiều sheet, chúng phần lớn là các file do ai đó tạo ra và nhập dữ liệu bằng tay. Có nghĩa là dữ liệu không chuẩn. Người code rất tốn công sức kiểm tra input đầu vào.
-Vị trí dòng hay cột đã chuẩn chưa. Để kiểm tra điều này, cần phải định nghĩa được từ khóa cần kiểm tra. Nếu không phát hiện thấy từ khóa thì đưa ra cảnh báo định dạng dữ liệu không tốt, người dùng cần kiểm tra lại.
Ở đây có hai cách nghĩ, ngay khi tìm thấy điểm mâu thuẫn phải đưa ra cảnh báo và dừng chương trình và đưa ra cảnh báo.
Hoặc là cứ kiểm tra hết đi rồi sau đó ra thông báo bằng một danh sách các lỗi.
Tất nhiên thoạt nghe, chúng ta sẽ thấy, nếu đưa ra thông báo băgf một danh sách các lỗi thì thích biết bao. Nhưng việc này không phải lúc nào cũng thực hiện được.
Bạn cần đăng nhập để thấy đính kèm
Nếu các keyword là ngang hàng nhau thì ta sẽ tiến hành làm theo cách này. Kiểm tra tất cả các Keyword rồi ra thông báo bằng danh sách lỗi. Tất nhiên, nếu yêu cầu không cao, cứ thấy lỗi ở đâu thì ra cảnh báo ở đó và dừng hẳn-điều đó rất thuận lợi cho người code. Các hỏi đáp trên các diễn đàn nếu hỗ trợ code cũng sẽ đi theo hướng này, giảm thiểu thời gian code. Thậm chí người code còn chẳng kiểm tra điều kiện đầu vào, mặc định input đúng, đi vào logic chính.
Sự việc sẽ phức tạp hơn nếu các Keyword liên quan tới nhau.
Bạn cần đăng nhập để thấy đính kèm
Lúc này, thiết kế phổ biến là chỉ cần phát hiện ra lỗi là lập tức ra cảnh báo rồi dừng luôn. Các Keyword phía sau không cần kiểm tra nữa, chương trình dừng ngay lập tức để đưa ra cảnh báo và dừng hẳn sau đó.
Sự việc sẽ còn phức tạp nếu các sheet có cấu trúc không giống nhau. Đối với cấu trúc các sheet giống nhau thì thật thuận tiện. Ví dụ sheet1 là dữ liệu của tháng 1, sheet 2 là dữ liệu của tháng 2,.. Như thế thì việc code không có gì phức tạp lắm.
Các kiến thức bạn cần có là:
Dictionary,
mảng, phương thức
Find.
Tôi phải đặc biệt lưu ý, khi làm việc với nhiều sheet dữ liệu, lúc này mảng không còn là kiến thức khuyến khích nữa mà là bắt buộc. Nếu không xử lý bằng mảng, chương trình của bạn có thể chạy rất chậm.
Ngoài ra còn phải kể tới một công cụ đắc lực là
Dictionary.
Tôi nghĩ Dictionary, mảng là hai công cụ chính khi làm việc với nhiều sheet dữ liệu, hay thậm chí nhiều file dữ liệu.
Với nhiều người còn quen thao tác bằng tay với Excel, khi viết code, họ đơn thuần là chuyển hóa cách nghĩ từ làm bằng tay sang làm bằng macro, vì vậy phương thức
Find là cần thiết. Nhưng với những người code có kinh nghiệm, sử dụng
Find có lẽ là không cần thiết, trừ trường hợp bạn không biết chính xác từ khóa cần tìm kiếm nằm ở nơi nào trên sheet.
Find là công cụ đắc lực tìm vị trí từ khóa nằm ở dòng nào, cột nào...
Sự việc sẽ phức tạp hơn nếu mỗi sheet là một kiểu dữ liệu có cấu trúc khác nhau.
Bạn cần đăng nhập để thấy đính kèm
Keyword trên mỗi sheet cũng khác nhau. Việc kiểm tra input đầu vào sẽ phức tạp hơn.
Tóm lại ở cấp độ này đòi hỏi người code cần có tối thiểu các kiến thức về:
-Mảng
-Dictionary
-Phương thức Find
-Thiết kế chương trình, kiểm tra input đầu vào
-Biết tạo ra workbook mới (hoặc file txt) lưu thông tin danh sách lỗi
-Biết tạo manual cho chương trình và checklist cho input đầu vào.
Việc kiểm tra input đầu vào và đưa ra cảnh báo cho người dùng là việc rất quan trọng. Chương trình có thân thiện hay không chính là ở điểm này.
Nếu mới code, phần lớn mọi người đều nhanh nhanh chóng chóng ra một thông báo là:
Msgbox "Khong tim thay du lieu"
Nếu cẩn thận hơn, lý do không tìm thấy dữ liệu là gì:
Msgbox "Khong tim thay du lieu vi khong tim thay " & keyword
Trong trường hợp đưa ra danh sách lỗi, bạn lại cần biết tạo ra file txt như thế nào và ghi thông tin lên đó ra sao. Với những người chưa quen thì nhanh nhất là cứ sử dụng môi trường Excel, tôi sẽ tạo ra một workbook mới và ghi danh sách lỗi vào đó.
Dự án hỗ trợ số 01 phải tạo ra rất nhiều file log (file ghi danh sách lỗi), mất rất nhiều thời gian. Dù đây không phải là yêu cầu của người cần hỗ trợ code, nhưng trong khi thảo luận thiết kế, admin tuhocvba đã tư vấn và đạt được nhất trí, sau đó code đi theo hướng này.
Một điểm nữa, vì dữ liệu input được nhập bằng tay. Nếu không có hướng dẫn sử dụng, đôi khi nhận được thông báo lỗi mà người dùng vẫn chẳng hiểu tại sao sai, tại sao chương trình không chạy được. Lý do này nghĩa là gì ấy nhỉ? Vì vậy, tạo ra manual hướng dẫn sử dụng là cần thiết. Thậm chí là bản checlist để người dùng sử dụng và tự check dữ liệu bằng tay trước khi chạy chương trình macro. Nghe qua thì thấy ôi sao tốn công tốn sức thế, nhưng nếu cần thiết thì cũng phải làm, nó đảm bảo macro đưa ra output chính xác 100%. Nếu sai hay không chạy thì ít nhất người dùng phải lý giải được lý do mà macro đưa ra và biết khắc phục.
Đây là giai đoạn bạn bắt đầu làm quen với thiết kế, trong đó trọng tâm là kiểm tra input đầu vào.