Türkçe Excel Destek ve Bilgi Paylaşım Platformu     

Oturum Aç |  Kayıt Ol

Yeni konu gönder Konuya cevap yaz  [ 3 ileti ] 

Çar Eyl 09, 2009 10:42 pm

Çevrimdışı
 Döngüler (For-Next Döngüleri, For-Each-Next Döngüleri , Do While-Loop Döngüleri, If-Else , Select-Case )
Site Admin
Kullanıcı avatarı
Kayıt: Sal Ağu 18, 2009 7:48 am
İleti: 362

Linkleri görebilmek ve üye ayrıcalıklarından faydalanabilmek için ücretsiz kayıt olun.

DÖNGÜLER
Programlama temellerinden birisi de döngülerdir. Döngüler işlemlerin yinelenmesi anlamına gelir. Programlama dillerinde döngüler genelde aynı işi birden fazla yaptırmak amacıyla işlemi istenilen miktarda tekrarlamak için kullanılır. Yada belli aralıklarda bir şey arattırmak için veya belli aralığa bir şeyler eklemek için aynı işlemi tekrar tekrar yapmaktan kurtulmak için. Örnek olarak bir veri tabanı dosyasındaki kayıtların birer birer okunarak ekrana listelenmesi gibi. VBA iki ana grupta döngü tipi vardır. Bunlar;

• Sayaçlı Döngüler ( For –Next )
• Koşullu Döngüler ( Do while – Loop, While – End))

Koşullu döngüler belli bir koşul yerine gelene dek yineleme işlemi yaparlar. Sayaçlı döngüler ise işlemleri belirtilen sayı kadar yenilerler.

Sayaçlı Döngüler---For...Next Döngüsü

Bir grup deyimi belli sayıda çalıştırarak ( başlangıç değerinden bitiş değerine kadar) döngü oluşturur.

Dim sayac As Integer
For [sayac] = başlangıç değeri to bitiş değeri [ Step artım]
Komutlar
Next [sayac]

Bu döngü sayac başlangıç değerinden bitiş değerine kadar çalıştırılır. Sayaç başlangıç değerinde iken döngü içindeki komutlar işletilir. Next ifadesine gelindiğinde tekrar For satırına gelinir. Sayac degeri artım kadar artırılır. Eğer Sayaç değeri Bitiş değerini geçmiş ise Next adımından sonraki adım işletilir. Burada step değerine pozitif veya negatif bir değer verilebilir. Eğer negatif değer verilirse sayaç her seferinde 1 azaltılır. Step adımını vermezsek bu pozitif 1 (+1) anlamındadır ve her adımda sayac bir artırılacaktır.

For Next Döngüsünün yapısının şema ile incelenmesi




Biz iç içe For Next döngüleri de kurabiliriz. Ancak burada şuna dikkat edilmelidir. En son başlatılan For döngüsü ilk önce bitirilmelidir.

For sayac1 = başlangıç değeri1 to bitiş değeri1 [ Step artım1]
Komutlar1
For sayac2 = başlangıç değeri2 to bitiş değeri2 [ Step artım2]
Komutlar2
Next sayac2
Next sayac1

Burada en son başlatılan For döngüsü ilk önce bitirilmezse hata oluşacaktır. Yani aşağıdaki şekilde bitirilseydi hata verecekti.

Next sayac1
Next sayac2

İç içe döngülerin yapısının şema ile incelenmesi




Döngülerde dikkat edilmesi gereken bazı kurallar:

• Başlangıç değeri bitiş değerinden büyük ise döngüye girilmez.
• Eğer döngüyü azalarak çalışmasını istiyorsanız step değerine – değer yazmanız gerekir. Bu durum da ise başlangıç değeri, bitiş değerinden küçükse döngüye girilmez.
• Sayaç değişkenine döngü içerisinde genelde yeniden bir atama yapılmaz. Bu durumlarda sonsuz bir döngüye neden olabilirsiniz.
• Eğer Programınız sonsuz döngüye girdi ise ESC yada CTRL – BREAK tuşuna basarak durdurabilirsiniz.

Neticede bilgisayar, kullanıcının istediği bir değeri arayıp bulan ve onu istenen biçimde sunan bir araç olduğundan arama ve bulma oldukça önemli. Sadece bu amaçla değil ama istenen bir koşula ulaşma veya belli bir şartı yaratma için de kullanılabilecek bu yapılardan For..Next, çevrim sayısı belirli koşullar için kullanılır.

Örnek 1: 1 den 20 ye kadar olan sayıların toplamını alan ve her toplamı ekranda gösteren programın kodlarını yazalım.

Kod: Tümünü seç
Private Sub CommandButton1_Click()
  Dim topla
  For i = 1 To 20
  topla = topla + i
  MsgBox topla
  Next i
End Sub


Örnek 2: Belirlenen belli bir sayıda ki sayıyı toplayarak bize sonucu bir mesaj kutusunda görüntüleme.

Kod: Tümünü seç
Private Sub CommandButton1_Click()
   Dim Sayi As Integer
   Dim Sayac As Byte, SayiMiktari As Byte
      SayiMiktari = Val(InputBox("Sayi Miktarını Giriniz"))
      Sayi = 0
   For Sayac = 1 To SayiMiktari
      Sayi = Sayi + Val(InputBox(Sayac & ". sayıyı giriniz"))
   Next Sayac
      MsgBox "Girilen " & SayiMiktari & " tane sayının toplamı=" & Sayi
End Sub


Yalnız burada "Val" fonksiyonundan bahsetmek istiyorum bu fonksiyon String tipindeki verileri sayısal veriye çevirmek için kullanılır eğer bu fonksiyonu kullanmasaydık örneğin program bize 1+2+3 ün sonucunu 6 yerine 123 olarak verirdi.

Örnek 3: Bir örnek aşağıda 5 satır ve 10 kolonluk bir matrisin bütün elemanlarına -1 değeri verme için kullanılmıştır.

Dim matris(1 To 5, 1 To 10) 'Veri tipi variant kabul ediliyor
For i = 1 To 5
For j = 1 To 10
matris(i, j) = -1
Next j
Next i

Burada i ve j sayaç değeri, 1 başlangıç, 5 satırların, 10 kolonların bitiş sayısıdır. Adım sayısı veya kaçar kaçar sayaç artışı yapılacağı belirtilmediğinden bütün matris elemanları teker teker ele alınmıştır Yukarıdaki örnekte iç içe 2 döngü vardır. Döngü uygulamanın içinden çıkması için gereken şart gerçekleşinceye kadar devam edeceğinden bu şekilde kabaca belli bir süre bekleme de yaptırabilir veya EOF dediğimiz(End of File) son kayıta ulaşıncaya kadar mevcut kayıtları istediğiniz şart açısından kontrol ettirebilirsiniz.



Step Deyiminin Kullanılışı

Step deyimi döngü sayacının belirtilen değerde artması yada azalması için kullanılır.

For j = 1 to 10 step 2
'....komutlar
Next

yada

For sayi = 50 to 2 step -2
'....komutlar
Next

_________________
İnsanlar sadece söylediklerinden değil, söylemesi gerekirken söylemediklerinden de sorumludur.
Bir insanın zekâsı, vereceği karşılıklarla değil, soracağı sorulardan anlaşılır.

Üye ol yüklediğin dosyalar indirildikçe para kazan.


Başa Dön Sayfa başı
 Profile bak  
 

Pts Eyl 28, 2009 8:08 pm

Çevrimdışı
 Re: Döngüler (For-Next Döngüleri, For-Each-Next Döngüleri , Do While-Loop Döngüleri, If-Else , Select-Case )
Seviye 2
Kayıt: Sal Eyl 08, 2009 2:45 am
İleti: 28

Linkleri görebilmek ve üye ayrıcalıklarından faydalanabilmek için ücretsiz kayıt olun.

Keşke Döngüleri teker teker ele alıp belirgin örneklerle anlatsaydınız daha güxel olurdu diye düşünüyorum. For-Next
[b]Do while – Loop
While – End
[/b]
For-Each-Next
Do While-Loop

gibi her birini ayrı ayrı anlatsaydınız diyorum. ama emek vermişin eline sağlık yinede güzel olmuş. Ama eksik.


Başa Dön Sayfa başı
 Profile bak  
 

Pzr Ekm 04, 2009 5:36 pm

Çevrimdışı
 Re: Döngüler (For-Next Döngüleri, For-Each-Next Döngüleri , Do While-Loop Döngüleri, If-Else , Select-Case )
Süper Moderatör
Kullanıcı avatarı
Kayıt: Per Eyl 03, 2009 1:10 am
İleti: 27

Linkleri görebilmek ve üye ayrıcalıklarından faydalanabilmek için ücretsiz kayıt olun.

Paylaşım için teşekkürler...


Başa Dön Sayfa başı
 Profile bak  
 
Önceki iletileri göster:  Sıralama  
Yeni konu gönder Konuya cevap yaz  [ 3 ileti ] 

Tüm zamanlar UTC


Kimler çevrimiçi

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 0 misafir


Bu forumda yeni konular açamazsınız
Bu forumda konulara cevap yazamazsınız
Bu forumda kendi iletilerinizi değiştiremezsiniz
Bu forumda kendi iletilerinizi silemezsiniz
Bu forumda dosya ekleyemezsiniz


Arama:
Git:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB3 Türkçe: phpBB Türkiye
phpBB SEO

XHTML 1.0 Standartlarina Uygundur!  CSS 2.1 Standartlarina Uygundur!