MS Excel İçin Gelişmiş Bir VBA Kılavuzu

VBA'ya yeni başlıyorsanız, yeni başlayanlar için VBA kılavuzumuzu(VBA guide for beginners) incelemeye başlamak isteyeceksiniz . Ancak deneyimli bir VBA uzmanıysanız ve (VBA)Excel'de (Excel)VBA ile yapabileceğiniz daha gelişmiş şeyler arıyorsanız , okumaya devam edin.

Excel'de (Excel)VBA kodlamasını kullanma yeteneği, tüm bir otomasyon dünyasının kapılarını açar. Excel'de(Excel) , butonlarda hesaplamaları otomatikleştirebilir ve hatta e-posta gönderebilirsiniz. VBA ile günlük işlerinizi otomatikleştirmek için tahmin edebileceğinizden çok daha fazla olasılık var .

Microsoft Excel için Gelişmiş VBA Kılavuzu(Advanced VBA Guide For Microsoft Excel)

Excel'de (Excel)VBA kodu yazmanın temel amacı, bir elektronik tablodan bilgi alabilmeniz, üzerinde çeşitli hesaplamalar yapabilmeniz ve ardından sonuçları tekrar elektronik tabloya yazabilmenizdir.

Aşağıdakiler, Excel'de VBA'nın (Excel)en(VBA) yaygın kullanımlarıdır .

  • Verileri içe aktarın(Import) ve hesaplamaları gerçekleştirin
  • (Calculate)Bir düğmeye basarak bir kullanıcının sonuçlarını hesaplayın
  • (Email)Hesaplama sonuçlarını birine e-posta ile gönder

Bu üç örnekle, kendi gelişmiş Excel VBA(Excel VBA) kodunuzun çeşitli türlerini yazabilmelisiniz .

Verileri İçe Aktarma ve Hesaplamaları Gerçekleştirme(Importing Data and Performing Calculations)

İnsanların Excel'i(Excel) kullandığı en yaygın şeylerden biri, Excel'in(Excel) dışında bulunan veriler üzerinde hesaplamalar yapmaktır . VBA kullanmıyorsanız , bu, verileri manuel olarak içe aktarmanız, hesaplamaları çalıştırmanız ve bu değerleri başka bir sayfaya veya rapora aktarmanız gerektiği anlamına gelir.

VBA ile tüm süreci otomatikleştirebilirsiniz. Örneğin, her Pazartesi(Monday) bilgisayarınızda bir dizine indirilen yeni bir CSV dosyanız varsa , (CSV)VBA kodunuzu (VBA)Salı(Tuesday) sabahı e-tablonuzu ilk açtığınızda çalışacak şekilde yapılandırabilirsiniz .

Aşağıdaki içe aktarma kodu, CSV dosyasını çalıştıracak ve Excel elektronik tablonuza aktaracaktır.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")
Cells.ClearContents

strFile = “c:\temp\purchases.csv”

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With

Excel VBA düzenleme aracını açın ve Sheet1 nesnesini seçin. Nesne ve yöntem açılır kutularından Çalışma Sayfası(Worksheet) ve Etkinleştir(Activate) öğesini seçin . Bu, elektronik tabloyu her açtığınızda kodu çalıştıracaktır.

Bu, bir Sub Worksheet_Activate()(Sub Worksheet_Activate() ) işlevi yaratacaktır . Yukarıdaki kodu o fonksiyona yapıştırın.

Bu, etkin çalışma sayfasını Sheet1(Sheet1) olarak ayarlar, sayfayı temizler, strFile değişkeni ile tanımladığınız dosya yolunu kullanarak dosyaya bağlanır ve ardından With döngüsü dosyadaki her satırda dolaşır ve A1 hücresinden başlayarak verileri sayfaya yerleştirir. .

Bu kodu çalıştırırsanız, CSV dosyası verilerinin (CSV)Sayfa1'deki(Sheet1) boş e-tablonuza aktarıldığını görürsünüz .

İçe aktarma yalnızca ilk adımdır. Ardından, hesaplama sonuçlarınızı içerecek sütun için yeni bir başlık oluşturmak istiyorsunuz. Bu örnekte, her bir öğenin satışı üzerinden ödenen %5'lik vergiyi hesaplamak istediğinizi varsayalım.

Kodunuzun yapması gereken işlemlerin sırası:

  1. Vergiler(taxes) adlı yeni sonuçlar sütunu oluşturun .
  2. Satılan birim(units sold) sütununda dolaşın ve satış vergisini hesaplayın.
  3. Hesaplama sonuçlarını sayfadaki uygun satıra yazın.

Aşağıdaki kod tüm bu adımları gerçekleştirecektir.

Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
Cells(1, 5) = "taxes"

For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell

Bu kod, veri sayfanızdaki son satırı bulur ve ardından ilk ve son veri satırına göre hücre aralığını (satış fiyatlarını içeren sütun) ayarlar. Ardından kod, bu hücrelerin her biri arasında dolaşır, vergi hesaplamasını gerçekleştirir ve sonuçları yeni sütununuza yazar (sütun 5).

Yukarıdaki VBA kodunu önceki kodun altına yapıştırın ve komut dosyasını çalıştırın. Sonuçların E sütununda göründüğünü göreceksiniz.

Artık, Excel(Excel) çalışma sayfanızı her açtığınızda, otomatik olarak dışarı çıkacak ve CSV dosyasındaki verilerin en yeni kopyasını alacaktır. Ardından hesaplamaları yapacak ve sonuçları sayfaya yazacaktır. Artık manuel olarak hiçbir şey yapmanıza gerek yok!

Düğmeye Basıldığında Sonuçları Hesaplayın(Calculate Results From Button Press)

Sayfa açıldığında otomatik olarak çalışmak yerine, hesaplamaların ne zaman çalıştırılacağı üzerinde daha fazla doğrudan denetime sahip olmayı tercih ediyorsanız, bunun yerine bir kontrol düğmesi kullanabilirsiniz.

Kontrol(Control) düğmeleri, hangi hesaplamaların kullanıldığını kontrol etmek istiyorsanız kullanışlıdır. Örneğin, yukarıdakiyle aynı durumda, bir bölge için %5 vergi oranı ve başka bir bölge için %7 vergi oranı kullanmak isterseniz ne olur?

Aynı CSV(CSV) içe aktarma kodunun otomatik olarak çalışmasına izin verebilirsiniz , ancak uygun düğmeye bastığınızda vergi hesaplama kodunu çalışır durumda bırakabilirsiniz.

Yukarıdakiyle aynı elektronik tabloyu kullanarak Geliştirici(Developer) sekmesini seçin ve şeritteki Kontroller(Controls) grubundan Ekle'yi(Insert) seçin . Açılır menüden ActiveX Denetimi (ActiveX Control)düğmesini seçin.(push button)

Basmalı düğmeyi, herhangi bir verinin gideceği yerden uzaktaki sayfanın herhangi bir yerine çizin.

Basmalı düğmeye sağ tıklayın ve Özellikler(Properties) öğesini seçin . Özellikler penceresinde, Altyazıyı(Properties) kullanıcıya göstermek istediğiniz şekilde değiştirin. Calculate 5% Tax olabilir .

Bu metnin basma düğmesinin kendisinde yansıdığını göreceksiniz. Özellikler(properties) penceresini kapatın ve basmalı düğmenin kendisine çift tıklayın. Bu, kod düzenleyici penceresini açacaktır ve imleciniz, kullanıcı düğmeye bastığında çalışacak olan işlevin içinde olacaktır.

Vergi oranı çarpanını 0,05'te tutarak, yukarıdaki bölümdeki vergi hesaplama kodunu bu fonksiyona yapıştırın. Etkin sayfayı tanımlamak için aşağıdaki 2 satırı eklemeyi unutmayın.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Şimdi, ikinci bir basma düğmesi oluşturarak işlemi tekrarlayın. Calculate 7% Tax başlığını yapın .

Bu düğmeye çift(Double-click) tıklayın ve aynı kodu yapıştırın, ancak vergi çarpanını 0,07 yapın.

Artık hangi düğmeye bastığınıza bağlı olarak vergiler sütunu buna göre hesaplanacaktır.

İşiniz bittiğinde, sayfanızda iki düğme de olacak. Her biri farklı bir vergi hesaplaması başlatacak ve sonuç sütununa farklı sonuçlar yazacaktır. 

Bunu yazmak için Geliştirici(Developer) menüsünü seçin ve Tasarım Modu'nu(Design Mode) devre dışı bırakmak için şeritteki Kontroller(Controls) grubundan Tasarım Modu'nu(Design Mode) seçin . Bu, basma düğmelerini etkinleştirecektir. 

"Vergiler" sonuç sütununun nasıl değiştiğini görmek için her bir düğmeyi seçmeyi deneyin.

Birine E-posta Hesaplama Sonuçları(Email Calculation Results to Someone)

E-tablodaki sonuçları e-posta yoluyla birine göndermek isterseniz ne olur?

Yukarıdaki prosedürün aynısını kullanarak Patrona E-posta Sayfası(Email Sheet to Boss) adlı başka bir düğme oluşturabilirsiniz . Bu düğmenin kodu, SMTP e-posta ayarlarını yapılandırmak için (SMTP)Excel CDO nesnesinin kullanılmasını ve sonuçların kullanıcı tarafından okunabilir bir biçimde e-postayla gönderilmesini içerecektir.

Bu özelliği etkinleştirmek için Araçlar ve Referanslar'ı(Tools and References) seçmeniz gerekir . Windows 2000 Kitaplığı için Microsoft CDO'ya(Microsoft CDO for Windows 2000 Library) gidin , etkinleştirin ve Tamam'ı seçin(OK) .

Bir e-posta göndermek ve elektronik tablo sonuçlarını yerleştirmek için oluşturmanız gereken kodun üç ana bölümü vardır.

Birincisi, konuyu, Kime ve Kimden(From) adreslerini ve e-posta gövdesini tutacak değişkenleri ayarlamaktır .

Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."

Elbette, gövdenin sayfada hangi sonuçlara bağlı olduğuna bağlı olarak dinamik olması gerekir, bu nedenle burada aralıktan geçen, verileri çıkaran ve gövdeye her seferinde bir satır yazan bir döngü eklemeniz gerekir.

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
strBody = strBody & vbCrLf

For Each cell In rng
     strBody = strBody & vbCrLf
     strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _
     & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "."
     rowCounter = rowCounter + 1
Next cell

Sonraki bölüm, SMTP sunucunuz aracılığıyla e-posta gönderebilmeniz için SMTP ayarlarının yapılmasını içerir. (SMTP)Gmail kullanıyorsanız , bu genellikle Gmail e-posta adresiniz, Gmail şifreniz ve Gmail SMTP sunucusudur (smtp.gmail.com).

Set CDO_Mail = CreateObject("CDO.Message") 
On Error GoTo Error_Handling
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
 .Update
End With

With CDO_Mail
     Set .Configuration = CDO_Config
End With

[email protected] ve şifrenizi kendi hesap detaylarınızla [email protected]

Son olarak, e-posta gönderimini başlatmak için aşağıdaki kodu girin.

CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description

Not(Note) : Bu kodu çalıştırmaya çalışırken bir aktarım hatası görürseniz, bunun nedeni büyük olasılıkla Google hesabınızın "daha az güvenli uygulamaların" çalışmasını engellemesidir. Daha az güvenli uygulamalar ayarları sayfasını(less secure apps settings page) ziyaret etmeniz ve bu özelliği AÇMALISINIZ.

Bu etkinleştirildikten sonra e-postanız gönderilecektir. Otomatik olarak oluşturulan sonuçlar e-postanızı alan kişiye bu şekilde görünür.

Gördüğünüz gibi aslında Excel VBA ile otomatikleştirebileceğiniz çok şey var . Bu makalede öğrendiğiniz kod parçacıklarıyla oynamayı deneyin ve kendi benzersiz VBA otomasyonlarınızı oluşturun.



About the author

10 yılı aşkın deneyime sahip bir bilgisayar uzmanıyım. Boş zamanlarımda, bir ofis masasında yardım etmeyi ve çocuklara interneti nasıl kullanacaklarını öğretmeyi severim. Becerilerim pek çok şeyi içeriyor ama en önemlisi, insanların sorunları çözmelerine nasıl yardım edeceğimi biliyorum. Acil bir konuda size yardımcı olabilecek birine ihtiyacınız varsa veya sadece bazı temel ipuçları istiyorsanız, lütfen bana ulaşın!



Related posts