Microsoft Exel de makro ile yapılabiliyor.
Aşağıya linkini ekliyorum. 50.saniyeden itibaren izleyebilirsiniz.
Libreofiste de yapılabileceğine eminim. Sadece makro yazmaya hakim birinin el atması lazım diye düşünüyorum.
REM --- macro çalıştırılmadan önce G1 hücresinden itibaren aşağıya doğru
REM --- toplanacak renkleri sırayla hücre arkaplan rengi olarak alt alta belirleyin
REM --- örnekte kırmızı sarı ve turuncu olarak verildi.
Sub Topla
oSheet = ThisComponent.CurrentController.ActiveSheet
For sutun = 0 to 2 REM 0=A 1=B 2=C sutunları
For satir = 0 to 4 REM 0=birinci satır, 1=ikinci satır 2=üçüncü satır ....
hucre = oSheet.getCellByPosition(sutun, satir) REM örnek (0,0)=A1 hücresi, (2,3)=C4 hücresi ...
if (hucre.cellBackColor>-1) Then REM hücre rengi olan hücrelerde işlem yapılacak
For bulunan_satir = 0 to 2 REM 3 tane renk için satır sayısı belirtildi. Fazla renk varsa sayıyı artırın.
bulunan = oSheet.getCellByPosition(6, bulunan_satir) REM toplamları G sutununa yazmak için 6 yazıldı. Çünkü G sutunu 6. sutundur.
if bulunan.cellBackColor = hucre.cellBackColor Then
bulunan.setValue(bulunan.getValue()+hucre.getValue())
End if
Next bulunan_satir
End If
Next satir
Next sutun
End Sub
Merhaba Kaan.
Zahmetin için teşekkür ederim. Biraz daha yardıma ihtiyacım var. Daha önce hiç makro kullanmadığımdan doğru kullanım şeklini beceremiyorum sanırım.
İki konuda yardıma ihtiyacım var.
1- Makroyu belge içinde nasıl çağıracağım?
2- İstediğim hücrede nasıl göstereceğim? Mesela sonuç M22 hücresinde gösterilsin istiyorum. Bunu nasıl yaparım?
Belgeyi açtıktan sonra; Araçlar - Makrolar - Makroları Düzenle seçeneğini seçin.
Açılan pencerenin sol tarafında bulunan Ağaç yapısından Belgenizin adını seçin ve altına açılan dal’dan Standart seçeneğini seçin ve Makroyu sağ tarafdaki editöre yapıştırın.
Çalıştırmak için Makro penceresindeki yapıştırdığınız bölümün hemen üstündeki PLAY tuşuna basabilirsiniz ya da Form denetiminden sayfaya bir buton koyarak makroya atayabilirsiniz.
12=M sutunu demek, 21 ise 22.satır demek. Satır ve sutunlar 0’dan başlıyor çünkü.
0=A sutunu, 1=B sutunu, 2=C sutunu … 12=M sutunudur.
Sonuç olarak toplamlar M22 sutunundan aşağıya doğru yazılacak demektir.
For bulunan_satir = 0 to 2
bulunan = oSheet.getCellByPosition(6, bulunan_satir)
satırını aşağıdaki gibi değiştirin:
For bulunan_satir = 21 to 24
bulunan = oSheet.getCellByPosition(12, bulunan_satir)
21 to 24 demek M22,M23,M24 hücrelerine yaz anlamına geliyor. Örnekte ben 3 renk kullandığım için 21 to 24 arası olarak belirledim. Mesela 5 renk varsa 21 to 26 yazabilirsiniz.
Ek olarak M22 hücresinden başlayarak aşağıya doğru (M22, M23, M24, M25…) belirlediğiniz renkleri hücrelerin arkaplan rengi olarak belirlemeyi unutmayın.
@kaan Makro meselesine şu ana kadar hiç girmedim ama gördüğüm kadarıyla makrolar çok kolaylık sağlıyor. Makro öğrenmek istesem, bununla ilgili anlatım videoları var mı tavsiye edebileceğiniz? İnternette bazı videolar gördüm izledim ama pek anlayamadım onlardan.
Chapter 13 Getting Started with Macros linkinden başlayabilirsiniz ama yapmak istenilen işlem ile ilgili aratmalar yaparak birçok dokumana ve videoya ulaşabilirsiniz.
Bu gün biraz daha inceleme fırsatım oldu. Sonuç olarak bu makronun fonksiyon olması gerektiğine kanaat getirdim. Çünkü gelirlerimi ayrı yerde giderlerimi ayrı yerde toplamam gerekiyor. Ve bunların yeri alt alta değil. O yüzden bu makroyu fonksiyon şeklinde yazıp, istediğimiz yerde satır ve sütun bilgilerini kendimiz girecek şekilde özgürleştirmeliyiz.
Kısacası ben canımın istediği hücreye girip: (Fonksiyon ismini “renkTopla” yaptığımızı var sayıyorum.
“=renkTopla(B3:K20)” yazdığımda, bana B3 ile K20 arasında kalan bütün “sarı” hücreleri toplayabilmeli.
Daha sonra başka bir hücreye gidip, başka bir aralıktaki sarı hücreleri de ayrıca toplayabilmeliyim. Biraz PHP dilinde fonksiyon yazma tecrübem var ama Libreofisin kullandığı dili bilmediğim için hiç bir şey yapamıyorum.
Daha önce bir işim için MS Office Excel’de bir makro yazmıştım, problemimi çözmüştü. Lakin visual basic kullanılması bana çok itici geldi. Keşke python falan kullanılabilse diye düşünmüştüm. Libre Office 2021 yılında yapılan bir konferans’ta ScriptForge ile python kullanılarak makro yazılabileceği anlatılıyor.
Ayrıca aşağıdaki kaynakta yine Python ile basit bir makro örneği var.
Maalesef Türkçe kaynak pek yok bu konuda (Python ile makro yazma hususunda).
Ozaman ben biraz makroyu fonksiyona çevirmeye çalışayım. Takıldığım yerde desteklerseniz hem ben öğrenmiş olurum hemde ortaya kullanışlı bir fonksiyon çıkartmış oluruz. Başkalarıda faydalanır.