Personel & Zimmet Takip Programı (KZT-v.5) foruma eklenmiştir. 
http://www.excelce.net/forum/index.php?topic=1676.0

Gönderen Konu: Alt alta girilen verilerin sondan yukarı doğru toplamak  (Okunma sayısı 10586 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı oboran

  • Excelce Onbaşı
  • **
  • İleti: 14
  • Puan +0/-0
  • Cinsiyet: Bay
  • Excel'den Daha Fazlası!..
  • Ad Soyad: Osman Boran
  • İl / İlçe: İzmir / Bornova
  • İşletim Sisteminiz: 7
  • Mesleğiniz: Emekli
  • Office Versiyonunuz: 2010
Merhabalar
Örneğini göndermiş olduğum sayfada bir fon programı hazırlıyorum. Alt alta girmiş olduğum verilerin son on günlük, son otuz günlük gibi sondan yukarıya istediğim kadarını toplamak istiyorum. Aynı zamanda da grafik de yansıtacağım.
Yani sarı hücrede hep son on günlük istatistiği, yeşil hücrede hep son otuz günlük istatistiğin otomatik olarak yansımasını istiyorum.
Yardımlarınız için şimdiden teşekkürler.
Saygılarımla


[Forum yazılım güncelleme esnasında sorun oluştuğundan eklendi silinmiştir.]

Çevrimdışı Bülent Öztürk

  • Excelce.Net Yönetici
  • *
  • İleti: 1411
  • Puan +19/-0
  • Cinsiyet: Bay
  • Türkçe Konuşup Excelce Yazıyoruz...
    • Bülent Öztürk
  • Ad Soyad: Bülent Öztürk
  • Doğum Yılınız: 1976
  • İl / İlçe: İstanbul / Çorlu
  • İşletim Sisteminiz: Win.10
  • Mesleğiniz: Bilgi Teknolojileri
  • Office Versiyonunuz: 2016
Ynt: Alt alta girilen verilerin sondan yukarı doğru toplamak
« Yanıtla #1 : 29 Kasım 2010, 22:06:30 »
Merhaba Osman Bey,

Tam emin olmamakla birlikte aşağıdaki kod fikir verebilir diye düşünüyorum.

Kod: [Seç]
Public Function SonONGun(gun As Integer)
Dim son_satir As Long, ilk_satir As Long
sutun = Split(ActiveCell.Address, "$")(1)
son = sutun & 65530
son_satir = Range(son).Offset(0, -1).End(3).Row
ilk_satir = son_satir - 10
aralik = sutun & ilk_satir & ":" & sutun & son_satir
SonONGun = Application.WorksheetFunction.Sum(Range(aralik))
End Function


Public Function SonOTUZGun(gun As Integer)
Dim son_satir As Long, ilk_satir As Long
sutun = Split(ActiveCell.Address, "$")(1)
son = sutun & 65530
son_satir = Range(son).Offset(0, -1).End(3).Row
ilk_satir = son_satir - 30
aralik = sutun & ilk_satir & ":" & sutun & son_satir
SonOTUZGun = Application.WorksheetFunction.Sum(Range(aralik))
End Function

Boş bir modüle yapıştırıp, 30 gün hesaplanacak hücrelere;
=SonOTUZGun(30)
10 gün hesaplanacak hücrelere;
=SonONGun(10)
formüllerini girip deneyiniz.
« Son Düzenleme: 29 Kasım 2010, 23:28:15 Gönderen: Bülent Öztürk »
(Ücretli program talepleriniz için iletişime geçebilirsiniz, excelvbprogram@gmail.com)

Çevrimdışı oboran

  • Excelce Onbaşı
  • **
  • İleti: 14
  • Puan +0/-0
  • Cinsiyet: Bay
  • Excel'den Daha Fazlası!..
  • Ad Soyad: Osman Boran
  • İl / İlçe: İzmir / Bornova
  • İşletim Sisteminiz: 7
  • Mesleğiniz: Emekli
  • Office Versiyonunuz: 2010
Ynt: Alt alta girilen verilerin sondan yukarı doğru toplamak
« Yanıtla #2 : 29 Kasım 2010, 23:50:30 »
Bülent bey cevap için çok teşekkürler, oldu gibi diyebilirim, sadece bir fazla sayıyor.
On günü onbir, otuz günü otuzbirgün olarak veri veriyor.

Çevrimdışı Bülent Öztürk

  • Excelce.Net Yönetici
  • *
  • İleti: 1411
  • Puan +19/-0
  • Cinsiyet: Bay
  • Türkçe Konuşup Excelce Yazıyoruz...
    • Bülent Öztürk
  • Ad Soyad: Bülent Öztürk
  • Doğum Yılınız: 1976
  • İl / İlçe: İstanbul / Çorlu
  • İşletim Sisteminiz: Win.10
  • Mesleğiniz: Bilgi Teknolojileri
  • Office Versiyonunuz: 2016
Ynt: Alt alta girilen verilerin sondan yukarı doğru toplamak
« Yanıtla #3 : 29 Kasım 2010, 23:58:22 »
Yanlış hesaplatmışım, kusura bakmayın.  :-[

Kodlardaki
ilk_satir = son_satir - 10
satırını
ilk_satir = son_satir - 9
şeklinde

ve
ilk_satir = son_satir - 30
satırını
ilk_satir = son_satir - 29
şeklinde
değiştirmek gerekiyor.
(Ücretli program talepleriniz için iletişime geçebilirsiniz, excelvbprogram@gmail.com)

Çevrimdışı oboran

  • Excelce Onbaşı
  • **
  • İleti: 14
  • Puan +0/-0
  • Cinsiyet: Bay
  • Excel'den Daha Fazlası!..
  • Ad Soyad: Osman Boran
  • İl / İlçe: İzmir / Bornova
  • İşletim Sisteminiz: 7
  • Mesleğiniz: Emekli
  • Office Versiyonunuz: 2010
Ynt: Alt alta girilen verilerin sondan yukarı doğru toplamak
« Yanıtla #4 : 30 Kasım 2010, 00:21:14 »
Teşekkürler Bülent bey, sayenizde hem hallettik hemde bir kod daha öğrendik.

Bu konu hakkında öğrenme amacıyla soruyorum; aynı veriyi başka bir sayfadaki bir hücrede nasıl gösterebilirim?
Anladığım kadarıyla bu kod bulunduğu hücredeki sutunu tarıyor, peki aynı sutundaki sonucu "Sayfa2" deki A1 Hücresin de nasıl gösterebiliriz?

   sutun = Split(ActiveCell.Address, "$")(1)
   son = sutun & 65530son_satir = Range(son).Offset(0, -1).End(3).Row
Bir de çok olacam ama yukarıdaki kodun anlamını öğrenebilirmiyim? (1) ve (3) ne anlama geliyor?

Saygılarımla
« Son Düzenleme: 30 Kasım 2010, 00:37:50 Gönderen: oboran »

Çevrimdışı oboran

  • Excelce Onbaşı
  • **
  • İleti: 14
  • Puan +0/-0
  • Cinsiyet: Bay
  • Excel'den Daha Fazlası!..
  • Ad Soyad: Osman Boran
  • İl / İlçe: İzmir / Bornova
  • İşletim Sisteminiz: 7
  • Mesleğiniz: Emekli
  • Office Versiyonunuz: 2010
Ynt: Alt alta girilen verilerin sondan yukarı doğru toplamak
« Yanıtla #5 : 30 Kasım 2010, 02:14:07 »
Bülent bey bir sorun daha var;
verileri alt alta girerken otomatik olarak hesaplamıyor, ancak formülün üstüne gelip formül çubuğunda tıklayıp enter yapınca hesaplama yapıyor!

Çevrimdışı Bülent Öztürk

  • Excelce.Net Yönetici
  • *
  • İleti: 1411
  • Puan +19/-0
  • Cinsiyet: Bay
  • Türkçe Konuşup Excelce Yazıyoruz...
    • Bülent Öztürk
  • Ad Soyad: Bülent Öztürk
  • Doğum Yılınız: 1976
  • İl / İlçe: İstanbul / Çorlu
  • İşletim Sisteminiz: Win.10
  • Mesleğiniz: Bilgi Teknolojileri
  • Office Versiyonunuz: 2016
Ynt: Alt alta girilen verilerin sondan yukarı doğru toplamak
« Yanıtla #6 : 30 Kasım 2010, 14:03:16 »
Merhaba Osman Bey,

Alıntı
sutun = Split(ActiveCell.Address, "$")(1)
komut satırında sütun'un harfini bulduk. (Nasıl olduğunu açıklayamam. Yabancı siteden buldum.  :) )
Aslında açıklayabileceğim yöntem ile de bulurduk ama biraz uzatmış olacaktık kodları... Neyse.

Alıntı
son = sutun & 65530
son_satir = Range(son).Offset(0, -1).End(3).Row

End(3) 'ü bulduğumuz sütun numarasının 65530. satırından yukarıya doğru tarayarak ilk dolu hücrenin satır numarasını bulmak için kullandık. Diğer bir değişle, belirtilen sütundaki aşağı doğru dolu en son hücrenin satır numarası...
Şu şekilde de kullanabilirdik:
son_satir = Range(son).Offset(0, -1).End(xlUp).Row

MsgBox Range("C65530").End(xlUp).Row ---> C65530'dan yukarıya doğru dolu ilk hücrenin satır numarasını bulur.
MsgBox Range("C1").End(xlDown).Row ---> C1'den aşağı doğru dolu son hücrenin satır numarası...


Bülent bey bir sorun daha var;
verileri alt alta girerken otomatik olarak hesaplamıyor, ancak formülün üstüne gelip formül çubuğunda tıklayıp enter yapınca hesaplama yapıyor!
Evet, bunu Application.Volatile komut satırı (Sayfada herhangi bir işlem yapıldığında fonksiyonumuzu güncellemesi için) kullanarak çözmeyi düşündüm ancak fonksiyonun birden fazla hücrede kullanımı hesaplama hatasına sebep oldu.

Sonuç:
Yukarıdaki çözümü çöpe atabilirz.  :(
« Son Düzenleme: 30 Kasım 2010, 14:04:55 Gönderen: Bülent Öztürk »
(Ücretli program talepleriniz için iletişime geçebilirsiniz, excelvbprogram@gmail.com)