Dùng SQL trên Excel
Kính gửi Anh chị,
Em có File sưu tầm trên mạng dùng SQL – Coi như Table là một Database và sẽ dùng SQL để lọc, tính toán…như trên SQLSERV thì làm thế nào ạ. Em đọc Code mà chưa hiểu cách chạy. Mong anh chị chỉ giúp ạ (Bỏ qua việc cài đặt Add in có sẵn ạ).
Có 1 cách dùng câu lệnh SQL, đó là dùng ADO liên kết. Cụ thể là topic www.giaiphapexcel.com/diendan/threads/ADO-Excel-Ketoan.25759/
Một cách khác tương tự SQL query đó là Power Query
Bạn làm như sau để chạy:
'Khai bao bien Dim cn as Object, sql as String Dim [B]FPath[/B] As String, [B]FName[/B] As String '[B]FPath[/B] và [B]FName[/B] là đường dẫn đầy đủ và tên của file dữ liệu nguồn, dùng cho câu .ConnectionString bên dưới 'Ket noi du lieu nguon Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & [B]FPath[/B] & "" & [B]FName[/B] & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" .Open End With 'Cau lenh SQL cua ban: sql = "SELECT MAX(NVL.[hh_ten]) AS TENHH " '.... '.... sql = sql & "FROM (([nhapxuat_vatlieu_chitiet$] NXCT " sql = sql & "INNER JOIN [nhapxuat_vatlieu$] NX ON NXCT.[nxct_nx_id]=NX.[nx_id]) " sql = sql & "INNER JOIN [nguyenvatlieu$] NVL ON NXCT.[nxct_hh_id]=NVL.[hh_id]) " sql = sql & "GROUP BY NXCT.nxct_hh_id" 'Truy van, ghi ket qua ra trang tinh Set rs = cn.Execute(sql) Sheet1.Range("A1").CopyFromRecordset rs 'Thay doi bang vi tri chep ket qua cua banMình thử mà không được ? Không rõ mình còn thiếu Refer đến thư viện nào không mà không chạy được ? Với mình hỏi là mình không muốn câu lệnh SQL nó cố định trong đoạn VBA mà khi mình gõ đoạn code đó tại A1 của Sheet4 thì nó chạy ?
Đoạn sub này của bạn sửa thành thế này
Sub sql_1() 'Khai bao bien Dim cn As Object, sql As String Dim FPath As String, FName As String 'FPath và FName là du?ng d?n d?y d? và tên c?a file d? li?u ngu?n, dùng cho câu .ConnectionString bên du?i FName = ThisWorkbook.Path & "" & ThisWorkbook.Name 'Ket noi du lieu nguon Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & FName & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" .Open End With sql = "SELECT * FROM RangeName WHERE Reporter='Albania'" Set rs = cn.Execute(sql) Sheet4.Range("A2").CopyFromRecordset rs 'Thay doi bang vi tri chep ket qua cua ban End Sub
Cảm ơn Vân. Vân cho mình hỏi là mình muốn linh hoạt trong câu lệnh SQL nên muốn cho nó đoạn lênh SQL vào ô A1 để tiện. Mình đã sửa như File mà không được. Vân xem giúp mình với nhé !
Bạn thử bằng sub này xem
Sub sql_1()
'Khai bao bien
Dim cn As Object, sql As String
Dim FPath As String, FName As String
'FPath và FName là du?ng d?n d?y d? và tên c?a file d? li?u ngu?n, dùng cho câu .ConnectionString bên du?i
FName = ThisWorkbook.Path & "" & ThisWorkbook.Name
'Ket noi du lieu nguon
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & FName & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
.Open
End With
'sql = "SELECT * FROM RangeName WHERE Reporter='Albania' and Partner='World'"
sql = Sheet4.Range("A1").Value
Set rs = cn.Execute(sql)
Sheet4.Range("A2").CopyFromRecordset rs 'Thay doi bang vi tri chep ket qua cua ban
End Sub
www.giaiphapexcel.com/diendan/threads/d%C3%B9ng-sql-tr%C3%AAn-excel.150184/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
– Tiêu đề phải copy từ Data sang hoặc điền tay. Đáng lẽ khai báo ConnectionString có HDR=YES thì phải có Header nhưng hiện tại không thấy chạy
– Mã 2 có tính Sum nhưng thiếu Group By những field không tính toán. Sửa như sau:
SELECT Distinct ,SUM([Trade Value (US$)]) As FROM RangeName Group By
Nếu lấy 3 cột thì phải Group By 2 cột không tính toán:
SELECT Distinct ,,SUM([Trade Value (US$)]) As FROM RangeName Group By ,
– Hàm ROW_NUMBER() chỉ dùng cho CSDL SQL Server thôi nhé.
– Nếu như các dòng dữ liệu của em có 1 field làm khoá (Primary Key) để phân biệt dòng này với dòng khác thì có thể dùng Subquery lồng vô để tạo tự động số thứ tự dòng. Đối với trường hợp dữ liệu như hiện tại thì anh bó tay.
Em ngâm cứu cách tạo thêm cột Stt sau bằng code riêng trong Excel đi.