Đã bao giờ bạn gặp tình trạng Danh sách thả xuống (Dropdown List của chức năng Data Validation) hiển thị không hết nội dung theo tên các đối tượng, hoặc có kích thước nhỏ khó nhìn chưa? Khi gặp tình trạng này thì khắc phục nó như thế nào? Hãy cùng Học Excel Online tìm hiểu cách thay đổi kích thước danh sách thả xuống trong Data Validation bằng VBA Excel nhé.
Xem nhanh
Dropdown List trong Data Validation là một chức năng được sử dụng khá thường xuyên trong Excel. (Nếu bạn chưa biết cách làm có thể xem tại bài viết: Tạo một danh sách tùy chọn trong Excel: tĩnh, động, từ một bảng tính khác). Nhưng danh sách này lại có đặc điểm:
Do đó có thể xảy ra các trường hợp:
Và bản thân Excel không hỗ trợ trực tiếp người dùng thay đổi đặc điểm này. Do đó nếu muốn thay đổi, bạn phải sử dụng VBA trong Excel.
Nguyên tắc này có thể mô tả như sau:
=> Dựa trên nguyên tắc này, chúng ta có thể thấy đây là 1 sự kiện Selection_Change, tức là bạn chọn 1 ô nào đó trong Sheet.
(Xem thêm: Lập trình sự kiện trong VBA Excel)
Cách thực hiện như sau:
Ví dụ tại ô B1 ta có áp dụng danh sách chọn tạo bởi Data Validation theo vùng A3:A7, trong đó cột B có Column Width = 8
Khi chọn vào ô B1 (ô chứa danh sách chọn), chúng ta muốn độ rộng cột B thay đổi từ 8 thành 14. Câu lệnh như sau:
Range(“B1”).ColumnWidth = 8
Range(“B1”).ColumnWidth = 14
IF mệnh đề logic Then
Range(“B1”).ColumnWidth = 14
Else
Range(“B1”).ColumnWidth = 8
End If
Mệnh đề này liên quan tới việc giới hạn phạm vi trong Worksheet, do đó cú pháp là:
IF Not Application.Intersect(Target, Range(“B1”)) Is Nothing Then
Range(“B1”).ColumnWidth = 14
Else
Range(“B1”).ColumnWidth = 8
End If
Trong toàn bộ cú pháp trên (phần tô màu hồng và đỏ), chú ý vùng Range(“B1”) là phần vùng giới hạn nơi diễn ra sự kiện. Phần này sẽ thay đổi tùy theo yêu cầu, còn phần chữ màu hồng là cú pháp quy định, bắt buộc phải viết lại đúng cú pháp đó.
Đặt toàn bộ cấu trúc này vào trong sự kiện Worksheet_SelectionChange, ta có:
Kết quả khi áp dụng sự kiện này như sau:
Nguyên tắc này có thể mô tả như sau:
Cách thực hiện như sau:
Cú pháp như sau:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range(“B1”)) Is Nothing Then
ActiveWindow.Zoom = 150
Else
ActiveWindow.Zoom = 100
End If
End Sub
Kết quả của câu lệnh này như sau:
Các bạn có thể tải về file ví dụ cho nội dung này tại địa chỉ: http://bit.ly/2NqLAHp
Qua bài viết này, các bạn có thể học thêm được kỹ năng lập trình sự kiện trong VBA. Đây là ứng dụng đơn giản những khá hiệu quả giúp bạn tùy biến các chế độ làm việc trong Excel, giúp dễ làm việc hơn, tăng hiệu quả trong công việc.
Ngoài ra các bạn có thể xem thêm một số bài viết sau:
Hướng dẫn cách viết cấu trúc IF THEN ELSE trong VBA Excel
Hướng dẫn cách sử dụng vòng lặp For Each trong VBA Excel
Hướng dẫn cách lập báo cáo chi tiết tự động trong Excel mới nhất 2019