Belirli zamanlarda uretmek zorunda oldugunuz bazi Excel dosyalariniz var diyelim..
Urettiginiz format belli, bu formati olusturmakta kullandiginiz diger Excel dosyalarin formati belli..
Surekli ayni dosyalari acip, kopyalamak, kucuk bazi formullerle bir takim hesaplamalar yaptirip diger Excel ‘e veri aktarmak.. Bu her ne kadar “kolay” olsa da vakit alan zahmetli bir is, degil mi?
Daha once ne Macro yazmis, ne de yazmayi dusunmustum.
Ama tam da yukaridaki gibi “rutin” bir islem her hafta buyuk vaktimi alacak gibi gorununce maliyetsiz, kolayca uygulayabilecegim bir cozum aramaya koyuldum.
Kapsam
Yontem
Ornek
1.Adim
2.Adim
3.Adim
4.Adim
5.Adim
Dim katilimci As StringDim sorumlu As StringDim tarih As DateDim sure As StringDim sonuc As String
Dim loc As Integer
loc = 2
loc degiskenimiz 2. satirdan baslasin dedim; cunku ilk satirda kolon basliklarimiz var.
Kucuk programimizin 2. satirdan baslayarak asagi dogru tablomuzu taramasini ve kaynak tablomuzdaki her bir satir icin bir sonuc formu olusturmasini istedigimize gore, satirlar bitince, yani bos bir satira gelince dongunun sonlanmasini soyleyelim.
Do While Not IsEmpty(Sheet1.Range(“a” & loc))
Boylece ilgili sheet ‘te bos bir satira gelmedikce loop etmeye birazdan ifade edecegimiz satirlari islet demis olduk.
O halde simdi kaynak tablonun nasil okunacagini ve sonuc formunun bu bilgilerle nasil doldurulacagini programlayabiliriz:
katilimci = Sheet1.Range(“b” & loc)
sorumlu = Sheet1.Range(“c” & loc)
tarih = Sheet1.Range(“d” & loc)
sure = Sheet1.Range(“e” & loc)
sonuc = Sheet1.Range(“f” & loc)
Her satiri tek tek aciklamaya gerek yok, ama gordugunuz gibi en ustte tanimladigimiz her degiskenin, ilgili sheet ‘teki koordinatlarini verdim.
Soz gelimi LOOP ‘un ilk turunda katilimci degiskeni, Sheet1 ‘deki b2 hucresinde buldugu degeri alacak.
Sonra Do While kosulumuza gore bir sonraki satir hala bos degilse, 2. kez loop edecek, bu kez b3 hucresinde buldugu degeri alacak.
Boylece bu 5 degiskenimiz her bir LOOP ‘ta kaynak tablomdaki ilgili degerlerle guncellenecekler.
Simdi bu degiskenleri sonuc formunda uygun yerlere adresleyelim..
Once kursorumuze artik “kaynak” sheet ‘inde degil “sonuc” sheet ‘inde islem yapacagimizi soyluyoruz:
Worksheets(“sonuc”).Select
Arkasindan katilimci, sorumlu, tarih, sure, sonuc degiskenlerimizin sonuc formunda hangi hucrelere aktarilacagini adresliyoruz:
Worksheets(“sonuc”).Range(“b7”).Select
ActiveCell.Value = tarih
Worksheets(“sonuc”).Range(“e10”).Select
ActiveCell.Value = katilimci
Worksheets(“sonuc”).Range(“e11”).Select
ActiveCell.Value = sorumlu
Worksheets(“sonuc”).Range(“e12”).Select
ActiveCell.Value = sure
Worksheets(“sonuc”).Range(“g14”).Select
ActiveCell.Value = sonuc
Burada da soz gelimi ilk blokta aslinda,
“sonuc” isimli sheet ‘imdeki b7 hucresine git, bu hucrenin degeri tarih degiskenimin degeridir. “
dedik.
Unutmayin, hala ilk loop ‘un icinde kursorumuz..
Simdi sonuc formu dosyamizin bu halini kaydedip bir sonraki satir icin yeni bir form olusturmaliyim.. O halde:
fname = katilimci & “_sonuc_dosyasi”
gibi bir satir yazalim, boylece her dosyanin anlasilir bir ismi olsun. Hala ilk LOOP ‘ta oldugumuzu soylemistik, o halde ilk sonuc formu icin dosya adi b2 hucresindeki katilimci ismi ile baslayacak, ikinci LOOP ‘a gectigimizde ayni ifade bu kez b3 hucresindeki katilimci ismini alacagi icin dosya adimiz bu yeni katilimci ismi ile baslayacak.
Simdi de sonuc sheet ‘ini kopyalayip istedigimiz bir klasore yazmasini soyleyelim.
Worksheets(“sonuc”).Copy
ChDrive (“C”)
ChDir (“C:\sonuc_formlarim”)
ActiveWorkbook.SaveAs Filename:=fname & “.xlsx”
Ilk satirda ilgili sayfayi almasini, ikinci satirda “C” harfiyle baslayan diskime gitmesini, ucuncu satirda dosyanin kaydedilmesini istedigim klasorun yerini, dorduncu satirda ise fname degiskeniyle yukarida belirledigim dosya adimin XLSX uzantisi ile kaydedilmesini soylemis oldum.
Boylece ilk sonuc formum doldurulmus oldu, o halde loc degerimi 1 artirmali, yani 1 sonraki satira gecmeli ve LOOP etmeliyim.
loc = loc + 1
Loop
Bu dongu ustte Do While ile belirttigimiz kosul saglandigi muddetce calisacak, bos satira gelince sonlanacak.
Burada istiyorsak programimizi
End Sub
Diyerek sonlandirip calistirmayi deneyebiliriz. Programimizi kaydedelim ve kaynak sayfamiza donelim.
Sayfaya ekledigimiz butona bastigimiza formlar otomatik olarak olusacaktir..
Ya da bonus olarak her bir dokumanin bir de default yazicimiza gitmesini soyleyebiliriz. Tabii ki bunu henuz LOOP icindeyken yapmaliyiz :)
Iyi calismalar!