excel makro · diziler irden fazla değeri ir değişken üzerinde tutmak ve unlara ir index vermek...
TRANSCRIPT
Excel Makro
MAKROLARA GİRİŞ
1 Değişkenler (Variables)
Dim degisken_adi as type
Dim sayi as integer
Sayı adında tam sayı bir değişken tanımlar. Integer değişken tipi 2 byte’tır ve -32.768 ile 32.767
arasında değerler alabilir. Ek-A daki listede diğer değişken tiplerinin de özellikleri verilmiştir.
VBA ‘in anahtar sözcükleri kullanmayın.
Maksimum uzunluk 255 karakterdir.
İlk karakterin bir harf olması gerekir.
Değişkenin ismi nokta, boşluk yada ! @ # & veya $ içeremez.
Mantıksal değişken tanımlama
Dim bugunhaftaicimi as Boolean
Bugunhaftaicimi=true
Tarihsel değişken tanımlama
Dim d1, d2, d3 as date
d1=# 01/01/1999 #
2 Sabitler (Const)
Const sabit_adi as Type=değer
Const sayi as double=0.055
Const yol=”c:\deneme.xls”
Sabit için type belirtmezseniz, VBA seçtiğiniz değere en uygun değişken tipini kullanır. İsimlendirme
kuralları değişken tanımlamada kullanılan kurallar ile aynıdır.
3 Diziler
Dim dizi(10) as string
Dim ikiboyutlu(10,5) as integer
Diziler birden fazla değeri bir değişken üzerinde tutmak ve bunlara bir index vermek için kullanılır.
VBA da diziler 0 dan başlar. Örneğin 10 genişlikli bir dizinin 0...10 a kadar 11 elemanı olabilir.
4 Kontrol deyimleri
if...........then.........else yapısı
if then else yapısı en sık kullanılan kontrol bloklarındandır. Temelde program içersinde karar vermeyi
sağlar. AND, OR, NOT, XOR gibi yardımcı ifadelerle de güçlendirilir.
if koşu1 then
işlemler
elseif koşul2 then
işlemler
else
işlemler
end if
Örnek
if not<45 then
durum=”KALDI”
elseif not>=45 and <70
durum=”ORTA”
elseif not>=70 and not<85 then
durum=”İYİ”
else
durum=”ÇOK İYİ”
end if
Select case yapısı
if then else yapısında oluşturulduğunda karmaşaya yola açabilecek yada daha uzun yazmak
gerektiğinde select case yapısı if then else yapısının yerine geçer ve işlemleri basitleştirirek
yazılmasını kısaltır.
Select case değişken
Case koşul1
İşlemler
Case koşul2
İşlemler
Case else
İşlemler
End select
Örnek
Dim not as integer
not=inputbox(“Öğrencinin Notunu Giriniz”,”Not Girişi”)
select case not
case not <45
msgbox “KALDI”
case not>=45 and not<70
msgbox “ORTA”
case not>=70 and not<85
msgbox “İYİ”
case else
msgbox “ÇOK İYİ”
end select
5 Döngüler
For next döngüsü
Çok fazla tekrarlanan işlemleri döngüler yardımıyla daha az kod ile yazarız. For next döngüsü bir
değişken kullanarak tekrarlanan işlemler yapar.
Toplam=0
For i=1 to 5
Toplam=toplam+i^2
Next i
Msgbox toplam
i i2 Toplam
1 1 1
2 4 5
3 9 14
4 16 30
5 25 55
Not: for i=5 to 1 step -1 olsaydı 1 azalarak döngü dönerdi.
Do while döngüsü
Bir koşula bağlı olarak tekrarlı işlemleri yapmak için kullanılan döngülerdir. Koşul sağlandığı sürece
işlemler yapılır. Koşul sağlanmasa bile While ifadesi şayet loop un yanında ise döngü en az bir kez
döner.
i=0
Do while i<=5
i=i+1
Toplam=toplam+i^2
Loop
----------------------------------------------------
Toplam=0
i=5
do
i=i-1
toplam=toplam+i^2
loop while i>5
Yukarıdaki döngü sadece bir kez döner ve toplam=16 çıkar.
Do until döngüsü
Koşul sağlanana kadar işlemler yapılır. Koşul sağlanmasa bile until ifadesi şayet loop un yanında ise
döngü en az bir kez döner.
i=0
Do until i=5
i=i+1
Toplam=toplam+i^2
Loop
Msgbox toplam
----------------------------------------------------
Toplam=0
i=5
do
i=i-1
toplam=toplam+i^2
loop until i=4
Yukarıdaki döngü sadece bir kez döner ve toplam=16 çıkar.
6 MSGBOX kullanımı
Msgbox kullanıcıya mesaj vermek için kullanılır. Aşağıdaki Yapıda Yazılır.
Msgbox (Mesaj, Parametre1+Paremetre2+Parametre3, Başlık)
Parametre1: Mesaj kutusundaki simgenin ne olacağını belirler. (VbInformation, VbQuestion vb..)
Parametre2: Mesaj kutusundaki Butonların stilini belirler (VbYesNo, VbOkCancel, VbOkOnly vb..)
Parametre3: Mesaj kutusundaki butonlardan hangisinin ilk açılışta varsayılan buton olacağını belirler.
(VbDefaultbutton1, VbDefaultButton2 vb..)
Örnek
Bir form üzerinde çalışıldığında programı bir mesaj ile kullanıcıya sorarak sonlandırır.
Private Sub CommandButton6_Click()
cevap = MsgBox("Çıkmak İstediğinizden Emin misiniz?", vbQuestion + vbYesNo + vbDefaultButton2,
"Çıkış")
If cevap = vbYes Then
End
End If
End Sub
Not: Daha fazla bilgi için Ek-B den yararlanabilirsiniz...
7 INPUTBOX kullanımı
İnputbox kullanıcıya bir mesaj vererek kullanıcıdan bir değer almayı sağlar ve bu değeri bir değişkene
aktarır.
Değişken=inputbox(Mesaj, Başlık, İfade)
not= inputbox (“Bir not giriniz”,”Not Girişi”,”Buraya Not Yazın”)
if not<45 then
durum=”kaldı”
else
durum=”geçti”
end if
WORKBOOKS
Çalışma Kitabı nesnesidir. Bir VBA dilinde yada Visual Basicte program yazarken workbooks nesnesi
çalışma kitaplarını gösterir.
Bir Workbook oluşturmak ve eklemek
Private Sub CommandButton1_Click()
Dim Workbook1 As Workbook
Dim Workbook2 As Workbook
Set Workbook1 = Workbooks.Add
Set Workbook2 = Workbooks.Add
Workbook1.Activate
End Sub
Private Sub CommandButton13_Click()
Dim sayfam As Excel.Worksheet
Set sayfam = Worksheets.Add()
End Sub
Bir workbook nesnesi açmak
Private Sub CommandButton4_Click()
Dim Workbook1 As Workbook
Set Workbook1 = Workbooks.Open(FileName:="C:\book1.xls")
MsgBox Workbook1.Name
End Sub
Private Sub CommandButton2_Click()
Dim Workbook1 As Workbook
Set Workbook1 = Workbooks.Add(Template:="C:\book1.xls")
End Sub
Daha önceden kaydedilmiş bir workbook açar ve A1 hücresine bugünün tarihini formatlayarak
girer.
Private Sub CommandButton10_Click()
Dim Workbook1 As Workbook
Set Workbook1 = Workbooks.Open(FileName:="c:\book1.xls")
Range("A1").Value = Format(Date, "ddd mmm dd, yyyy")
Range("A1").EntireColumn.AutoFit
Workbook1.Close SaveChanges:=True
End Sub
Bir workbook nesnesini kapatmak
Private Sub CommandButton5_Click()
ActiveWorkbook.Close
End Sub
Work book nesnesini kaydetmek, ancak aynı isimle daha önceden var ise dosya sonuna bir sonraki
dosya sayısını atar.
Private Sub CommandButton9_Click()
Dim Workbook1 As Workbook
Dim i As Integer
Dim FileName As String
Set Workbook1 = Workbooks.Add(Template:=ThisWorkbook.Path & "\book1.xls")
i = 0
Do
i = i + 1
FileName = ThisWorkbook.Path & "\book1.xls" & i & ".xls"
Loop While FileExists(FileName)
Workbook1.SaveAs FileName:=FileName
End Sub
Work book nesnesini aynı isimli diğer dosya üzerine kaydetmek
Private Sub CommandButton7_Click()
Dim Workbook1 As Workbook
Set Workbook1 = Workbooks.Add
Application.DisplayAlerts = False
Workbook1.SaveAs FileName:=ThisWorkbook.Path & "\book1.xls"
Application.DisplayAlerts = True
End Sub
Workbook klasör içinde daha önceden kaydedilmiş mi?
Private Sub CommandButton8_Click()
Dim FileName As String
FileName = ThisWorkbook.Path & "\book1.xls"
If FileExists(FileName) Then
MsgBox FileName & " daha önce kaydedilmiş"
Else
MsgBox FileName & " kaydedilmemiş"
End If
End Sub
WORKSHEETS
Worksheetlerin index numaralarının mesaj ile gösterilmesi.
Private Sub CommandButton11_Click()
Dim i As Integer
For i = 1 To ThisWorkbook.Worksheets.Count
MsgBox Worksheets(i).Name & " has Index = " & ThisWorkbook.Worksheets(i).Index
Next i
End Sub
Girilen isimdeki çalışma sayfasını siler.
Private Sub CommandButton12_Click()
sayfaadi = InputBox("Bir Çalışma Sayfası Adı Giriniz", "Çalışma Sayfası Silme", "")
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(sayfaadi).Delete
Application.DisplayAlerts = True
End Sub
Girilen isimdeki çalışma sayfasını kopyalar.
Private Sub CommandButton14_Click()
sayfaadi = InputBox("Bir Çalışma Sayfası Adı Giriniz", "Çalışma Sayfası Kopyalama", "")
ActiveWorkbook.Worksheets(sayfaadi).Copy after:=Worksheets(Worksheets.Count)
End Sub
RANGE
B3 ten E10 a kadar olan aralığı seçer. C5 hücresini aktif eder.
Private Sub CommandButton15_Click()
Range("B3:E10").Select
Range("C5").Activate
End Sub
Aktif çalışma sayfasının A1:A10 hücre aralığındaki değerlerin toplamını mesajlar.
Private Sub CommandButton16_Click()
MsgBox WorksheetFunction.Sum(ActiveWorkbook.ActiveSheet.Range("A1:A10"))
End Sub
Range Nesnesi üreten özellik ve metodlar
ActiveCell Etkin hücre (Application, Window nesnelerinde)
Currentregion En yakındaki boş satırlar, boş sütunlar ve çalışma sayfası kenarıyla sınırlanan ancak
bunların dahil olmadığı bir aralık. (Range nesnesinde)
Dim rng as range
Rng=ActiveCell.CurrentRegion
Selectionà Geçerli seçim (Application, Window nesnelerinde)
UsedrangeàÇalışma sayfasındaki kullanılan bütün hücreleri içeren en küçük dikdörtgen alan (Ws
nesnesinde)
SpecialCellsàBelirtilen tip ve değerle eşleşen bütün hücreleri seçmeyi sağlar. (Range nesnesinde)
SpecialCells metodu için
Rng.SpecialCells(Type, Value)
Type zorunludur. Value ihmal edilebilir. Value ihmal edilirse tiplerine bakmadan bütün hücreler için
seçme işlemi geçerli olur.
Type Argumanları
xlCellTypeAllFormatConditionsàHerhangi bir formattaki hücreler.
xlCellTypeAllValidationàGeçerlilik denetimi ölçütleri içeren hücreler.
xlCellTypeBlanksàBoş Hücreler
xlCellTypeCommentsàNot içeren hücreler
xlCellTypeConstantsàSabit (sayı yada metin) içeren hücreler
xlCellTypeFormulasàFormül içeren hücreler
xlCellTypeLastCellàKullanılan aralıktaki en son hücre
xlCellTypeSameFormatConditionsàAynı formata sahip hücreler
xlCellTypeSameValidationàAynı geçerlilik denetimine sahip hücreler
xlCellTypeVisibleàGörünür durumdaki hücreler.
Value Argumanları
xlErrorsàHatalı formül hücreleri
xlLogicalàMantıksal formüller içeren hücreler
xlTextValuesàMetin içeren hücreler
xlNumbersàSayı içeren hücreler
Etkin hücreyi çevreleyen geçerli bölge içinde metin bulunan bütün hücrelerin içeriğini siler.
Private Sub CommandButton17_Click()
Dim r As Range
Worksheets("deneme").Activate
Set r = ActiveCell.CurrentRegion
r.SpecialCells(xlCellTypeConstants, xlTextValues).Value = ""
End Sub
Selection özelliği kullanımı
Sub secme()
Dim rng As Range
Set rng = Application.Selection
adres = rng.Address
MsgBox adres
End Sub
Range.Range Kullanımı
Private Sub CommandButton19_Click()
Dim range3 As Range
Dim range4 As Range
Set range3 = Worksheets("deneme").Range("b2")
Set range4 = range3.Range("c4")
'b2 den dolayı c5 hücresini gösterir. b2 yi ilk hücre yani a1 kabul eder
End Sub
Range nesnesinin Offset Özelliği ile Union ve Intersect metodları
Offset belli bir satır veya sütun kadar öteleme sağlar. Range.Range özelliğinden farklı olarak Alfa
numerik öteleme yerine sayısal bir öteleme avantajı sağlar.
Worksheets(“sheet1”).Activate
ActivateCell.Offset(ColumnOffset:=3).Activate
Union ile birden fazla range birleştirilir. Böylece union metodu kullanılmış range ler üzerinde bir işlem
aynı anda yapılabilir.
Dim r1 as range
Set r1=union(range(“a1:b2”), range(“b2:c4”))
r1.value=”Merhaba”
Yukarıda a1:b2 ve b2:c4 içeren birleştirilmiş aralık içersine merhaba mesajını koyar.
Intersect iki yada daha fazla aralığın kesişen hücreleri üzerinde işlem yapmayı sağlar.
Dim r1 as range
Set r1=intersect(Range(“a1:b2”), range(“b2:c4”))
r1.value=”Merhaba”
Sadece b2 hücresine Merhaba yazar.
CELLS
Cells özelliğinin kullanımı
Worksheets.Cells(5,5)
Worksheets.Cells.item(5,5)
B1:B10 aralığındaki hücreleri 10,20,30 .... 100 değerleriyle doldurur.
Dim i as integer
For i=1 to 10
Worksheets(“sheet1”).Cells(2,i).Value=i*10
Cells ifadesi kullanarak içiçe fordöngüsü ile 10,5 matris oluşturup içlerine i ve j nin çarpımını koyar.
Yani 10x5 lik çarpım tablosu oluşturur.
Private Sub CommandButton18_Click()
Dim i As Integer, j As Integer
For i = 1 To 10
For j = 1 To 5
Cells(i, j).Value = i * j
Next j
Next i
End Sub
Cells özelliğini kullanarak etkin hücre etrafındaki dolu hücrelere bakar ve 45 ten küçük olanları
kırmızı diğerlerini yeşil olarak işaretler.
Dim row As Integer, col As Integer
Dim r As Range
Set r = ActiveCell.CurrentRegion
For row = 1 To r.Width
For col = 1 To r.Height
If r.Cells(row, col) < 45 Then
r.Cells(row, col).Font.Color = RGB(255, 0, 0)
Else
r.Cells(row, col).Font.Color = RGB(0, 255, 0)
End If
Next col
Next row
Aralıkların adlandırılması
Dim r As Range
Set r=Range(“A2”)
r.name=”rng”
range(“rng”).value=12
adresgoster=range(“rng”).adress
msgbox adresgoster
Çalışma Sayfasının İçeriğini Yönetmek
Range(“A1”).Value=12
Range(“A2”).Value=15
Range(“A3”).Value=”=A1+A2”
Range(“A4”).Value=”=topla(“a1:a2)”
v=Range(“A3”).Value
f=Range(“A3”).Formula
Range nesnesinin metodları
FONKSİYONLAR
1 Sık Kullanılan Fonksiyonlar
Tarih ve saat fonksiyonları, tarih ve saat (zaman) bilgisinin elde edilmesi ve işlenmesini sağlar.
DATE Fonksiyonu:
Excel'de her güne bir seri numarası verilir. DATE fonksiyonu belirtilen bir tarihin (günü) seri
numarasını verir.
=DATE(yıl, ay, gün)
=TARİH(yıl, ay, gün)
Sonucunda o tarihin numarası elde edilir.
TODAY Fonksiyonu:
Bulunulan günü verir. Genellikle sistem tarihinden gün bilgisini alarak işlem yapıldığında kullanılır.
=TODAY() - "1/1/2001"
= BUGÜN()
Yukarıdaki ifade ile bugün ile yıl sonu arasında kaç gün olduğu hesaplanır.
TIME Fonksiyonu:
Zamanın seri numarası olarak karşılığını verir. Bir günün başlangıç anı 0 ile, bitiş anı da 0.9999 değeri
ile ifade edilir.
=TIME(saat, dakika, saniye)
Sonucunda o zaman değerinin numarası elde edilir.
NOW Fonksiyonu:
O anki zamanı tarih ve zaman olarak verir. Diğer bir deyişle o anki zamanı gün, ay, yıl ve saat olarak
verir.
=NOW()
= ŞİMDİ()
Sonucunda o anın değeri elde edilir.
INT Fonksiyonu:
Belirtilen bir sayıyı tam sayıya yuvarlar.
=INT(2.34)
Sonucu: 2
=TAMSAYI()
Örneğin rastgele üretilen bir değeri tamsayıya çevirmek için:
=INT(RAND()+1)
Sayısal loto sayısı üretmek:
=TAMSAYI((S_SAYI_ÜRET()*49)+1)
PRODUCT Fonksiyonları
Verilen sayıları çarpar.
=PRODUCT(3,7)
ya da
=ÇARPIM(3,7)
Sonucu: 21
RAND Fonksiyonu:
0 ile 1 arasında rastgele bir sayı üretir.
=S_SAYI_ÜRET()
=RAND()
RAND() fonksiyonu 0 ile 1 arasında bir gerçek bir sayı üretir. Bu nedenle genellikle bir sayı ile çarpılır
ve tamsayıya çevrilerek kullanılır.
=Int(Rnd(1) * 49) + 1
Yukarıdaki fonksiyon her çalıştığında 1 ila 48 arasında bir sayı üretir.
ROUND Fonksiyonu
Tanımlanan bir sayıyı belirtilen ondalık uzunluğa yuvarlar.
=ROUND(sayı, hane sayısı)
=ROUND(42.789, 1)
=YUVARLA(42.789, 1)
Sonucu: 42.72
EXCEL'in en yaygın kullanıldığı alanlardan birisi de finanstır (mali işler). Çok
sayıda finansal fonksiyonun kullanımını öğrenerek mevcut ticari işlemlerinizi kolaylaştırabilir ya da
yeni çözümler ve uygulamalar yapabilirsiniz.
PMT Fonksiyonu:
En yaygın kullanılan finansal (mali) fonksiyondur. Payment (ödeme) fonksiyonu, belli bir faiz oranı
üzerinden n dönem sonunda gerçekleşecek nakit girişi ya da çıkışını hesaplar.
=PMT(ana para, faiz, süre)
Örnek: Yıllık %90 faizle 400 milyon liralık malı 12 ay taksitle almak için ne kadar ödeme yapmanız
gerekir?
=PMT(%90/12;12;-400000000)
2 Kullanıcı Tanımlı Fonksiyonlar
Excel'de bir çok Yerleşik Fonksiyon mevcuttur. Fakat bunlar bazen yapmak istediğiniz işi
görmeyebilirler. Belki de siz kendinize özel bir program hazırlamak istiyorsunuz ve burada kullanmak
istediğiniz bir fonksiyon Excel'de yok. O halde kendi Fonksiyonunuzu hazırlamalı ve Excel Çalışma
Sayfasında kullanılabilir hale getirmelisiniz. İşte bu hazırladığınız fonksiyona Kullanıcı Tanımlı
Fonksiyon denmektedir.
Ama bu o kadar da kolay bir iş değil. Öncelikle VBA kodlamanın ne olduğunu ve nasıl yapıldığını
bilmelisiniz. Eğer bu sayfada iseniz ve bu satırları merakla okuyorsanız, demek ki bu konu hakkında
biraz da olsa bilginiz var.
Şimdi kullanıcı tanımlı fonksiyon nasıl hazırlanır, bunun ön bilgilerini verelim.
... Öncelikle şunu bilmelisiniz ki, bu tür fonksiyonları hangi Çalışma kitabında hazırlayıp
kaydetmişseniz, ancak o Çalışma Kitabında kullanabilirsiniz.
... Bir çalışma kitabı açın ve bu kitabı kaydedin.
... Daha sonra VBA Kod sayfasına geçin.
... Yeni bir Modül açın.
... Yazmak istediğiniz fonksiyonu
Function fonksiyonun_adı (fonksiyonda kullanılan değişkenler)
End Function
bloğu arasına yazın.
... Hazırladığınız fonksiyonu kaydedin. (Bir çok kullanıcı bu işlemi yapmadan çalıştırmaya çalışıyor.
Tabi ki, yapamıyor, önce kayıt işlemi yapılmalı, daha sonra çalıştırılacak)
... Excel Çalışma Sayfasına geçin ve fonksiyonunuzu kullanmaya başlayın.
Aşağıda sizin için basit bir örnek olsun diye böyle bir Kullanıcı Tanımlı Fonksiyon hazırladık. Siz de
bunu uygulamaya geçerek işe başlayabilirsiniz.
Örnek 1:
Amaç: Öğrencinin yıl sonu not hesabı
Veriler: 1 vize ve 1 final notu var. Vize notunun %30'u final notunun ise %40'ı yıl sonu notuna etki
edecek.
Kullanılacak Formül: 0.3*Vize + 0.7*Final
Modül sayfasına yazılacak Kod:
Function basari(vize As Integer, final As Integer)
basari = 0.3 * vize + 0.7 * final
End Function
Şimdi, her türlü önleme karşı yazdığınız bu kodu kaydedin. Bazı arkadaşlarımızın, bizim yukarıda
yazdığımız kodu hemen alıp modül sayfasına kopyaladıklarını görüyor gibiyim. Tamam, bu da olur
ama yazmak, kopyalamakla kıyaslanamayacak kadar iyidir. Eğer hep böyle kopyalama işine alışırsanız,
VBA Kod sayfasındaki olayları anlamakta güçlük çekersiniz. Bu basit bir uyarıydı. Tabi ki bu arada siz
Çalışma sayfasına geçtiniz. Bundan sonra yapılacak işlem çok kolay. Aşağıdaki şekilde görüldüğü gibi,
herhangi bir hücreye gidin ve =basari(50;60) yazın ve Enter tuşuna basın. Sonucu göreceksiniz.
Yerleşik Fonksiyonlarda olduğu gibi, Kullanıcı Tanımlı Fonksiyonlarda da, ister doğrudan değişkenlere
değer vererek yazarsınız, isterseniz değişken yerine değerin bulunduğu hücre adresini yazarsınız.
Burada size yapabileceğimiz tavsiye, tabi ki, ikincisi olan hücre adresini yazmanızdır. Bu değişkenler,
adı üzerinde olduğu gibi değişkendir. Sürekli değiştiğinde formülün içine girip yazmanız zor olacaktır.
Yine de seçim size kalmış.
Yukarıda verdiğimiz örneği biraz daha geliştirelim.
Örnek 2:
Bu defa iki vize notu olsun ve yıl sonu başarı notuna bu vizelerin ortalaması eklensin.
Function basari(vize1 As Integer, vize2 As Integer, final As Integer)
vizeort = (vize1 + vize2) / 2
basari = 0.3 * vizeort + 0.7 * final
End Function
Excel Dosyanızda bir fonksiyon hazırladınız ve bu hazırladığınız fonksiyonu da bütün Excel
dosyalarında kullanmak istiyorsunuz? Bunun için aşağıda anlattığımız adımları izlemeniz yeterli.
1. Excel Modül sayfasında bir fonksiyon hazırlayın.
2. Excel Çalışma sayfasına geçerek Dosya (File) menüsünden Farklı Kaydet (Save As) komutunu
tıklayın. Aşağıdaki Save As penceresi açılacaktır.
3. Bu penceredeki, Farklı Kayıt Tipi (Save As Type) kutusundan, Microsoft Excel Eklentisi (Microsoft
Excel Add-In) (*.xla) seçeneğini seçin. Bu arada Save in kutusundaki kayıt yerinin de AddIns klasörü
olduğuna dikkat edin. Bu klasörün yolu şöyledir.
"C:\.......\Application Data\Microsoft\AddIns"
4. Dosyanız bu defa AddIns klasörünebasari.XLA dosyası olarak kaydedilecektir. Artık dosyamız bir
Eklenti dosyası olarak hazır. (unutmayın bu dosya yukarıdaki yolunu verdiğimiz klasörde bulunmalı)
5. Şimdi Excel'i Kapatın ve yeniden açın.
6. Araçlar (Tools) menüsünden Eklentiler...(Add-Ins...) komutunu seçin. Ekrana Eklenti penceresi
gelecektir. basarı adında bir eklenti listede yerini almış. Sol tarafındaki kutuyu onaylayın ve Tamam
(OK) düğmesine tıklayın. Artık, Exceliniz her dosya için basari fonksiyonunu kullanmaya hazır.
Aralık ve Metin girildiğinde girilen metinden kaç adet olduğunu bulur. Metinsay fonksiyonu
kullanılmıştır.
Private Sub CommandButton20_Click()
Dim aralik As String
Dim metin As String
aralik = InputBox("Aralık giriniz", "Aralık")
metin = InputBox("Metin giriniz", "Metin")
MsgBox metinsay(Range(aralik), metin)
End Sub
Kullanılan Fonksiyonlar.
Bir dosyanın uzunluğunu sıfırdan büyük olup olmadığına bakan fonksiyon
Function FileExists(ByVal FileName As String) As Boolean
FileExists = Len(Dir(FileName)) > 0
End Function
Girilen metnin seçilen bölgede kaç adet olduğunu görünteleyen fonksiyon
Function metinsay(rng As Range, metin As String)
Dim sayi As Long
Dim r As Range
Dim ilkadres
sayi = 0
Set r = rng.Find(metin)
If r Is Nothing Then
sayi = 0
Exit Function
Else
ilkadres = r.Address
Do
sayi = sayi + 1
Set r = rng.FindNext(r)
Loop While r.Address <> ilkadres
End If
metinsay = sayi
End Function