Chuyển đổi cách sắp xếp dữ liệu trong một vùng bằng VBA

Làm thế nào để chuyển đổi cách sắp xếp dữ liệu từ hàng sang cột, từ cột sang hàng? Chắc hẳn bạn sẽ dễ dàng có câu trả lời: Sử dụng Paste Special > Transpose

Nhưng trong trường hợp dữ liệu cần Transpose của chúng ta gồm nhiều cột, nhiều dòng trên cùng 1 vùng bảng thì làm thế nào?

Xét ví dụ sau: (Tải tài liệu kèm theo: ….)

Trên đây là 1 bảng dữ liệu về bán hàng. Tuy nhiên dữ liệu được trình bày theo từng nhóm. Việc này khiến chúng ta khó tổng hợp kết quả hơn, bởi cấu trúc dữ liệu dạng này không phù hợp cho việc sử dụng các công thức tổng hợp: Sumif, Countif…

Việc cấu trúc lại bảng dữ liệu này, nếu làm thông thường thì chúng ta phải thực hiện như sau:

  • Copy và paste transpose cho từng dòng dữ liệu
  • Khi hết 1 nhóm (4 dòng) thì lặp lại việc paste transpose từ dòng cuối của nhóm trước.

Như vậy công việc trên nếu làm thủ công sẽ tốn nhiều thời gian và dễ nhầm lẫn.

Chúng ta hoàn toàn có thể làm việc này bằng cách sử dụng 1 câu lệnh đơn giản trong VBA như sau:

Bước 1: Xác định độ rộng của mỗi nhóm với biến Số dòng

Bước 2: Thực hiện vòng lặp trong vùng cần transpose (từ dòng thứ 2 tới dòng cuối có dữ liệu). Khi thực hiện sẽ thực hiện theo từng nhóm. Do đó cần thêm Step SoDong cho vòng lặp này.

Bước 3: Xác định vùng sẽ lấy được trong vòng lặp

Bước 4: Dán dạng transpose vào vùng Sheet1, dòng cuối của cột A (là vùng sẽ dán dữ liệu tiếp theo của nhóm dữ liệu mới)

Kết quả thu được như sau:

Như vậy chúng ta đã có thể sử dụng bảng tính mới một cách dễ dàng hơn rồi.

Chúc các bạn học tốt cùng Học Excel Online!

Tải về file mẫu: http://bit.ly/2uAbuCM