DO UNTIL - DO WHILE DÖNGÜLERİ

1 - Do Until Döngüsü Nedir?

    Do Until döngüsü Türkçe’ye çevrildiğnde ‘e kadar a kadar yap’ anlamına gelmektedir. Ve aynı anlamı gibi de makro yazımında kullanılır. Örnek verirsek;

-Satır sonuna kadar  Do Until – Do While Döngüleri
-Bold ile yazılan hücreye kadar, Do Until – Do While Döngüleri
-Hücre değeri 100 oluncaya kadar Do Until – Do While Döngüleri
-Hücredeki veri tipi string oluncaya kadar, Do Until – Do While Döngüleri
-Bölüm çift oluncaya kadar gibi şartlar veya hedefler koyulabilir ve bu şartlar çeşitlendirilebilir. Do Until – Do While Döngüleri

Hemen basit bir örnek ile devam edelim. Bir sütunda yer alan sayıların tek mi çift mi olduğunu koşullu durumlar dersinde If ile belirlemiştik. Şimdi yine aynı işlemi Do Until kullanarak gerçekleştirelim. Do Until – Do While Döngüleri

SADECE IF KULLANARAK TEK CIFT BELİRLEMEK

Do Until - Do While Döngüleri 1

 

ORNEK BOŞ TABLO

Do Until - Do While Döngüleri 2

IF VE DO UNTIL KULLANARAK SAYILAR TEK MI ÇIFT MI BULMAK

Do Until - Do While Döngüleri 3

Ortadaki tabloda sayıların tek ve çift olmasını bir yan hücreye yazmamızı sağlayan kod yukarıdaki gibi de işimizi görür. Ancak ilk başta ilk sayıyı yani ‘1’i seçtikten sonra Sub-Routine’i tam olarak 9 kere daha, yani toplamda 10 kere çalıştırmamız gerekiyor. Fark ettiniz mi bilmiyorum ama aynı işlemi 10 kere tekrarlamış oluyoruz. Yani döngüyü biz elimizle gerçekleştiriyoruz. 

Bu Sub-Routine’de kod ilk önce seçilen hücrenin dolu olup olmadığını kontrol ediyor. Eğer boşsa hemen subroutine kapatılıyor. Ancak boş değilse sırayla ElseIf ve Else ifadelerinin altında yer alan kod satırları devreye giriyor ve sayılar tek ve çift olarak sınıflandırılıyor. IF bloğundan sonra yer alan bir alt hücreyi seç anlamındaki ‘ActiveCell.Offset(1,0).Select’ ifadesiyle de sınıflandırılma işlemi bitmiş olan sayının, bir altına geçiliyor ve Sub-Routine tekrar çalıştırıldığında, henüz sınıflandılımamış olan sayı üzerinde Sub-Routine işlemini gerçekleştiriyor. 

Bu işlem boş hücre gelene kadar devam ediyor ve boş hücre seçildiğinde ise If bloğu ilk koşul olan hücrenin boş olması durumunda Sub-Routine’i kapatıyor.

Sadece örnek oluşturmak için oluşturulan bu tabloda amaç ‘Sayı Kolonunda’ yer alan sayıların 2 ile bölümlerinin 0 olup olmadığına göre tek ve çift olarak sınıflandırılarak ‘Tek/Çift Kolonuna’ yazdırmak.

Bu çözümlemede ise Do Until ile If bloğunu birleştirerek sayıların tek mi çift mi olduklarını buluyoruz. Ancak burada ilk örnekteki gibi aynı işlemi 10 kere tekrarlamıyoruz, bu işlemi yazdığımız Do Until ifadesi makronun kendi kendini tekrarlamasını sağlıyoruz. Alt bölümde bu Sub-Routine’i daha detaylı bir şekilde inceleyelim.

Do Until - Do While Döngüleri 4

    Yukarıdaki bölümde, eklemiş olduğumuz Sub-Routine i ve bu Sub-Routine i çalıştırdığımız zaman, tablomuz üzerinde yaptığı değişikliği de video da görebiliyoruz. Videoda kodun nasıl Do Until ve Loop arasında tekrarlandığına dikkat edin. İşte döngünün çalışan bir kod üzerindeki görüntüsü bu şekilde gerçekleşmektedir. 

Şimdi bu bölümde harflerle bölümlere ayırdığımız kodu detaylı bir şekilde inceleyeceğiz.

Do Until - Do While Döngüleri 5

    E- Bu satırda Sub-Routine’in istenmeyen sayfalarda işlem yapmasını engellemek amacıyla kodun çalışacağı adresi tam olarak belirtiyoruz.

      C-Bu satırda kodun girdiği döngü sayısını gösterecek olan i değişkenini tanımladık

      C’- Bu satırda ise i değişkeninin her döngüde 1 artmasını sağladık bu sayede Sub-Routine’in kaçınca döngüde olduğunu belirlediğimiz hücrede görebileceğiz. 

       A-A’- Bu bölüm sayının tek mi çiift mi olduğunu belirleyerek, aktif hücrenin bir yanına belirlediği bu sayıyı yazan If bloğunu oluşturmaktadır.

         D-Bir satırda yer alan işlem bittikten sonra, işlemin bir alt satıra kaydırılmasını sağlar.

           B- Do Until döngümüzün başlangıcıdır. Burada ActiveCell.Value=”” yani boş hücreye gelinceye kadar döngünün tekrarlanacağı belirtilmiştir. Bu bizim döngümüz için bir hedeftir. Boş hücreye kadar çalışmaya devam et. If bloğunun altında yer alan D- satırında döngünün son işlemi olarak bir alt hücre seçilmesidir. Bu şekilde sütunun en alt hücresi eninde sonunda aktif edilecektir. Ancak bu aktif edilen döngü başladığında o hücrenin boş olduğunu görüp döngüyü sonlandıracaktır.

             B’- Döngünün en alt noktasıdır. B-B’ arasında yazılan bütün kodlar, istenilen hedefe varıncaya kadar tekrar edilecektir. Döngünün çalışması bu şekildedir.

    Until ifadesini istersek döngümüzün en sonunda yer alan ‘Loop’ ifadesinden sonra da kullanabiliriz. Ben şimdiye kadar yazdığım her hangi bir macroda bu ikinci metodu uygulamadım.  Nedenini ise koşul en sonda yer aldığı için daha öncesinden döngünün çalışması. Yani bu ikinci versiyonda döngü çalışmaya başlar, aradaki kodlar uygulanır ve sonunda döngü şart sağlanmadığında kapanır. 

     Benim tercihim ise koşulun en baştan kontrol edilip eğer sağlanmıyorsa döngünün başlamamasıdır. Size de aynı şekilde tavsiye ediyorum.

Şimdi yeni bir örnekle konuyu biraz daha pekiştirelim. Aşağıda bu konuya uygun olabileceğini düşündüğüm bir alıştırma ile ilgili bir isim listesi hazırladım. Bu listede Ankara’nın çeşitli ilçelerinde oturan personeller yer almakta ve biz de bu personelleri ilçelere gidecek olan servislere göre ayıracağız. Bu anlamda her ilce için farklı bir plaka yazdık ve worksheetlere bu plakaların adlarını verdik. Bizim istediğimiz makroyu çalıştırdığımız zaman, personeli oturdukları ilçeye gidecek servisin plakasının yazılı olduğu worksheet e kopyalaması. Şimdi alt kısımda hazırladığımız listeyi ve ilcelere giden servislere ait plakaları incellyelim

Do Until - Do While Döngüleri 6

Do Until - Do While Döngüleri 6

Normalde bu servis listelerinin binlerce kişiyi kapsadığını biliyoruz. Eğer makro kullanmak istemezseniz elimizdeki 50 kişilik listeyi tabi ki filter diyerek ilçelere göre ayırıp de halledebilirsiniz. Ancak personel sayısı ve servis güzergah sayısı arttıkça işiniz de doğrusal olarak zorlaşacaktır. Şahsen ben daha önceden Türkiye deki bütük ilçelere göre aynı şekilde bir sınıflandırmayı elle yapmıştım. Eğer o zaman makro yazmayı biliyor olsaydım, kendimi ne çok büyük bir uğraştan kurtarabilirdim.

Bu görselde de yine worksheetleri nasıl isimlendirdiğimizi görebilirsiniz. Üst bölümde de söylediğim gibi amacımız isimlerin ilcelerine gidecek servis araclarının plakasının yazılı olduğu worksheet e gidip kopyalanması. 

Do Until - Do While Döngüleri 7

 Servis plakalarının yazılı olduğu sayfalarda B2 ve B3 hücrelerine bu şekilde sütun başlıkları ekledik.

    1-Yandaki yazmış olduğumuz SubRoutine’de ilk olarak “Personel” isimli worksheet’i akfileştiriyoruz. Böylelikle farklı bir worksheet aktif olsa dahi kodun istediğimiz sayfa üzerinde çalışmasını sağlıyoruz.

 2-‘ilce’ değişkenini string veri tipinde tanımlıyoruz.

    3- Kodun çalışmaya başlamasını istediğimiz hücreyi seçiyoruz. Artık döngümüzü oluşturabiliriz. 

    Hem If bloğu hem de Select Case ile personelin otruduğu semti servis plakalarına göre ayrıştırabiliriz. Burada birden fazla koşul olduğunda yazımı açısından daha açık ve basit olan Select Case ifadesini kullanmaya karar verdik. Bu doğrultuda ilk önce içerisindeki kodun tekrar edeceği, yani döngünün gerçekleşeceği döngü bloğu ve şartını yazıyoruz ve hemen altına da ilce değişkeninin değerini tanımlıyoruz.

 

    Daha sonarsında ise Select Case kullanarak ilçelere göre Sub-Routine’in isimleri kopyalayıp ilgili servisin plaka numarasının yazılı olduğu worksheet’e yapıştırmasını sağlayoruz. Select Case’den sonra ActiveCell.Offset(1.0).Select yazarak bir alt hücreye geçiyoruz. Ve bu işlem, seçilen hücrenin içi boş oluncaya kadar devam ediyor. 

    Bu işlemi döngü kullanmadan yapmaya çalışsaydık, aynı Sub-Routine’i ard arda tam 50 kere çalıştırmamız gerekecekti. Ancak Do Until döngüsü sayesinde, Sub-Routine’i bir kez çalıştırarak istediğimiz sonuca ulaşabiliyoruz.

 

2- Do While Döngüsü Nedir?

    Do Until ile Do While arasında temelde çok basit bir farklılık vardır. Do Until; ‘e kadar, ‘a kadar’ gibi bir hedefe ulaşıncaya kadar ve bir koşul sağlanıncaya kadar Sub-Routine’in çalışmasını sağlar. Aynı bizim yukarıda yer verdiğimiz personellerin servislere dağıtılması örneğimizde, personel listesinde boş hücreye gelinceye kadar bu Sub-Routine’in döngüye girmesini sağladığımız gibi. Yani hedefimiz boş hücre.

    Do While döngüsünde ise duruma farklı bir bakış açısıyla yaklaşılmaktadır. Yani hali hazırda üzerinde durduğumuz, sınırlayıcı olarak belirlediğimiz koşulun süregeldiği ve bu koşulun ortadan kalktığı duruma kadar döngünün devam edilmesi durumudur. Şimdi personellerin servislere dağıtılması için yazdığımız Sub-Routine’de Do Until yerine Do While kullanarak Do Until ile Do While arasındaki farklı bakış açısını inceleyelim.

    Do Until ActiveCell.Value = ” “

 

    Bütün Sub-Routine içerisinde değiştirmemiz gereken tek yer,  görmüş olduğunuz döngülerin başlangıç satırlarıdır.

    Sol pencerede Do Until ile boş hücreye gelene kadar döngünün devam etmesini istiyoruz. Yani kendimize Sub-Routine’in durması için bir hedef seçiyoruz, bir koşul öne sürüyoruz.

    Sağ pencerede ise aynı durumun farklı bir şekilde yorumlanmasını görüyoruz. İşlemin, aktif hücrenin içi boş değilken devam etmesini istiyoruz. En büyük fark istediğimiz koşulun o an için sağlanıyor olması. Ne zaman ki hücrenin içi dolu olmasın(Do Until’de ise boş olsun diye düşünüyoruz) işte o zaman süregelen koşul ortadan kalkıyor ve döngü sonlanıyor. Bu bakış açısına hayattan da farklı örneklerle zenginlik katabiliriz.

    Do While  ActiveCell.Value <> ” ” 

Do Until

    -Boş Hücre Seçilene Kadar

    -Seçilen Hücrenin Değeri 2 İle Bölünebilene Kadar

    -Bardağın Yarısı Boşalana Kadar

    -Saat 12’den Sonra Çalışılmayacak

   -(4 İşlemde) Seçilen Hücredeki Veri Tipi ‘String’ Oluncaya Kadar Çalışılacak

Do While

 -Seçilen Hücre Boş Değilken 

 -Seçilen Hücrenin Değeri Tek İken

 -Bardağın Yarısından Fazlası Doluyken

 – Saat 12’ye Kadar Çalışılacak

 -(4 İşlemde) Seçilen Hücre Veri Tipi ‘Integer’ İken Çalışılacak

    Örnekler tabiki çoğaltılabilir. Ancak bu aşamada, bu iki farklı ifadenin aralarındaki ilişkiyi ifade etmekte yeterli olacağını düşünüyorum. Her iki ifade, birbirinin tamamlayıcısı olduğu için, döngüleri oluştururken bizlere, oluşturmak istediğimiz koşul veya hedef bakımından iki farklı yaklaşım yapabilme olanağı sunarak, çözümlemelerimizde zenginlik ve  kolaylık sağlacaklardır. 

    Döngülerle ilgili diğer derslere ait sayfalara tuşalara tıklayarak geçebilirsiniz;

 

 

 

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

İyi Çalışmalar…

Soru ve Öneriler İçin;

[email protected]