• DİKKAT

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

Dizide yuvarlama

  • Konbuyu başlatan Konbuyu başlatan tuvons
  • Başlangıç tarihi Başlangıç tarihi
Katılım
9 Ekim 2019
Mesajlar
109
Excel Vers. ve Dili
Standart 2016
Arkadaşlar merhaba,

Dizi oluştururken en son oluşan veriler üzerinden yuvarlama yapmak istiyorum. Örneğin toplamı 2.345.379 olan ilk verinin 2.345 olarak yuvarlanmasını istiyorum. 1000'e bölüp virgülden sonra rakam istemiyorum. Bunu aşağıdaki kodlara nasıl ekleyebilirim?

Kod:
Sub BENZERSİZ_TEK_SÜTUN_TOPLAMALI()
    Dim s As Object, liste(), dizi()
    
    son = Sheets(1).Cells(Rows.Count, "a").End(3).Row
    liste = Sheets(1).Range("a2:c" & son).Value
    
    ReDim dizi(1 To son, 1 To 1)
    
    Set s = CreateObject("Scripting.Dictionary")
    
    For i = 1 To UBound(liste, 1)
        Aranan = liste(i, 1)
        If Not s.exists(Aranan) Then
            Say = Say + 1
            s.Add Aranan, Say
            ReDim Preserve dizi(1 To son, 1 To 3)
            dizi(Say, 1) = liste(i, 1) & "-" & liste(i, 2)
        End If
        dizi(s.Item(Aranan), 2) = dizi(s.Item(Aranan), 2) + liste(i, 3)
    Next i
    
    Sheets(2).Range("A2").Resize(s.Count, 2) = dizi
    MsgBox dizi(2, 2)
End Sub
 
Deneyiniz.

C++:
Option Explicit

Sub BENZERSİZ_TEK_SÜTUN_TOPLAMALI()
    Dim S As Object, Liste(), Dizi(), i As Long, Son As Long, Aranan As String, Say As Long
   
    Son = Sheets(1).Cells(Rows.Count, "a").End(3).Row
    Liste = Sheets(1).Range("a2:c" & Son).Value
   
    ReDim Dizi(1 To Son, 1 To 1)
   
    Set S = CreateObject("Scripting.Dictionary")
   
    For i = 1 To UBound(Liste, 1)
        Aranan = Liste(i, 1)
        If Not S.Exists(Aranan) Then
            Say = Say + 1
            S.Add Aranan, Say
            ReDim Preserve Dizi(1 To Son, 1 To 3)
            Dizi(Say, 1) = Liste(i, 1) & "-" & Liste(i, 2)
        End If
        Dizi(S.Item(Aranan), 2) = Dizi(S.Item(Aranan), 2) + Liste(i, 3)
    Next i
   
    For i = 1 To Say
        Dizi(i, 2) = Int(Dizi(i, 2) / 1000)
    Next
   
    Sheets(2).Range("A2").Resize(S.Count, 2) = Dizi
   
    MsgBox Dizi(2, 2)
End Sub
 
Kodda küçük bir düzeltme yapmıştım. Son halini kullanınız.
 
Sayın @Korhan Ayhan sizden ufak bir yardım rica edecektim.

Benim yapmak istediğim "muh kodu" "kredi sınıfı" "segment" ve "şube kodu"na göre anaparaları toplamak. Fakat kaç gündür uğraşıyorum bunu bir türlü beceremedim. En son sizinle paylaştığım kodlarda topluyorum ama sadece şube koduna göre ayrıştırıyor. Diğer kriterleri ekleyemiyorum.

Bu konuda bana yardımcı olabilir misiniz?

Örnek dosya linki

https://dosya.co/s2f62jgfwe42/Kitap1.xlsx.html
 
Görmek istediğiniz sonuç nedir?
 
Tüm kriterler için toplam görmek ona göre yuvarlanmış sütunundaki toplam rakam ile eşitleyeceğim.

Örneğin; şube kodu "80100", muh kodu "150050", kredi sınıfı "1" ve segmenti "2" olan satırlardaki "yuvarlanmış" sütununun toplamını "anapara" sütunundaki rakamların toplamının 1000'e bölümü ile eşitlemek istiyorum.

Yani verdiğim kriterlerdeki anaparaların toplamı "191.320" yapıyor. 1000'e bölümü "191" fakat yuvarlanmış sütununun toplamı "192" olduğu için yuvarlanmış sütundaki aynı kriterlerdeki en büyük sayıdan 1 çıkartarak onu da "191" e eşitlemek istiyorum.

Biraz dolambaçlı olmuş olabilir, anlatmak istediğimi yazıya dökebilmişimdir inşallah :)
 
Paylaştığınız dosyanıza görmek istediğiniz sonucu ekleyip güncelleyiniz.
 
Sonuç olarak N2 hücresinde 96 değerini mi görmek istiyorsunuz?
 
Oluşacak tablo aynı sayfada mı olsun, yoksa yeni boş bir sayfada mı olsun?

Aslında istediğiniz rapor Özet Tablo (Pivot) ile yapılabilir. Sizin için yönetmesi daha kolay olur.
 
Oluşacak tablo aynı sayfada mı olsun, yoksa yeni boş bir sayfada mı olsun?

Aslında istediğiniz rapor Özet Tablo (Pivot) ile yapılabilir. Sizin için yönetmesi daha kolay olur.

Aynı sayfada rapor üzerinde değişiklik yapmak istiyorum @Korhan Ayhan Farklı bir sütuna veri taşımak istemiyorum. Çalıştığım dosya 1milyon satıra yakın veri içeriyor ve sütun sayısı çok fazla olduğu için farklı bir sayfaya almak işime yaramıyor.

Sonuçları görmek yeterli olmuyor. Fark veren satırlar için değişiklik de gerektiği için pivot işime yaramıyor maalesef.
 
Biz hangi tabloyu oluşturacağız benim kafam karıştı!

Amacımız son paylaştığınız dosyada ki I-N sütun aralığındaki tablo değil mi?
 
Raporun ham hali A:F arasındaki veriler. I:N arasını sonucu göstermek için paylaşmıştım. Değişiklikleri F sütununda yapmak istiyorum.
 
Şimdi anladım siz F sütunundaki değerlerin sarı renkli alan için 96 vermesini istiyorsunuz.

Bunun için YUVARLA fonksiyonunu kaldırırsanız çözüme ulaşırsınız. Görüntü olarakta hücre biçimlendirmeden sayı biçimini ayarlayarak küsüratları gizleyebilirsiniz.
 
Tam anlatamıyorum kusura bakmayın :)

F sütunundaki değerlerin sarı renkli alandaki gibi olmasını istiyorum. Yani normalde yuvarlanmış rakamı 23,23,24,24 olan satıların makroyu çalıştırdıktan sonra 23,23,25,25 olmasını istiyorum.

Normalde yuvarla fonksiyonu ile 23,23,24,24 yapıyor zaten ama ben onların toplamını 96'ya eşitlemeye çalışıyorum. Onun için makroya ihtiyacım var bu çalışmada. Az satırda çalışırken kolay ama satır sayısı arttığında tek tek 1 ekle 1 çıkar yapmak zorlaşıyor.
 
YUVARLA fonksiyonunu kaldırmak işinizi görmüyor mu?
 
Listelerde tutarları 1000'e bölüp raporlamam lazım. Ondan yuvarlama işlemini kaldıramıyorum.
Şu şekilde kaldırabilirim; yuvarlanmış sütununu en baştan tüm kriterlere göre makro ile oluşturabilirsem olur.
 
YUVARLA fonksiyonunu kaldırmak ne gibi bir sıkıntı yaratıyor
 
Geri
Üst