Thursday, October 11, 2018

Code Vba Thông Dụng Trong Excel - Bài 5

Chào các bạn, Hôm trước trong bài thứ 4 mình đã giới thiệu về code Data Validation. Các code này rất hữu ích. Vì hiện nay đa phần các bạn dùng thủ công để thực hiện các thao tác, việc này rất tốn thời gian và hiệu suất công việc kém. Hôm nay mình xin giới thiệu đến các bạn code sắp xếp tăng dần hoặc giảm dần từ A->Z hoặc từ Z->A.

Hiện nay, khi các bạn sắp xếp một vùng dữ liệu, một cột, vd: sắp xếp tên khách hàng, sắp xếp mã khách hàng, ngày sinh....Các bạn thường sử dụng ứng dụng có sẵn trong excel để Sort, tuy nhiên ứng dụng đó lại qua nhiều bước thao tác và bị hạn chế. Vì vậy mình xin giới thiệu đến các bạn đoạn code sau, đoạn code này sẽ loại bỏ đi các yêu tố vướng mắc mà các bạn cần. Và đặc biệt là rất nhanh chóng.

+ Đoạn code như sau:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
[A3:A3].Font.ColorIndex = 0
[A3:A3].Interior.ColorIndex = xlNone
Dim R As Long, C As Long
If Not Intersect(Target, [A3:A3]) Is Nothing Then
    R = [A65536].End(xlUp).Row
    C = Target.Column
    If Target.Cells.Count = 1 Then
Range("A4:J" & R).Sort Key1:=Cells(4, Target.Column), Order1:=IIf([D1] = 1, xlDescending, xlAscending)
        [D1] = IIf([D1] = 1, 2, 1)
        Target.Font.ColorIndex = 3
        Target.Interior.ColorIndex = 6
        Range("D1").Select
    End If
End If
Application.EnableEvents = True
End Sub

- Mình sẽ giới thiệu từng phần trong đoạn code này như sau:
1. [A3:A3]: Đây là vùng tiêu đề của cột mà bạn cần sắp xếp trong sheet bạn muốn sắp xếp. Bạn có thể thay đổi vùng này cho phù hợp với vùng mà bạn muốn sắp xếp tăng hoặc giảm. VD: Cột tên khách hàng, thì tiêu đề sẽ là "Tên Khách Hàng" và bạn chọn vùng này. Các mã có [A3:A3] các bạn đều thay đổi như vậy cho đúng.
2. R = [A65536].End(xlUp).Row: Vùng này các bạn thay đổi theo cột tương ứng với cột cần sắp xếp ở mục 1, đây chỉ là câu lệnh để xác định dòng cuối cùng có dữ liệu trong cột A mà thôi. Mục đích là để nó Sort bao quát hết dữ liệu trong bảng tính.
3. Range("A4:J" & R): Vùng này là toàn bộ vùng dữ liệu bạn sẽ lấy đi kèm khi sắp xếp cột A. Mục đích là dữ liệu của dòng nào thì sẽ được đi kèm với dòng đó, không bị lộn xộn dữ liệu, sai dữ liệu khi sắp xếp.
+ Vùng dữ liệu bảng tính của sheet sắp xếp là vùng nào thì các bạn thay đổi chỗ: "A4:J" cho phù hợp.
+ Vùng này là bỏ đi dòng tiêu đề, sẽ được chọn từ dòng tiếp theo đến cột cuối cùng. VD: "A4:J".
4. =Cells(4, Target.Column): Đối với thuộc tính này, các bạn đổi lại chỗ số 4, đây là dòng tiếp theo sau khi bỏ đi dòng tiêu đề bảng tính là dòng mấy: VD: của mình tiêu đề là dòng 3, dòng tiếp theo là dòng 4.
5. Order1:=IIf([D1] = 1: Chỗ ô D1 các bạn đổi lại một ô bất kỳ ngoài bảng tính, và ô này là ô không có dữ liệu. Mục đích ô này là để code xác định được số 1 hoặc 2 để Sort mà thôi. Số này tự động nó điền.
6. [D1] = IIf([D1] = 1, 2, 1), Range("D1").Select: Tương tự ba ô D1 này các bạn cũng đổi lại ô trống không có dữ liệu như hướng dẫn ở mục 5. Các bạn đổi lại bằng đúng ô các bạn đã đổi ở mục 5 nhé.
+ Code này khi bạn đặt con trỏ vào ô tiêu đề của cột sắp xếp, thì dữ liệu sẽ được sắp xếp ngay lập tức.
+ Tại ô tiêu đề của cột cần sắp xếp sẽ tiến hành tự động đổi màu nền của ô để phân biệt với cột khác.
=> Việc bạn đưa Code vào Sheet hiện hành mình đã hướng dẫn ở bài 4, mình xin đăng lại hình ảnh để các bạn tiện theo dõi và thao tác. Các bạn copy đoạn code của mình và đưa vào sheet như sau.
- Đầu tiên các bạn bấm ALT + F11 để vào cửa sổ VBAPROJECT như hình sau.
- Tiếp theo các bạn kích đúp chuột vào tên sheet mà bạn muốn đặt code này vào, sau đó tiến hành copy đoạn code của mình qua và dán vào phần bên phải của của sổ như hình bên dưới.
- Cuối cùng các bạn bấm lưu code, sau khi code được lưu xong, các bạn tắt cửa sổ Vba và quay lại file excel của mình để xem thành quả nhé. Hình 3.
=> Vậy là mình đã giới thiệu xong đến các bạn đoạn code sắp xếp dữ liệu tăng dần hoặc giảm dần. Còn nhiều code rất thú vị và hay ở các bài sau, mình sẽ gửi các bạn sau nhé.
Chúc các bạn thành công. Nếu chưa rõ, các bạn có thể Comment vào bài viết nhé.
Cảm ơn và chào các bạn!

0 comments:

Post a Comment