• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Fiyat değişimi yanlış hesaplama

Katılım
16 Haziran 2022
Mesajlar
7
Excel Vers. ve Dili
Microsoft Office Profesional Plus 2016-
Merhaba, motorin fiyat değişmi dosyamda üç ayrı bölgenin verisini tarih, fiyat ve fiyat değişimi olarak giriyorum.
Kod:
=EĞER(AR10="";0;(AR10-AQ10)/AQ10)
İlk bölge (üçüncü bölgeninde dizaynı bu şekilde o yüzden eklemedim)
kullandığım formül bu. %5 ve üzeriyse değişim oranını turuncuya boyuyor. altındaysa renksiz bırakıyor önemsemiyoruz.

Bu üç farklı bölgenin ikisinde formül mantığı aynı. Diğerindeyse farklı yazılmış (hücre koruma). Aslında üçününde aynı olması gerekiyor.

Örnek: Şimdi elimdeki güncel fiyat değişimi %5'in altında. Yarın yeni bir fiyat güncellemesi gelecek. O geldiğinde formülün hemen önce olan %5 altındaki değerle değil, en yakın %5 üstü ilk değerle hesaplaması gerekli.

Kod:
=EĞER(AQ21="";0;(AQ21-$AO$21)/$AO$21)
(ikinci bölge)
Burada hemen bir öncekini alması gerekirken 2 önceki tarihi alıyor. Kafamdan 3 yeni tarih girdim, yok.
Formül 2 hazirandaki fiyata sabitlenmiş bırakmıyor. Elle yazınca düzeltiyorum ama yeni bir değer girince yine 2 hazirandan alıyor...

1. resim

2. resim

3. resim
 
Ekran görüntüsü yerine excel dosyası paylaşmanızı tavsiye ederim. Hem sorunun ne olduğunu anlayabiliriz hem de aynı dosyayı oluşturmak için vakit harcamayız.
 
Ekran görüntüsü yerine excel dosyası paylaşmanızı tavsiye ederim. Hem sorunun ne olduğunu anlayabiliriz hem de aynı dosyayı oluşturmak için vakit harcamayız.

Maalesef iş dosyası olduğu için yüklemekte sorun yaşıyorum.
 
İmzamda belirttiğim gibi harici sitelere yükleyip linkini paylaşabilirsiniz.
 
İlk mesajınızda anlattıklarınızdan maalesef bir şey anlamadım. Dosya üzerinde "şu hücrede şöyle bir işlem istiyorum" şeklinde somut örnek verebilir misiniz?
 
İlk olarak AQ22 Hücresi yanlış hesap yapıyor. Doğru hesaplamanın AQ29 VE AQ30 üzerinden olmasına ihtiyacım var. Ben bu hatayı manuel olarak düzeltiyorum ancak deneme amaçlı yeni bir gün üzerinden değer girdiğimde yine AO21 hücresi üzerinden hesaplamaya çalışıyor.
İlk sorunum bu.

İkincisi ise yine hücre üzerinden söyleyeyim: AS11 hücresi hesabında AR11 değil AQ10 fiyatını alması gerek. Fakat almıyor. Çünkü ilk mesajımda da belirttiğim gibi bir önceki değişim %3,33 yani %5 altında olduğu için onun üzerinden hesap yapmaması gerek.
 
İlk olarak AQ22 Hücresi yanlış hesap yapıyor. Doğru hesaplamanın AQ29 VE AQ30 üzerinden olmasına ihtiyacım var. Ben bu hatayı manuel olarak düzeltiyorum ancak deneme amaçlı yeni bir gün üzerinden değer girdiğimde yine AO21 hücresi üzerinden hesaplamaya çalışıyor.

Bir yanlışlık var sanıyorum çünkü örnek dosyanızda AQ29 ve AQ30 hücreleri boş.

İkincisi ise yine hücre üzerinden söyleyeyim: AS11 hücresi hesabında AR11 değil AQ10 fiyatını alması gerek. Fakat almıyor. Çünkü ilk mesajımda da belirttiğim gibi bir önceki değişim %3,33 yani %5 altında olduğu için onun üzerinden hesap yapmaması gerek.

Örnek dosyanızda AS11 hücresinde AR11 hücresinden veri alınmıyor, AS10 ve AR10 hücrelerinden alınıyor.
 
Bir yanlışlık var sanıyorum çünkü örnek dosyanızda AQ29 ve AQ30 hücreleri boş.

Örnek dosyanızda AS11 hücresinde AR11 hücresinden veri alınmıyor, AS10 ve AR10 hücrelerinden alınıyor.

Kusura bakmayın hocam dikkatsizliğime verin. Düzeltilmiş hali şöyle olacak ;

AO21 ve AQ21 arasında olan işlemin AP21 ile AQ21 arasında olması gerekiyor.

ve

AR10 ve AS10 değil AQ10 ve AS10 arasında olması gerekiyor.
 
Excel formülleriyle nasıl olur bilemedim. Bu nedenle kullanıcı tanımlı fonksiyon hazırladım. Aşağıdaki kodları excelde vba bölümünde bir modül ekleyin ve bu modüle yapıştırın. Sayfada sonuç görmek istediğiniz hücrede (örneğin AQ22 hücresinde) aşağıdaki gibi kullanabilirsiniz:

=mazot(AQ21)

Kodlar:

PHP:
Function mazot(fiyat As Range)
sat = fiyat.Row + 1
sut = fiyat.Column
For i = sut - 1 To 1 Step -1
    If Cells(sat, i) >= 0.05 Then
        ara = (fiyat.Value - Cells(sat - 1, i)) / Cells(sat - 1, i)
        GoTo 10
    End If
Next
10:
mazot = ara
End Function

Bu fonksiyon tamamen örnek dosya yapınıza göre hazırlanmıştır. Başka dosyalarda istediğiniz sonucu vermeyebilir.
 
Emeğiniz için çok teşekkür ederim. Fakat bana formül üzerinden bir düzeltme veya -artık bu soruna yol açan her neyse- o ayarda bir düzeltme gerekiyor maalesef. Sürekli kullanacağım için makro olayı beni aşıyor :)
 
Bu dosya ya da bu yapıdaki başka dosya üzerinde sürekli kullanmanıza engel yok. Verdiğim makro belirlediğiniz hücrenin alt satırını geriye doğru kontrol ediyor, %5 ve üstü olan ilk hücreyi dikkate alarak belirttiğiniz hesaplamayı yapıyor.

Makro olayını da gözünüzde çok büyütmeyin, biraz gayretle kendi ihtiyacınız olan makroları oluşturabilirsiniz. Öğrenmek zor değil.
 
Vba'dan ilgili dosyayı seçerek insert>module yaptım.Kodu yazdıktan sonra kaydettim. Daha sonra dosya içinde neyi nasıl uygulayacağıma dair hiçbi fikrim yok. Onuda bir şekilde kurcalayarak öğreneceğiz o halde :)
 
Vba'dan ilgili dosyayı seçerek insert>module yaptım.Kodu yazdıktan sonra kaydettim. Daha sonra dosya içinde neyi nasıl uygulayacağıma dair hiçbi fikrim yok. Onuda bir şekilde kurcalayarak öğreneceğiz o halde :)
Onu ben anlatmıştım yukarda:

Excel formülleriyle nasıl olur bilemedim. Bu nedenle kullanıcı tanımlı fonksiyon hazırladım. Aşağıdaki kodları excelde vba bölümünde bir modül ekleyin ve bu modüle yapıştırın. Sayfada sonuç görmek istediğiniz hücrede (örneğin AQ22 hücresinde) aşağıdaki gibi kullanabilirsiniz:

=mazot(AQ21)


Kodlar:

PHP:
Function mazot(fiyat As Range)
sat = fiyat.Row + 1
sut = fiyat.Column
For i = sut - 1 To 1 Step -1
    If Cells(sat, i) >= 0.05 Then
        ara = (fiyat.Value - Cells(sat - 1, i)) / Cells(sat - 1, i)
        GoTo 10
    End If
Next
10:
mazot = ara
End Function

Bu fonksiyon tamamen örnek dosya yapınıza göre hazırlanmıştır. Başka dosyalarda istediğiniz sonucu vermeyebilir.
 
Alternatif;

C11 hücresine uygulayıp sağa doğru sürükleyiniz.

C++:
=IF(C10="";0;(C10/IFERROR(IFERROR(HLOOKUP(LOOKUP(2;1/($B11:B11>=5%);$B$9:B$9);$B$9:B$10;2;0);HLOOKUP(LOOKUP(2;1/($B10:B10>B10);$B$9:B$9);$B$9:B$10;2;0));B10)-1))

Türkçe sürüm kullanıyorsanız formülü linkten çevirip kullanabilirsiniz.

Translator • Excel
 
Geri
Üst