Soru İki Sayı Arası Koşullu Toplama

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Sy. Hocalarım ;


I Sütunun da bulunan KM. Değeri 0 dan büyük ise ve O sütununda Mazot yazıyor ise aracın aldığı toplam yakıt litresini buraya nasıl toplamını alabilirim.
Not: araç plakasına göre olacak yaklaşık beş satır ve 200 adet araç bulunmakta. Teşekkür ederim.
Kullandığım excel e tablolar.
 

Ekli dosyalar

relaxim

Altın Üye
Katılım
30 Ağustos 2009
Mesajlar
490
Excel Vers. ve Dili
Ofis 2016 Tr 64 bit
Altın Üyelik Bitiş Tarihi
15.06.2027
Merhaba

T sütununa uygulayıp denermisiniz?

=EĞER(VE(I2>0;O2="Mazot");ETOPLA($C$2:$C$100;C2;$E$2:$E$100)*-1;"")
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,135
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Ben soruyu biraz farklı anladım. T2 hücresine aşağıdaki formülü uygulayıp aşağı çekerek çoğaltınız.
Kod:
=EĞER(VE(I2>0;O2="Mazot");-ÇOKETOPLA(E$2:E2;O$2:O2;"Mazot";C$2:C2;C2);"")
 

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Sy. @relaxim ve Sy. @ÖmerBey ;

Maalesef iki formülde yanlış sonuç veriyor. Olay şu şekilde gerçekleşiyor.

Hocam araç garajdan depoyu dolduruyor yola çıkıyor. Sonra mazotu azalınca Petrol ofisi taşıtmatikten yakıt alıyor bu 1 defa da olabilir 2 de daha fazlada. Sonra da Garaja uğruyor. Deposunu dolduruyor. Km. bilgisi alınıyor garajda ki yakıtın karşısına yazılıyor. Benim istediğim ise Petrol ofisinde ve en son garaj geldiğinde toplamda kaç litre mazot aldığını bulmak.
 

Ekli dosyalar

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,135
Excel Vers. ve Dili
2007 Türkçe
Formülü aşağıdaki ile değiştirip deneyiniz.
Rich (BB code):
=EĞER(VE(I2>0;O2="Mazot");-ÇOKETOPLA(E$2:E2;O$2:O2;"Mazot";C$2:C2;C2)-TOPLA($T$1:T1);"")
 

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Formülü aşağıdaki ile değiştirip deneyiniz.
Rich (BB code):
=EĞER(VE(I2>0;O2="Mazot");-ÇOKETOPLA(E$2:E2;O$2:O2;"Mazot";C$2:C2;C2)-TOPLA($T$1:T1);"")
Sy. @ÖmerBey ;

Hocam e tabloda hata veriyor. bazılarında ise milyarlı sonuçlar veriyor.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,135
Excel Vers. ve Dili
2007 Türkçe
Formülü yüklediğiniz dosyanın T2 hücresine uyguladığımda sizinkilerle aynı sonucu üretmişti.
Acaba isteğinizi yanlış mı anlıyoruz?
 

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Formülü yüklediğiniz dosyanın T2 hücresine uyguladığımda sizinkilerle aynı sonucu üretmişti.
Acaba isteğinizi yanlış mı anlıyoruz?
Sy. @ÖmerBey ;

Hocam evet yanlış sonuç vermekte . sonuçlar milyarlı bazı hücrelerde ise trilyon olarak sonuç vermekte. Ben bunu Google e tablolarda kullanıyorum. Acaba oradan dolayı mı ? hata vermekte.

Değerli vaktinizi aldığım için kusura bakmayın özür dilerim. olayı bir kez daha açıklayım isterseniz.

Yaklaşık olarak 200 den fazla tır var. Bu tırlar 4 bölgeden Mazot ve Adblue almaktadır. Bizim amacımız araçların Km. de kaç litre yakıt yaktığını bulmak.

Bu 4 bölge Ankara , Adana , Kocaeli , Petrol Ofisi ( bütün petrol ofisi )
araç 3 bölge de mazot alırken aracın km. si yazılır. Ama Petrol Ofisinden yakıt aldığında Km. si yazılmamaktadır.

Excel dosyasında genel kural şu şekilde olmaktadır.
C sütununda araç plakasına göre E sütununda ne kadar Mazot aldığını bulmak buna ek olarak şart şu şekilde olacak. İki büyük Km arasında ki 0 km.lerin karşısında bulunan Mazot litrelerini toplaması ve alt tarafta kalan büyük km.nin de karşısında yer alan mazot litresini de alması. Bazı araçlar ise Petrol ofisine hiç uğramadan garajlardan yakıt alır. Bu çok önemli değil garajlardan yakıt aldıkça km. yazılır. bura da kilit nokta Km. değeri sıfır olanlar olacak. umarım anlata bilmişimdir.

örnek :
araç Petrol ofisinden 3 kez farklı günlerde yakıt aldı petrol ofisinde km. değeri 0 gelir ondan sonra Ankara' ya uğradı deposunu doldurdu o esnada km. si alınır. Sonra 3 kere Petrol ofisi bir de Ankara' dan aldığı yakıt toplanır kaç km. yaptı ise ona bölünerek kaç km. de kaç litre yakıt yaktığı hesaplanarak 1 km. de % kaç yakıt oranı bulunur.
İnşaallah anlata bilmişim tam detaylı olarak anlatamadığım için özür dilerim. Değerli vaktinizi aldığım için özür dilerim. Teşekkür ederim.
 

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Sy. @erdmkrky ;

hocam dosyamı eklendim. Bakabildiniz mi ?
 

CengizYurek

Altın Üye
Katılım
11 Ocak 2017
Mesajlar
46
Excel Vers. ve Dili
2019-TR
Altın Üyelik Bitiş Tarihi
01-01-2026
altın üye olmadığı için burdan indiremez. farklı bir upload sitesine yüklemeniz gerekecek arkadaşın görmesi için.
 

CengizYurek

Altın Üye
Katılım
11 Ocak 2017
Mesajlar
46
Excel Vers. ve Dili
2019-TR
Altın Üyelik Bitiş Tarihi
01-01-2026
Konu gerçekten karışık geldi bana. Ama yinede faydası olur diye 2 adet formül bırakayım. Toplu hesaplama yapar.

I Sütunundaki değer 0sa, O Sütununda Mazot kelimesi varsa ve B sütununda PETROL OFİSİ yazıyorsa alınan toplam litreyi yazar.

Kod:
=TOPLA(EĞER(VE(I2<=0;O2="Mazot";B2="PETROL OFİSİ");E2);EĞER(VE(I3<=0;O3="Mazot";B3="PETROL OFİSİ");E3);EĞER(VE(I4<=0;O4="Mazot";B4="PETROL OFİSİ");E4);EĞER(VE(I5<=0;O5="Mazot";B5="PETROL OFİSİ");E5);EĞER(VE(I6<=0;O6="Mazot";B6="PETROL OFİSİ");E6);EĞER(VE(I7<=0;O7="Mazot";B7="PETROL OFİSİ");E7);EĞER(VE(I8<=0;O8="Mazot";B8="PETROL OFİSİ");E8);EĞER(VE(I9<=0;O9="Mazot";B9="PETROL OFİSİ");E9);EĞER(VE(I10<=0;O10="Mazot";B10="PETROL OFİSİ");E10))
I sütunundaki değer 0dan büyükse, O sütununda Mazot kelimesi varsa alınan toplam litreyi yazar.
Kod:
=TOPLA(EĞER(VE(I2>0;O2="Mazot");E2);EĞER(VE(I3>0;O3="Mazot");E3);EĞER(VE(I4>0;O4="Mazot");E4);EĞER(VE(I5>0;O5="Mazot");E5);EĞER(VE(I6>0;O6="Mazot");E6);EĞER(VE(I7>0;O7="Mazot");E7);EĞER(VE(I8>0;O8="Mazot");E8);EĞER(VE(I9>0;O9="Mazot");E9);EĞER(VE(I10>0;O10="Mazot");E10))
 
Katılım
15 Mart 2005
Mesajlar
354
Excel Vers. ve Dili
Microsoft 365 En 64 Bit
Altın Üyelik Bitiş Tarihi
20-03-2024
Merhaba,

VBA ile çözüm:

C++:
Sub PlakaBazinda_ToplamAl()
    Dim adoCN As Object, RS As Object
    Dim strSQL As String, myFile As String
    Dim ws As Worksheet, sh1 As Worksheet
    Dim wsCtrl As Boolean
   
    Application.ScreenUpdating = False
   
    Set adoCN = CreateObject("ADODB.Connection")
   
    wsCtrl = False
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name = "Rapor" Then
            wsCtrl = True:  Exit For
        End If
    Next ws
    If wsCtrl = False Then Sheets.Add(After:=Sheets(Sheets.Count)).Name = "Rapor"
   
    Set sh1 = Sheets("Rapor")
       
    myFile = ThisWorkbook.FullName
   
    adoCN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & myFile & _
      ";Extended Properties='Excel 12.0 Xml;HDR=YES';"
   
    '***** Plaka ve Tarih bazında yakıt toplamını bulur *****
    strSQL = "SELECT [Araç], [Tarih], [Yakıt Tanımı], SUM([Litre]) As ToplamYakit " & _
             "FROM [Sayfa2$B1:Q] " & _
             "WHERE [Yakıt Tanımı] = 'Mazot' AND ([Yakıt Deposu] = 'PETROL OFİSİ' OR ([Yakıt Deposu]  <> 'PETROL OFİSİ' AND [Km] > 0)) " & _
             "GROUP BY [Araç], [Tarih], [Yakıt Tanımı] " & _
             "ORDER BY [Araç], [Tarih]  "
   
    Set RS = adoCN.Execute(strSQL)
   
    sh1.Range("A1").Resize(1, 4) = Array("Araç", "Tarih", "Yakıt Tanımı", "Toplam Yakit")
   
    sh1.Range("A2").CopyFromRecordset RS
    sh1.Rows(1).Font.Bold = True
    sh1.Columns("B").NumberFormat = "dd.mm.yyyy"
    sh1.Columns("D").NumberFormat = "#,##0.00"
    sh1.Columns("A:D").AutoFit
   
    adoCN.Close
    Set adoCN = Nothing:    Set sh1 = Nothing
   
    Application.ScreenUpdating = True
   
    MsgBox "İşlem tamam...", vbInformation
   
End Sub
 

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Sy. @dost ;
Hocam istediğim sonucu vermedi maalesef
 
Katılım
9 Şubat 2022
Mesajlar
135
Excel Vers. ve Dili
Ofis 2021 TR 64 Bit
Altın Üyelik Bitiş Tarihi
09-02-2027
Mevcut verilerden kendiniz manuel olarak nasıl hesapladığınızı rakamsal bir örnekle baştan sona açıklarsanız çözüm bulunur gibi duruyor.
 
Katılım
15 Mart 2005
Mesajlar
354
Excel Vers. ve Dili
Microsoft 365 En 64 Bit
Altın Üyelik Bitiş Tarihi
20-03-2024
Sy. @dost ;
Hocam istediğim sonucu vermedi maalesef
Merhaba

Benim yazdığım kod, (yakıt deposu= Petrol Ofisi veya yakıt deposu Petrol Ofisi olmayan ve Km > 0 olanların) Plaka ve Tarih bazında yakıt toplamını bulur.
Eğer istemiş olduğunuz farklı bir sonuç ise, istediklerinizi detaylı olarak yazarsanız kod o şekilde revize edilir.
 

TUNCA ERSİN

Altın Üye
Katılım
18 Ağustos 2021
Mesajlar
129
Excel Vers. ve Dili
Office Professional plus 2016 Tr
Altın Üyelik Bitiş Tarihi
18-08-2026
Sy. @dost ve @fdemirci7 ;

Hocam Ekli Dosyanın sayfa1 de açıklaması ve manuel olarak toplaması mevcuttur.
Örnek :
araç 4 adet Tır garajı bulunuyor. Bu garajlar Adana Ankara Körfez burada aracın deposu fulleniyor. Bu esnada aracın kilometresi alınıyor. I Sütununda yazıyor. Sonra Tura başlar örneğin Ankara dan depoyu doldurur sonra balıkesir'e gider sonra İzmir'e mazotu azalınca da Petrol ofisinden taşıtmatik ile mazot alır. sonra tekrar Adana veya Ankara' da ki garaja gelir deposu doldurulur ve kilometresi I sütununa yazılır.
Benim istediğim Araçın bu dolaşımda yapmış olduğu mazot litresi aslında I sütununda yer alan Kilometre tura başlamadan önceki kilometre başlangıcı oluyor. en son hangi garajdan mazot aldı ise o esnada yazılan kilometre ise bitiş kilometresi oluyor.

aşağıda ki tabloda araç adana garajda 11.01.2024 tarihinde deposunu mazot ile doldurmuş sonra petrol ofisinden 15.01.2024 tarihinde mazot almış sonra 18.01.2024 tarihinde adana garaja gelmiş deposunu doldurmuş bu araç 500 lt. ve 394,01 lt. mazot toplamda ise 894,01 lt. mazot almış sonuçu R sütununa yazacak. bu bir de bu araçın yaptığı km. önemli I sütununda son km. 291796 ilk km. 289204 km. net 2592 Km. yapmış Bunu da Q sütununa hesaplarmısınız. Teşekkür ederim.

Not : Google E tablolar kullanıyorum.

YKTC2024010001115

ADANA GARAJ

06 C

11.01.2024​

-486,02​

-18.282,61​

37,62​

 

289.204​

burada garaja uyramış aldığı yakıt ile km. bilgisi alınmış araç toplamda kaç litre yakıt almış

Mazot

286182​

3.022​

1086,02​

YKTC2024010001396

PETROL OFİSİ

06 C

15.01.2024​

-500​

-19.980,00​

39,96​

 

0​

Bu arada Km. Bilgisi yok araç taşıtmatik ile yakıt almış

Mazot

289204​

  

YKTC2024010001792

ADANA GARAJ

06 C

18.01.2024​

-394,01​

-14.617,77​

37,1​

 

291.796​

burada garaja uyramış aldığı yakıt ile km. bilgisi alınmış araç toplamda kaç litre yakıt almış

Mazot

289204​

2.592​

894,01​


   

 

  

  
   

 

 

   
   

 

  

 

Ekli dosyalar

Katılım
15 Mart 2005
Mesajlar
354
Excel Vers. ve Dili
Microsoft 365 En 64 Bit
Altın Üyelik Bitiş Tarihi
20-03-2024
Merhaba,

Denersiniz...

C++:
Sub Litre_Km()
Dim oDict As Object
Dim s1 As Worksheet
Dim myData As Variant
Dim say, i As Integer
Dim totalLt As Double, totalKm As Double
Dim k


Application.ScreenUpdating = False

Set s1 = Sheets("Sayfa2")
Set oDict = VBA.CreateObject("Scripting.Dictionary")
    
myData = s1.Range("A2:P" & s1.Cells(s1.Rows.Count, "C").End(3).Row).Value

For i = LBound(myData, 1) To UBound(myData, 1)
    If Not oDict.Exists(myData(i, 3)) Then
        oDict.Add myData(i, 3), say
    End If
Next

ReDim myList(1 To UBound(myData, 1) + 1, 1 To 2)

For Each k In oDict.keys
    For i = LBound(myData, 1) + 1 To UBound(myData, 1) + 1
        If s1.Cells(i, "C").Value = k Then
            tmpKm = s1.Cells(i, "P").Value
            If s1.Cells(i, "I").Value = 0 Then
                totalLt = totalLt + s1.Cells(i, "E").Value
            Else
                totalLt = totalLt + s1.Cells(i, "E").Value
                If tmpKm > 0 Then totalKm = s1.Cells(i, "I").Value - tmpKm
                myList(i - 1, 1) = totalKm
                myList(i - 1, 2) = totalLt
                totalLt = 0:    totalKm = 0:   tmpKm = 0
            End If
        End If
    Next i
Next k

s1.Range("Q2").Resize(UBound(myData, 1), 2) = myList

Set s1 = Nothing:  Set oDict = Nothing

MsgBox "İşlem tamam...", vbInformation

Application.ScreenUpdating = True

End Sub
 
Üst