TOP

VBA Excel kullanarak SQL sorgusu

Tanım

Dış kaynaklardan veriyi çalışma sayfasına almanın birçok yolu vardır Excel . Bu yazıda bir veritabanı dosyasından verilerin nasıl sorgulanacağına bakacağız. MS Access ve bir dosyadan Excel kullanarak SQL içinde VBA . Evet, biraz karıştıracağız SQL ile VBA ! Ve düşündüğünüzden daha iyi!

SQL anlamına gelir Structured Query Language (yapılandırılmış sorgulama dili) ve veritabanlarından bilgi almak için kullanılan bir dildir (örneğin, MS Access, MS SQL Server, Oracle, Sybase, SAP, MySQL ve diğerleri).

Ayrıca internetten, metin dosyalarından veya diğer Excel veya CSV Dosyalar.


1. Excel VBA'den MS Access dosyasına SQL sorgusu

Bu yüzden bir veritabanı bağlantısına ihtiyacımız var (değişken varConn aşağıdaki makroda) ve SQL sorgusu (değişken varSQL ) rapor için veritabanından veri alımını otomatikleştirmek. Aşağıdaki örnekte var SQL sorgusu MS Access'deki küçük bir veritabanından veri alan .

Tıklamak veritabanını yükle MS Access (test.mdb) .

MS Access dosyası şu şekilde görünecektir:

Çalıştıracağımız makromuzu yazalım SQL sorgusu .

Menüyü aç Hizmet - Makro - Düzenleyici Visual Basic , yeni modülü takın (Menü Insert - Module ) ve makro metnini buraya kopyalayın:

Sub SQLQuery_1()
'moonexcel.com.ua
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Access Driver (*.mdb, *.accdb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Kaydet'i tıklayın ve Excel'ye dönün. Menüden seçim yapın Görünüm - Makrolar (Alt+F8) makromuzun adı " SQLQuery_1 ". Bir iletişim kutusu görünecektir, ona basın Veri tabanı... , Erişim dosyamızı arayın ve tıklayın ОК .

Artık makro sorgumuzun sütunları çektiğini görebiliriz. Month , Product Ve City masadan Sumproduct veritabanından test.mdb Excel dosyasını dosyalamak için.

2. VBA'den kapalı Excel dosyasına SQL sorgusu

Benzer şekilde normal bir Excel dosyasından veriyi sanki bir veritabanından alıyormuş gibi alabiliriz. Bunun için makromuzun kodunun biraz yeniden yazılması ve bağlantı sürücüsünün Access'ten Excel'ye değiştirilmesi gerekiyor.

Tabloyu dışa aktarıyoruz Sumproduct Excel'deki Access'ten ve dosyayı kaydedin. Daha sonra değiştirdiğimiz kodumuzu yeni bir modüle yerleştirip makroyu çalıştırıyoruz:

Sub SQLQuery_2()
'moonexcel.com.ua
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Excel dosyamızı seçebileceğimiz bir pencere açılacaktır (çağrılmalıdır) Sumproduct.xlsx veya başka bir uzantıyla). Onu bulup seçiyoruz. Hadi basalım ОК Access dosyasındakiyle aynı verileri alıyoruz.

Konuyla ilgili makaleler: