Iif – Subquery - Lastrow
Nâng cao kỹ năng truy vấn SQL trong Excel VBA với 3 kỹ thuật thực chiến: hàm điều kiện IIF() thay thế IF lồng nhau, truy vấn con (Subquery) xử lý logic đa tầng và cách xác định dòng cuối động (LastRow).

1.IIF là gì?
IIF là câu lệnh tương tự như lệnh IF trong excel, cho phép bạn sử dụng các phép logic để kiểm tra điều kiện cho trước. Từ đó có thể thực hiện các thao tác tương ứng khi điều kiện đúng hoặc sai.
Có thể kết hợp nhiều câu lệnh IFF với nhau để thực hiện các so sánh phức tạp hơn.
Cú pháp: IIF (Condition, True, False)
Kết hợp nhiều hàm IIF:
IIF (Condition_1, True, IIF (Condition_2, True, IIF(Condition_3, True,...)))...)
Ví dụ : SELECT IIF(col1 > 1000, A,B), col2, col3,…. FROM [TableX$] WHERE …..
2.SUBQUERY
SUBQUERY cho phép bạn tạo truy vấn lồng ghép (truy vấn phụ hay truy vấn con) giúp tiết kiệm thời gian khi thực hiện các truy vấn phức tạp.
Tuy nhiên sẽ làm câu lệnh trở nên phức tạp hơn, đòi hỏi bạn phải hiểu rõ logic của câu lệnh.
Cú pháp: SELECT ..... FROM (SELECT...... FROM.....)
Nội dung đỏ chính là truy vấn con.
Ví dụ:
SELECT count(Distinct_col1)
FROM (SELECT Distinct Col1 as Distinct_col1 FROM [table_name$])
3.LAST ROW
Last Row chính là dòng cuối cùng trong bảng của bạn. Việc tìm last row sẽ giúp bạn dễ quản lí database.
Last Row còn là một đối tượng tượng quan tượng quan trọng trong SQL, nó được ứng dụng rất nhiều như: vòng lặp,….
Cú pháp: LR = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Trong đó A là tên cột(A,B,C,….AA,BB,….)
Mẹo Tối ưu Truy vấn SQL trong Excel VBA & Xử lý Lỗi Thường gặp
Khi triển khai câu lệnh truy vấn SQL thông qua kết nối ADODB.Connection trên nền tảng Microsoft Excel, bạn cần lưu ý 3 quy tắc vàng sau để đảm bảo tốc độ và độ chính xác tuyệt đối:
'' Chuỗi kết nối chuẩn hỗ trợ cả cột trộn kiểu dữ liệu Số và Văn bản (IMEX=1):
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & filePath & _
";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"
'' Quy tắc bọc tên Sheet và tên Cột có khoảng trắng hoặc tiếng Việt:
strSQL = "SELECT [Mã Hàng], [Tên Sản Phẩm], SUM([Thành Tiền]) AS TongTien " & _
"FROM [Data_BanHang$A1:G50000] " & _
"WHERE [Thành Tiền] IS NOT NULL " & _
"GROUP BY [Mã Hàng], [Tên Sản Phẩm]"
- Luôn thêm tham số
IMEX=1: Giúp trình điều khiển OLEDB không tự ý biến các mã hàng vừa có số vừa có chữ thành giá trịNull. - Giới hạn vùng dữ liệu khi Sheet có định dạng thừa: Thay vì gọi
[Sheet1$], bạn có thể chỉ định rõ[Sheet1$A1:Z50000]để bỏ qua các dòng rác cuối bảng. - Đóng kết nối sau khi
CopyFromRecordset: Luôn gọirs.Closevàcn.Closeđể giải phóng bộ nhớ RAM và tránh khóa file nguồn.
Bài viết liên quan
Thông báo
© 2021 CÔNG TY TNHH ERX VIỆT NAM
Địa chỉ văn phòng: 46/4 Nguyễn Cửu Vân, Phường 17, Quận Bình Thạnh, TP.HCM
share
tweet