Konu: Excel'de Makrolarla Çalışma  (Okunma sayısı 12935 defa)

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • 22 Oca 2019 23:37:47
Makrolarla Çalışma
Excel'de dilerseniz basit tablolar oluşturabilirsiniz, dilerseniz formüller ve koşullu biçimlendirmelerle tablonuzu zenginleştirebilirsiniz, dilerseniz de makrolar ile programınızı istediğiniz şekilde özelleştirebilir ve esnek hale getirebilirsiniz.

Ben Excel'i makrolarla öğrenmeye başlamıştım, daha sonra formülleri öğrendim. Bunun artıları da eksileri de oldu tabii. En büyük artısı yaptığım program hücreler dışında excele çok da bağımlı olmuyor. hatta Excel'de hazırlayıp Visual Basic'e aktardığım programlarım da oldu. Kısacası bu başlıkta makrolar ile çalışmalardan bahsetmeye çalışacağım. Bu alanda uzman değilim, bazen işi çok uzun yoldan yapabilirim. Düzeltmeleriniz beni mutlu edecektir.

Çalışmalarımızı hazırlayacağımız boş bir sayfa şablonu hazırladım. Bu şablonu ekliyorum. Çalışmaları aşama aşama bu excel dosyası üzerinde yapacağız.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 23 Oca 2019 00:04:09
Öncelikle geliştirici sekmesini aktifleştirelim:
 Excel > Seçenekler > Şeridi Özelleştir sekmesine tıklayalım.
"Geliştirici" önündeki kutucuğu işaretleyip "Tamam"a tıklayalım.

Geliştirici sekmesi aktifleşti. Şimdi sıra ilk fonksiyonumuzu yazmaya geldi.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 23 Oca 2019 00:27:42
İlk Fonksiyonumuz
Çalışmalarımızda sürekli kullanacağımız bazı işlemleri fonksiyonla kullanmak oldukça faydalıdır. Excel'de sürekli sayı üreteceğiz. İstediğimiz zaman istediğimiz aralıkta rastgele sayı elde etmek için aşağıdakine benzer bir fonksiyon oluşturalım:

Function sayiuret(UstDeger, AltDeger)
Randomize
sayiuret= Int(Rnd() * (UstDeger- AltDeger+ 1) + AltDeger)
End Function


 *Excelde geliştirici sekmesini tıklayın.
 *Visual Basic'i tıklayın.
*Sayfanın sol üst tarafında ikinci görsel link (UserForm) yazan yerde aşağı oku tıklayarak "Module" seçin.
*Açılan modüle yukarıdaki fonksiyonu yazın.


Dosyayı kaydetmeyi seçin. Bir uyarı penceresi açılacak, "Hayır" seçeneğini seçin. Kaydetme alanı açılacak. Burada kayıt türünü "Makro İçerebilen Excel Çalışma Kitabı" olarak seçin ve kaydedin.

Artık ilk fonksiyonumuzu yazdık. Kullanımı için örnek çalışmaları takip edebilirsiniz.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 23 Oca 2019 16:49:39
Taslağı Hazırlayalım
Artık dosyamız xlsm uzantılı oldu.
Şimdi bir toplama çalışma sayfası hazırlayan program hazırlayalım.

xlsm uzantılı hale getirdiğimiz dosyanın "Çalışma Sayfası" adlı sayfasının kopyasını çıkaralım ve kopya sayfanın adını "Toplama Alıştırmaları" şeklinde değiştirelim. Siz farklı isim de verebilirsiniz.

Bundan sonra hazırlanacak bütün çalışmalarda aynı şablonu kullanacağımız için sayfa hakkında bilgi sahibi olalım:
Sayfamızda 23 sütun ve 35 satır bulunmaktadır. Örnek bir yerleşim hazırladım. Ekte paylaşıyorum. Bunu kendi elinizdeki dosyaya uygulamanız pratiklik için gereklidir.

Excel sayfamızda kendi isteğime göre bir yerleşim tasarladım. En önemli nokta işlem aralıklarını sabit yapmaktır. (yatay ve dikeyde) Bu şekilde  işlem sayılarını atarken işimizi çok kolay olacaktır. Hazırladığım taslakta yan yana 1. toplananlar arasında 3 hücre alt alta 1. toplananlar arasında ise 4 hücre bulunmaktadır.

Benim hazırladığım çalışma taslağında 30 alıştırma bulunuyor.

 Çalışma sayfamız her bir satırda 5 işlem olmak üzere 6 satırdan oluşmakta.

Sizler de kendi taslağınızı hazırladığınızda bir sonraki aşamaya geçebiliriz.

Not: Makrolarla ilgili hiç bilgisi olmayanlar şimdilik benim hazırladığım aralıkları kullanabilirler.


yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 23 Oca 2019 17:13:21
Ek Bilgi 1 (Döngüler)
İlk yapacağımız programda kullanılacak ve programlamanın temel taşlarından olan döngüler.


Aşağıdaki kod ile kodlar arasındaki işlemler 100 defa yapılabilir. Her döngüde a değeri bir artacaktır.

For a=1 to 100

next a



İstersek a'nın değerini başka bir değerde başlatıp bitirebiliriz.

For a=7 to 80

next a



İstersek a'nın artış miktarını değiştirebiliriz. Aşağıdaki örnekte a ilk önce 1 olacak sonra 3 olacak sonra 5...

For a=1 to 100 step 2

next a





Aşağıdaki örnekte a değeri 100'den küçük bütün çift sayıları 0'dan başlayarak alacaktır.

For a=0 to 98 step 2

next a

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 23 Oca 2019 17:25:48
Ek Bilgi 2  (Hücrelere Değer Atama)
Makrolardan hücrelere erişmek için Range("a5") ya da cells(1,5) gibi yapılar kullanırız. Ben çoğunlukla Cells(a,b) yapısını kullanırım. Burada a satır numaralarını, b ise sütun numalaralarını ifade etmektedir.

Örnek 1:
Kod alanına yazılan aşağıdaki ifade 1. satır ve 4. sütunun birleştiği hücreye "Merhaba" yazdıracaktır.
cells(1,4)="Merhaba"

Aynı hücreye aynı değeri yazdırmak için aşağıdaki kodu da kullanabiliriz:
Range("d1")="Merhaba"


Örnek 2:
Kod alanına yazılan aşağıdaki kodlar  a1 hücresine 25, a2 hücresine 30 ve a3 hücresine de bu iki değerin toplamını yazdıracaktır.

Cells(1,1)=25
cells(2,1)=30
cells(3,1)=cell(1,1) +  cells(2,1)

Aynı hücrelere aynı değerleri yazdırmak için aşağıdaki kodları da kullanabiliriz:
Range("a1")=25
Range("a2")=30
Range("a3")=Range("a1")+Range("a2")


Not: Bu değerlerle ilgili çalışmaları "Toplama Alıştırmaları" sayfasında yaparsanız hücre birleştirmeden dolayı hatalı sonuçlar alabilirsiniz. Bu çalışmaların uygulamalarının nasıl yapılacağını (makroya eklenip kullanılacağını) birazdan anlatacağım. Faydalı olması dileğiyle.
 

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 23 Oca 2019 21:55:09
Ek Bilgi 3  (Makro Oluşturma)

Çalışma hazırlayacağımız sayfaları bozmamak için excel dosyamızda yeni bir sayfa açın, adını "Deneme" yapabilirsiniz.

Daha sonra geliştirici sekmesinden "Ekle" bölümünü tıklayın ve "Düğme" seçin. Düğmeyi (Buton), Excel sayfasında isteiğiniz bir yere bırakın. Bıraktığınız anda bir sayfa açılacak buraya makro adını girelim. Dilerseniz "Deneme" adını girebilirsiniz. Sonra da "Yeni" düğmesine tıklayın. Makromuz açılacak.

Makronun içine daha önce oluşturduğumuz aşağıdaki kodu ekleyin:

Range("a1")=25
Range("a2")=30
Range("a3")=Range("a1")+Range("a2")

Yukardaki koda yeni değerler ekleyebilir, hücre değerlerini değiştirebilir ve oluşan durumları gözlemleyebilirsiniz. Biraz bu sayfa üzerinde çalışma yapmanızı tavsiye ederim.

Bir ipucu: Dilerseniz daha önceden oluşturduğumuz fonksiyonu (sayiuret) kullanabilirsiniz. Örnek bir kullanımı aşağıya ekliyorum.


Range("a1:z100") = "" 'a'dan z'ye kadar olan sütunların ilk 100 satırını temizledik.


Range("b1") = sayiuret(50, 1) ' 1, 50 aralığında bir sayı ürettik.
Range("b2") = sayiuret(50, 1) ' 1, 50 aralığında başka bir sayı ürettik.
Range("b3") = Range("b1") + Range("b2") 'ürettiğimiz sayıları topladık.

 

Artık her düğmeye tıkladığınızda b1 ve b2 hücrelerine 1,50 aralığında rastgele sayılar oluşturulacak ve b3 hücresine de bu değerlerin toplamı yazılacak.

Not: Toplama için "+", çıkarma işin "-", çarpma için "*", bölme için "/" sembollerini kullanarak farklı denemeler yapmanız faydalı olacaktır. Sonraki çalışmaya geçmeden önce burada bol bol uygulama yapmanız işinizi kolaylaştıracaktır.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 24 Oca 2019 02:33:51
Ek Bilgi 4 (Döngüleri Kullanarak Hücrelere Değer Atama)

Çalışma hazırlayacağımız sayfaları bozmamak için excel dosyamızda yeni bir sayfa açın, adını "Deneme2" yapabilirsiniz.

Daha sonra geliştirici sekmesinden "Ekle" bölümünü tıklayın ve "Düğme" seçin. Düğmeyi (Buton), Excel sayfasında isteiğiniz bir yere bırakın. Bıraktığınız anda bir sayfa açılacak buraya makro adını girelim. Dilerseniz "Deneme2" adını girebilirsiniz. Sonra da "Yeni" düğmesine tıklayın. Makromuz açılacak.

Şimdi sıra kod alanına kod yazmakta:

Aşağıdaki kod ile makro her çalıştırıldığında sayfa temizlenecek.

Aşağıdaki kodu kod alanına yazalım.
Range("a1:z100") = "" 'a'dan z'ye kadar olan sütunların ilk 100 satırını temizledik.

Cells(a,b) formatını daha önce anlatmıştık. a satır, b ise sutun sayılarını göstermektedir. Eğer bir döngü ile a değerini sürekli artırırsak seri bir şekilde seri bir şekilde bir çok hücreye istediğimiz değerleri yazdırabiliriz.

Örneği inceleyelim:

for k=1 to 50 ' 50 defa dönecek

cells(k,1)="Selam" ' her döngüye girdiğinde hücrenin satır değerini k olarak kabul edecek ve bu şekilde 1. sütunun 1. satırından 50. satırına kadar "Selam" yazılacak.

next k

 *Yukarıdaki kodu makroya kopyalayın, modülü kapatın ve makroyu bağladığınız düğmeye tıklayarak makroyu çalıştırın. Sonucu inceleyin.

Tekrar Makroyu Açın:
Makro düğmesine sağ tıklayın, Makro Ata seçeneğini tıklayın, Düzenle seçeneğini tıklayın.
Artık makroyu düzenleyebilirsiniz.


İnceleme ve Kodlarla Oynama Zamanı

*Hazırladığımız kodda "Selam" bölümünü "Merhaba" olarak değiştirin. Makroyu çalıştırın. Yeni durumu inceleyin.

*Son durumdaki kodda "Merhaba" bölümünü k (tırnak işareti olmadan) olarak değiştirin. Makroyu çalıştırın.  Yeni durumu inceleyin.

*Son durumdaki kodda 1 to 50 bölümünü 1 to 20 olarak değiştirin. Makroyu çalıştırın.  Yeni durumu inceleyin.

*Son durumdaki kodda cells(k,1) bölümünü cells(1, k) değiştirin. Makroyu çalıştırın.  Yeni durumu inceleyin.



Sıra Sizde
Şimdi de hangi kodun ne işe yaradığını anlayabilmek için dilediğiniz değişiklikleri yapın. Bütün kodları silerek tekrar yazmayı deneyin. Hiçbir şey anlamamış da olabilirsiniz. Acele etmeyin, zamanla daha anlaşılır hale gelecektir.

Not: Son durumda excel dosyanızı kaydetmelisiniz. Birlikte ilerlediğimizi unutmayınız.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 24 Oca 2019 12:43:45
Ek Bilgi 5 (If Kullanımı)

Bu da excelde çok kullanacağımız bir ifade, koşul durumlarında bu yapı çok işimize yarayacaktır.

Birinci kullanım:
If Koşul then Yapılacaklar


İkinci kullanım:
If Koşul  then
Yapılacaklar
End If
 

Üçüncü kullanım:
If Koşul then
Yapılacaklar
Else
Koşul doğru değilse yapılacaklar
End If
 



Birinci ve ikinci kullanımı örnekle somutlaştıralım:
 
Bir sayı üreten ve bu değeri A1 hücresine yazdıran bir program yazalım.
Program daha sonra A1 hücresine yazılan değer 50'den büyükse B1 hücresine "Büyük" yazsın.

Range("A1:Z100")="" ' önce temizlik.

Range("A1")=sayiuret(99,1) ' 1, 99 aralığında bir sayı ürettik.

'şimdi koşulu kullanalım. (1. kullanım)

If Range("A1") > 50 then Range("B1")="Büyük"

'yukarıdaki kodda A1 hücresindeki değer 50'den büyükse B1'e "Büyük" yazılacak.


 'Eğer aşağıdaki (2. kullanım) kodu yazmış olsaydık bir fark olmayacaktı.

If Range("A1") > 50 then
Range("B1")="Büyük"
End If



Üçüncü kullanımı örnekle somutlaştıralım:

Bir sayı üreten ve bu değeri A1 hücresine yazdıran bir program yazalım.
Program daha sonra A1 hücresine yazılan değer 50'den büyükse B1 hücresine "Büyük" yazsın. Değil ise "Küçük" yazsın.

Range("A1:Z100")="" ' önce temizlik.

Range("A1")=sayiuret(99,1) ' 1, 99 aralığında bir sayı ürettik.

If Range("A1")>50 then
Range("B1")="Büyük"
Else
Range("B1")="Küçük"
End If



Not: Boş bir excel dosyasında makro oluşturup (daha önce görmüştük) yukarıdaki kodları yapıştırıp çeşitli değişiklikler yaparak farklı uygulamalar yapmanız öğrenmenizi kolaylaştıracaktır.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 24 Oca 2019 12:52:44
Ek Bilgi 6 (Değişkenler)

Excel'in hücreleri olduğu için şimdiye kadar değişken kullanmaya ihtiyacımız olmadı, çünkü hücrelere değerlerimizi yazdırarak sonra kullanmak için saklayabiliyorduk. Ancak bu iş için her zaman hücreleri kullanamayabiliriz. Bu nedenle değişkenler kullanılır. Değişken anlaşıldığı üzere bizim değerlerimizi tutan ifadelerdir.

Örnek:
sayi1=5

'yukarıda sayi1 adında bir değişken oluşturduk ve değerini de 5 yaptık.

sayi2= 49

'yukarıda sayi2 adında bir değişken oluşturduk ve değerini de 49 yaptık.

ifade="Merhabalar, nasılsınız?"

'yukarıda ifade adında bir değişken oluşturduk ve değerini "Merhabalar, nasılsınız?" yaptık.

sayi=sayiuret(100,1)

'yukarıda sayi adında bir değişken oluşturduk ve değerini rastgele (1,100 aralığında) bir sayı belirledik.


Not: Bu konular hiç bilmeyenler için karmaşık gelebilir, bunları zamanla da öğrenebilirsiniz. Çalışma üretme kısmına geçmeden önce bunları kısa kısa da olsa anlatmam faydalı olacaktır. Hiç anlamamanız da sorun oluşturmaz. Somut örnekler üzerinde daha rahat kavrayacaksınız. İşin en keyifli kısmı bu kodlar ile çalışmalar oluşturmak. Sabırla takip etmenizi ve zorlanmaları normal karşılayıp yeterli tekrarlarla çalışmalara devam etmenizi bekliyorum.
Faydalı olması dileğiyle.
Yunus KÜLCÜ

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 24 Oca 2019 13:52:02
Ek Bilgi 7 (GoTo deyimi)

Goto adındanda anlaşılacağı üzere program içerisinde farklı satırlara atlamak için kullanılan bir yapıdır.

Örnek Bir Program Tasarlayalım:
Programımızda,
sayi1 değişkeni oluşturalım ve ona rastgele bir değer atayalım,
sayi2 değişkeni oluşturalım ve ona rastgele bir değer atayalım,
sonuc değişkeni oluşturalım ve ona sayi1-sayi2 değerini atayalım.
Daha sonra da sonuc değişkenini inceleyelim, eğer 0'dan küçükse her şeyi başa alalım. Bu şekilde hazırlanan programımız doğru sonuca ulaşana kadar sürekli dönecektir.


ProgramBasi:   'bu ifade başlangıç satırını ifade etsin
sayi1=sayiuret(100,1)
sayi2=sayiuret(100,1)
sonuc=sayi1-sayi2

If sonuc<0 then GoTo ProgramBasi




'Bu arada program yazarken farklı yöntemlerle aynı sonuca ulaşabilirsiniz. Yukarıda koşulumuz sonuc'un 0'dan küçük olup olmadığını sorguluyor. Bunun yerine sayi1'in sayi2'den küçük olup olmadığını da sorgulayabilirdik. Yani koşul ifdesini aşağıdaki gibi de yapabilirdik:

If sayi1<sayi2 then GoTo ProgramBasi


Not: Konuyu uygulamalar yaparak takip etmeniz program hazırlamaya başladığımızda daha kolay anlamanızı sağlayacaktır.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 24 Oca 2019 21:50:48
Ek Bilgi 8 (Diziler)

Diziler programlamada işimizi son derece kolaylaştıran yapılardır.

5 öğrencinin adını değişkenlere atayalım:
ogrenci1="Ahmet"
ogrenci2="Mehmet"
ogrenci3="Selim"
ogrenci4="Hande"
ogrenci5="Ayşe"

Bunu diziler ile kolayca aşağıdaki gibi yapabiliriz.
ogrenciler= Array("Ahmet", "Mehmet", "Selim", "Hande","Ayşe")

 
Dilerseniz şu şekilde de diziye bilgiler ekleyebilirsiniz:
dim ogrenciler (5) ' diziyi tanımlıyoruz.
ogrenciler(1)="Ahmet"
ogrenciler(2)="Mehmet"
ogrenciler(3)="Selim"
ogrenciler(4)="Hande"
ogrenciler(5)="Ayşe"


Dizilerin Faydasını ve Pratikliğini Gösteren Bir Örnek:

'500 elemanlı bir dizi oluşturalım ve dizinin her bir elemanına rastgele bir sayı değeri atayalım. Bunu değişkenlerle yapmanın ne kadar zor olduğunu tahmin edebilirsiniz.

Dim Sayilar(500)

for a=1 to 500
Sayilar(a)=sayiuret(100,1)
next a

'Hepsi bu kadar.



Çok Önemli Bir Not:  Dizilerin indeksi 0'dan başlar. (Bu bazı kodlarla değiştirilebilir de)
Yani Dim Sayilar(500) dediğimizde aslında 501 elemanlı bir dizi tamımlamış oluruz. Ancak ben programlarımda bunun oluşturacağı  karışıklıktan kurtulmak için dizilerin 0. indeksine hiç değer atamıyorum. Dim sayilar(500) ifadesini 500 elemanlı bir dizi olarak değerlendiriyorum. Olaya bu şekilde yaklaşmanızın sorun oluşturacağını düşünmüyorum.

 

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 25 Oca 2019 11:12:25
Ek Bilgi 9 (Yorum, Açıklama)

Excelde programımıza bazı notlar düşmek isteyebiliriz. Programın kullanmayacağı sadece programı inceleyenlere veya kendimize notlar bırakmak için yorumlardan yararlanırız. Kesme işareti (') koyduktan sonra satır boyunca yazdıklarınızı program önemsemez. Bu şekilde açıklamalar yapmadığınızda araya zaman girince "Bu döngüyü niçin kurmuştum?" , "Niçin 1 tane fazla soru üretmişim?", "Neden iki boyutlu dizi kullanmışım?"... soruları başınızı ağrıtabilir. En iyisi siz en baştan yorumları kullanarak program yazmaya alışın.

 

Yorumlar Satır Başından Başlamak Zorunda Değildir:

'Bu satır yorum satırıdır. Program bu satırı önemsemeyecektir.

for a=1 to 30 ' Kesme işareti sonrası yorumdur.


Not 1: Yazılacak yorum birden fazla satır içerecekse satır sonlarına "_"
işareti koyabiliriz.
Örnek:
'Bu bir yorum cümlesidir. Eğer açıklamamız diğer satıra _
geçecekse kullanacağımız işareti öğreniyoruz.


Not 2: Kesme işareti yerine yoruma başlamadan önce Rem de yazabilirsiniz.
Örnek:
'Bu bir yorum cümlesidir.
Rem Bu da bir yorum cümlesidir.

yunushocam

  • Bilge Meclis Üyesi
  • *****
  • 3. Sınıf Öğretmeni
  • İleti: 1.632
  • Teşekkür 44628
    • Çevrimdışı
  • # 25 Oca 2019 11:34:50
Öğrendiklerimizi Kullanalım

Şimdi 30 işlemli bir toplama programı yapalım.
Bunun için üç dizi hazırlayalım. BirinciToplananlar, ikinciToplananlar, Toplamlar,




Dim BirinciToplananlar(30)
Dim ikinciToplananlar(30)
Dim Toplamlar(30)

'şimdi 30'lu bir döngü oluşturalım.


For a = 1 To 30

satir1:
BirinciToplananlar(a) = sayiuret(99, 1)
ikinciToplananlar(a) = sayiuret(99, 1)
Toplamlar(a) = BirinciToplananlar(a) + ikinciToplananlar(a)
If Toplamlar(a) > 100 Then GoTo satir1 '100'ü geçmesin

Next a


'Bitti. Yukarıdaki kodlar ile 30 tane birinci toplana, _
30 tane ikinci toplanana ve 30 tane de bu sayıların _
toplamından oluşan ve 100'den büyük olmayan _
 toplama sahibiz.  _
Sonraki derste bu çalışmayı sayfaya yerleştireceğiz.

cenkemre1975

  • Tecrübeli Üye
  • ****
  • İleti: 167
  • Teşekkür 72
    • Çevrimdışı
  • # 25 Oca 2019 11:54:13
Çok yararlı bir çalışma olmuş. Emeğinize sağlık sayın hocam.

 

Egitimhane.Com ©2006-2023 KVKK