Em có một vấn đề như sau: Cho một bộ điểm XY - 23 điểm. Các giá trị của X và Y được nhập tương ứng vào 2 cột như trong hình minh hoạ. Sau đó đồ thị được tạo từ 23 điểm này, với giá trị ở trục tung là Y và trục hoành là X.
Bài toán đặt ra ở đây là:
Để giải quyết bài toán này (vì em có khá nhiều đồ thị nên muốn tạo một macro để thao tác cho nhanh, hơn nữa sau này cũng còn nhiều bài toán dạng này nữa), em đề xuất thuật toán với VBA như sau:
1) Nhập dữ liệu của cột X vào mảng X, và cột Y vào mảng Y. Vì khai báo dữ liệu mảng trong VBA cần phải xác định kích cỡ ma trận trước, nên trong module của macro ta sẽ khai báo một mảng với kích cỡ đủ lớn để thao tác.
2) Tiếp theo, ta cho biến chạy i từ 1 đến 23 (23 điểm) và xác định các vị trí đổi dấu bằng cách xét Y*Y[i+1]<0 hay không. Nếu trường hợp này xảy ra, có nghĩa là đồ thị đổi dấu, khi đó ta sẽ tính tọa độ đồ thị cắt trục X. Ta sẽ gán giá trị này cho X[24], còn Y[24]=0, cho điểm cắt đầu tiên. Sau đó, gán các giá trị tiếp theo cho lần lượt X[25], X[26], ...
Ghi nhớ biến DimMatrix cho số giá trị trong các mảng (DimMatrix = 23 + số điểm đồ thị cắt trục X)
3) Sắp xếp theo thứ tự từ bé đến lớn cho mảng X , còn mảng Y được sắp xếp phụ thuộc mảng X.
4) Đặt 2 biến NegativeArea và PositiveArea cho phần diện tích trên và dưới trục X của đồ thị. Sau đó ta thiết lập một vòng lặp từ i=1 đến DimMatrix. Xét Y và Y[i+1]:
Nếu Y>=0 and Y[i+1]>=0, PositiveArea=PositiveArea + 0.5*(Y+Y[i+1])*(X[i+1]-X)
Nếu Y<=0 and Y[i+1]<=0, NegativeArea=NegativeArea + 0.5*(-Y-Y[i+1])*(X[i+1]-X)
5) Xuất giá trị của NegativeArea và PositiveArea.
Xin mọi người cho ý kiến. Đây la lần đầu tiên em dùng VBA cho excel
Em cảm ơn nhiều!

Bài toán đặt ra ở đây là:
Tính diện tích phần dương (nằm trên trục X) và diện tích phần âm (nằm dưới trục X).
Để giải quyết bài toán này (vì em có khá nhiều đồ thị nên muốn tạo một macro để thao tác cho nhanh, hơn nữa sau này cũng còn nhiều bài toán dạng này nữa), em đề xuất thuật toán với VBA như sau:
1) Nhập dữ liệu của cột X vào mảng X, và cột Y vào mảng Y. Vì khai báo dữ liệu mảng trong VBA cần phải xác định kích cỡ ma trận trước, nên trong module của macro ta sẽ khai báo một mảng với kích cỡ đủ lớn để thao tác.
2) Tiếp theo, ta cho biến chạy i từ 1 đến 23 (23 điểm) và xác định các vị trí đổi dấu bằng cách xét Y*Y[i+1]<0 hay không. Nếu trường hợp này xảy ra, có nghĩa là đồ thị đổi dấu, khi đó ta sẽ tính tọa độ đồ thị cắt trục X. Ta sẽ gán giá trị này cho X[24], còn Y[24]=0, cho điểm cắt đầu tiên. Sau đó, gán các giá trị tiếp theo cho lần lượt X[25], X[26], ...
Ghi nhớ biến DimMatrix cho số giá trị trong các mảng (DimMatrix = 23 + số điểm đồ thị cắt trục X)
3) Sắp xếp theo thứ tự từ bé đến lớn cho mảng X , còn mảng Y được sắp xếp phụ thuộc mảng X.
4) Đặt 2 biến NegativeArea và PositiveArea cho phần diện tích trên và dưới trục X của đồ thị. Sau đó ta thiết lập một vòng lặp từ i=1 đến DimMatrix. Xét Y và Y[i+1]:
Nếu Y>=0 and Y[i+1]>=0, PositiveArea=PositiveArea + 0.5*(Y+Y[i+1])*(X[i+1]-X)
Nếu Y<=0 and Y[i+1]<=0, NegativeArea=NegativeArea + 0.5*(-Y-Y[i+1])*(X[i+1]-X)
5) Xuất giá trị của NegativeArea và PositiveArea.
Xin mọi người cho ý kiến. Đây la lần đầu tiên em dùng VBA cho excel
