Soru VLookup / Düşeyara Daha hızlı kod yada alternatif

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Aşağıdaki kod ile kendi dosyamda şunu yapmaya çalışıyorum. Yaklaşık 300.000 satırın üzerinde veriden ilgili sütundan düşeyara ile fatura eşleştirmesi yapmaya çalışıyorum. Ancak satır sayısı çok olduğu için excel ciddi anlamda ağırlaşıyor.

Aşağıdaki kodlar ile alabildiğim sonucu verecek daha hızlı bir çözüm yolu var mıdır. Örnek dosya ektedir.

Kod:
Private Sub CommandButton4_Click()
On Error Resume Next
Unload Me
son1 = Sheets("Muavin_Fişler").[A1048576].End(3).Row
son2 = Sheets("Faturalar").[A1048576].End(3).Row

 For i = 2 To son2
 
 a = "*" & Sheets("Faturalar").Range("A" & i).Value & "*"
 
 Sheets("Faturalar").Range("L" & i) = Application.WorksheetFunction.VLookup(a, Sheets("Muavin_Fişler").Range("C2:G" & son1), 5, 0)
 Next i
 
 MsgBox "Rapor Hazır", vbExclamation
 
End Sub
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,354
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Raporu 2-3 saniyede almak mümkün... Yalnız ön hazırlık yapmanız gerekiyor. Resimde görüldüğü gibi belge numaralarını "C" sütundan "Metni sütunlara dönüştür" menüsü ile "H" sütununa çıkarın. Sonra, bir defaya mahsus olmak üzere son resimdeki bağlantı özelliklerinden dosya yolunu düzeltin. Tablo üzerinde sağ tuş ile "Yenile" dediğinizde raporunuz hazır olacak.

Kolay gelsin...

235258

235259

235260

.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif;

Fatura numaralarında 16 karakter olması, sağdan ilk karakterin numerik olması ve içeriğinde 2021 yazması koşuluna göre işlem yapılmaktadır.

C++:
Option Explicit

Sub Fast_Vlookup_Dictionary()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object
    Dim Veri As Variant, X As Long, Son As Long, Say As Long
    Dim Fatura_No As Variant, Y As Byte, Zaman As Double
    
    Zaman = Timer
    
    Set S1 = Sheets("Muavin_Fişler")
    Set S2 = Sheets("Faturalar")
    Set Dizi = VBA.CreateObject("Scripting.Dictionary")
    
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    
    Veri = S1.Range("A2:F" & Son).Value
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            Fatura_No = Split(Veri(X, 3), ",")
            For Y = LBound(Fatura_No) To UBound(Fatura_No)
                If Len(Fatura_No(Y)) = 16 And IsNumeric(Right(Fatura_No(Y), 1)) And Fatura_No(Y) Like "*2021*" Then
                    If Not Dizi.Exists(Fatura_No(Y)) Then
                        Dizi.Add Fatura_No(Y), Veri(X, 1)
                    End If
                End If
            Next
        End If
    Next
    
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
    
    Veri = S2.Range("A2:A" & Son).Value
    
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            Say = Say + 1
            If Dizi.Exists(Veri(X, 1)) Then
                Liste(Say, 1) = Dizi.Item(Veri(X, 1))
            End If
        End If
    Next
    
    If Say > 0 Then
        S2.Range("L2:L" & S2.Rows.Count).ClearContents
        S2.Range("L2").Resize(Say) = Liste
    End If

    Dizi.RemoveAll
    Erase Liste
    
    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
End Sub
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Alternatif;

Fatura numaralarında 16 karakter olması, sağdan ilk karakterin numerik olması ve içeriğinde 2021 yazması koşuluna göre işlem yapılmaktadır.

C++:
Option Explicit

Sub Fast_Vlookup_Dictionary()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object
    Dim Veri As Variant, X As Long, Son As Long, Say As Long
    Dim Fatura_No As Variant, Y As Byte, Zaman As Double
   
    Zaman = Timer
   
    Set S1 = Sheets("Muavin_Fişler")
    Set S2 = Sheets("Faturalar")
    Set Dizi = VBA.CreateObject("Scripting.Dictionary")
   
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
   
    Veri = S1.Range("A2:F" & Son).Value
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            Fatura_No = Split(Veri(X, 3), ",")
            For Y = LBound(Fatura_No) To UBound(Fatura_No)
                If Len(Fatura_No(Y)) = 16 And IsNumeric(Right(Fatura_No(Y), 1)) And Fatura_No(Y) Like "*2021*" Then
                    If Not Dizi.Exists(Fatura_No(Y)) Then
                        Dizi.Add Fatura_No(Y), Veri(X, 1)
                    End If
                End If
            Next
        End If
    Next
   
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
   
    Veri = S2.Range("A2:A" & Son).Value
   
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            Say = Say + 1
            If Dizi.Exists(Veri(X, 1)) Then
                Liste(Say, 1) = Dizi.Item(Veri(X, 1))
            End If
        End If
    Next
   
    If Say > 0 Then
        S2.Range("L2:L" & S2.Rows.Count).ClearContents
        S2.Range("L2").Resize(Say) = Liste
    End If

    Dizi.RemoveAll
    Erase Liste
   
    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
End Sub

Teşekkürler Korhan bey, kontrol edeceğim.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Raporu 2-3 saniyede almak mümkün... Yalnız ön hazırlık yapmanız gerekiyor. Resimde görüldüğü gibi belge numaralarını "C" sütundan "Metni sütunlara dönüştür" menüsü ile "H" sütununa çıkarın. Sonra, bir defaya mahsus olmak üzere son resimdeki bağlantı özelliklerinden dosya yolunu düzeltin. Tablo üzerinde sağ tuş ile "Yenile" dediğinizde raporunuz hazır olacak.

Kolay gelsin...

Ekli dosyayı görüntüle 235258

Ekli dosyayı görüntüle 235259

Ekli dosyayı görüntüle 235260

.
Zeki bey teşekkürler, "bağlantı özellikleri" dediğiniz konuyu anlamadım. İlk defa karşılaştığım bir durum. İlk resimdeki haline getirebiliyorum. Ancak ondan sonraki adıma yabancıyım, kusura bakmazsanız konuyu biraz aşamalandırarak anlatır mısınız. 3 nolu resme nerden nasıl ulaşabiliyorum. SQL ile alakalı bir durum ise tamamiyle yabancı olduğum bir konu.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Alternatif;

Fatura numaralarında 16 karakter olması, sağdan ilk karakterin numerik olması ve içeriğinde 2021 yazması koşuluna göre işlem yapılmaktadır.

C++:
Option Explicit

Sub Fast_Vlookup_Dictionary()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object
    Dim Veri As Variant, X As Long, Son As Long, Say As Long
    Dim Fatura_No As Variant, Y As Byte, Zaman As Double
   
    Zaman = Timer
   
    Set S1 = Sheets("Muavin_Fişler")
    Set S2 = Sheets("Faturalar")
    Set Dizi = VBA.CreateObject("Scripting.Dictionary")
   
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
   
    Veri = S1.Range("A2:F" & Son).Value
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            Fatura_No = Split(Veri(X, 3), ",")
            For Y = LBound(Fatura_No) To UBound(Fatura_No)
                If Len(Fatura_No(Y)) = 16 And IsNumeric(Right(Fatura_No(Y), 1)) And Fatura_No(Y) Like "*2021*" Then
                    If Not Dizi.Exists(Fatura_No(Y)) Then
                        Dizi.Add Fatura_No(Y), Veri(X, 1)
                    End If
                End If
            Next
        End If
    Next
   
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
   
    Veri = S2.Range("A2:A" & Son).Value
   
    ReDim Liste(1 To UBound(Veri, 1), 1 To 1)
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            Say = Say + 1
            If Dizi.Exists(Veri(X, 1)) Then
                Liste(Say, 1) = Dizi.Item(Veri(X, 1))
            End If
        End If
    Next
   
    If Say > 0 Then
        S2.Range("L2:L" & S2.Rows.Count).ClearContents
        S2.Range("L2").Resize(Say) = Liste
    End If

    Dizi.RemoveAll
    Erase Liste
   
    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
End Sub

Korhan Bey merhaba,

Verdiğiniz kodlara istinaden bir konu hakkında destek alabilir miyim. Split ile ilgili. Yüklemiş olduğum örnek dosyaya benzer olarak Fatura No ların olduğu sütun F sütununda. F sütunundaki veriler fatura no, ünvan, fatura türü, tarih gibi bilgiler içermekte. Ve açıklama satırı içerikleri virgülle ayrılmış.

Buna göre, yüklemekte olduğum örnek dosyanın Fatura Türleri adlı sayfasında olan B sütunundaki Aranacak şeklinde geçen içerikleri ilgili örnek dosyanın J sütununa aldırabilir miyiz. I sütununa Fatura Numarası, J sütununa ise Fatura Türlerini nasıl aldırabilirim.

I Sütununa ilk virgülden önceki değerler yazdırılmalı, J sütununa ise Aranan kelime açıklama satırında var ise J sütunundaki hücreye aranan kelime yazdırılmalı, yok ise boş geçmeli.

Örnek bir dosya yükledim.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyin.

Olmayan yeri varsa revize ederim.

C++:
Option Explicit

Sub Fast_Vlookup_Dictionary()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object
    Dim Veri As Variant, X As Long, Son As Long
    Dim Fatura_No As Variant, Fatura_Tipi As Variant
    Dim Kontrol As Boolean, Y As Byte, Say As Long, Zaman As Double
   
    Zaman = Timer
   
    Set S1 = Sheets("Muavin")
    Set S2 = Sheets("Fatura Türleri")
    Set Dizi = VBA.CreateObject("Scripting.Dictionary")
   
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
   
    Veri = S2.Range("B2:B" & Son).Value
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            If Not Dizi.Exists(Veri(X, 1)) Then
                Say = Say + 1
                Dizi.Add Veri(X, 1), Say
            End If
        End If
    Next
   
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
   
    Veri = S1.Range("A2:H" & Son).Value
   
    ReDim Liste(1 To UBound(Veri, 1), 1 To 2)
    
    Say = 0
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 6) <> "" Then
            Fatura_No = Split(Veri(X, 6), ",")
            Say = Say + 1
            For Y = LBound(Fatura_No) To UBound(Fatura_No)
                If Len(Fatura_No(Y)) = 16 And IsNumeric(Right(Fatura_No(Y), 1)) And Fatura_No(Y) Like "*2022*" Then
                    Fatura_Tipi = Empty
                    For Each Fatura_Tipi In Dizi.Keys
                        If Veri(X, 6) Like "*" & Fatura_Tipi & "*" Then
                            Liste(Say, 1) = Fatura_No(Y)
                            Liste(Say, 2) = Fatura_Tipi
                            Kontrol = True
                            Exit For
                        End If
                    Next
                End If
                If Kontrol = True Then Exit For
            Next
        End If
        Kontrol = False
    Next
   
    If Say > 0 Then
        S1.Range("I2:J" & S1.Rows.Count).ClearContents
        S1.Range("I2").Resize(Say).NumberFormat = "@"
        S1.Range("I2").Resize(Say, 2) = Liste
    End If

    Dizi.RemoveAll
    Erase Liste
   
    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
End Sub
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Deneyin.

Olmayan yeri varsa revize ederim.

C++:
Option Explicit

Sub Fast_Vlookup_Dictionary()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object
    Dim Veri As Variant, X As Long, Son As Long
    Dim Fatura_No As Variant, Fatura_Tipi As Variant
    Dim Y As Byte, Say As Long, Zaman As Double
  
    Zaman = Timer
  
    Set S1 = Sheets("Muavin")
    Set S2 = Sheets("Fatura Türleri")
    Set Dizi = VBA.CreateObject("Scripting.Dictionary")
  
    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
  
    Veri = S2.Range("B2:B" & Son).Value
  
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 1) <> "" Then
            If Not Dizi.Exists(Veri(X, 1)) Then
                Say = Say + 1
                Dizi.Add Veri(X, 1), Say
            End If
        End If
    Next
  
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    If Son = 2 Then Son = 3
  
    Veri = S1.Range("A2:H" & Son).Value
  
    ReDim Liste(1 To UBound(Veri, 1), 1 To 2)
   
    Say = 0
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        If Veri(X, 6) <> "" Then
            Fatura_No = Split(Veri(X, 6), ",")
            Say = Say + 1
            For Y = LBound(Fatura_No) To UBound(Fatura_No)
                If Len(Fatura_No(Y)) = 16 And IsNumeric(Right(Fatura_No(Y), 1)) And Fatura_No(Y) Like "*2022*" Then
                    For Each Fatura_Tipi In Dizi.Keys
                        If Veri(X, 6) Like "*" & Fatura_Tipi & "*" Then
                            Liste(Say, 1) = Fatura_No(Y)
                            Liste(Say, 2) = Fatura_Tipi
                            Exit For
                        End If
                    Next
                End If
            Next
        End If
    Next
  
    If Say > 0 Then
        S1.Range("I2:J" & S1.Rows.Count).ClearContents
        S1.Range("I2").Resize(Say, 2) = Liste
    End If

    Dizi.RemoveAll
    Erase Liste
  
    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
End Sub

Korhan Bey teşekkürler,

Fatura Numarasını yazdırmada şöyle bir sorun var. Sadece rakamlardan oluşan Fatura Numaraları yazdırılırken ya da yazdırılacak hücreye yansıyan değer ile ham veri farklı. Örneğin, 7542022000000159 şeklindeki bir ham veri yazdırılmış hücrede 7542022000000150 şeklinde görünüyor, yada 0012022018580246 şeklindeki ham veri 12022018580246 şeklinde görünüyor. Bunu düzeltebilir misiniz.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sorun excelin 15 dijit duyarlılığından kaynaklanıyor. İlgili sütun METİN olarak biçimlendirilirse sorun ortadan kalkar.

Üstte ki kodu bu yönde revize ettim. Deneyiniz.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Sorun excelin 15 dijit duyarlılığından kaynaklanıyor. İlgili sütun METİN olarak biçimlendirilirse sorun ortadan kalkar.

Üstte ki kodu bu yönde revize ettim. Deneyiniz.

Korhan Bey, son mesajınızdan sonra dediğinizi yaptım, düzgün çalışıyor.

Açtığım konu özelinde son bir destek isticem yardım edebilirseniz.

Aşağıdaki kodlar benim açımdan şu işe yaramakta. Fiş Numaraları içinde "120.02*" geçenlerin yanlarına herhangi bir hücre ya da atanan değer yazdırarak bunun haricinde olanlardan ayırmak için kullanıyorum.

Aşağıdaki kodlara şu şekilde bir işlev katmak istiyorum. Metinsel ifadesi şu, Aynı fiş numarası içinde hesap kodlarında 120.02 ile ve 391 ile başlayan fişler var ise J sütununa "02" yazdırılsın. Bunun bir benzeri olarak 320.02 ve 191 için geçerli. Aynı fişin tüm satır karşılıklarına 02 yada herhangi bir ibare.


Bu konuyu açmamdaki asıl sebep şuydu. Örnek olarak eklediğim verilerde görüldüğü gibi, bir firmanın muavini üzerinde işlem yapıyorum. Firma ilk olarak bir Lokasyon ( merkez ) olarak çalışmaya başlamış. Ancak daha sonra sektör, gelir, gider olarak farklılıklara sahip bir lokasyona daha sahip olmuş. 120.02 ve 320.02 deki 02 ler yeni lokasyon. 01 ler eski lokasyon. Alıcı ve Satıcı kodları üzerinde bir lokasyon ayrımı varken KDV hesapları üzerinde böylesi bir ayrım yapılmamış malesef. Benim asıl amacımda Öncelikle lokasyonları ayırıp, daha sonra gelir gider hesaplarını kontrol etmek. Ancak muavin yapısı excelde işlemeye çok müsait değil açıkcası.

Bir örnek dosya ekliyorum makro içeren, incelenmek istenirse,



Kod:
    With CreateObject("Scripting.Dictionary")
        For i = 2 To Cells(Rows.Count, 1).End(3).Row
            'If Cells(i, 1).Value Like ("120.02*") Then
            If Cells(i, 1).Value Like ("120.02*") Then
                .Item(Cells(i, 9).Value) = Cells(i, 2).Value
            End If
        Next i
        For i = 2 To Cells(Rows.Count, 1).End(3).Row
            If .exists(Cells(i, 9).Value) Then Cells(i, "J").Value = "Ramada"
            If .exists(Cells(i, 9).Value) Then Cells(i, "K").Value = Cells(i, 1)
            If .exists(Cells(i, 9).Value) Then Cells(i, "L").Value = Cells(i, 2)

            
        Next i
    End With
    
    With CreateObject("Scripting.Dictionary")
        For i = 2 To Cells(Rows.Count, 1).End(3).Row
            If Cells(i, 1).Value Like ("320.02*") Then
                .Item(Cells(i, 9).Value) = Cells(i, 2).Value
            End If
        Next i
        For i = 2 To Cells(Rows.Count, 1).End(3).Row
            If .exists(Cells(i, 9).Value) Then Cells(i, "J").Value = "Ramada"
            If .exists(Cells(i, 9).Value) Then Cells(i, "K").Value = Cells(i, 1)
            If .exists(Cells(i, 9).Value) Then Cells(i, "L").Value = Cells(i, 2)

        Next i
    End With
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Son atmış olduğum mesaja istinaden destek - yönlendirici bir bilgi alabilir miyim, oluru olmazı ile ilgili.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Paylaştığınız dosyada bahsettiğiniz koşullara uygun veri var mı?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben size bir soru yönelttim. Siz örnek dosyanızı değiştirdiniz. Neden böyle yaptığınızı anlayamadım.

Ek olarak aynı fişin içinde farklı veriler varsa bunlarda da J sütununa ibare eklenecek mi?
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba, son paylaşmış olduğum dosya bir önceki dosya ile veri olarak aynı. Biri makro içeren kitap , biri normal excel kitabı. Veri aynı. Bir önceki yani makro içeren 1.4 MB görünmekte, excel kitabı olarak paylaştığım ise 16B , İki dosya arasında bu kadar fazla fark olmasının sebebi ne olabilir.

Ayrıca son eklediğim örnek dosya üzerinden kodlama yapılabilir, yapılmaısnı istediğim şey ile ilgili. Uygun veri var.
 

Ekli dosyalar

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ben size bir soru yönelttim. Siz örnek dosyanızı değiştirdiniz. Neden böyle yaptığınızı anlayamadım.

Ek olarak aynı fişin içinde farklı veriler varsa bunlarda da J sütununa ibare eklenecek mi?
Korhan bey, dosyaların hepsi aynı. Veri yükü fazla olmasın diye küçük bir örnek koymaya çalışıyorum, dosyanın boyutu büyüdü.

Son sorunuza istinaden, evet aynı fişin tüm satırlarına ilgili ibare yazdırılıcak.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben açıkçası neden yeni dosya ekleme ihtiyacı duyduğunuzu anlamadım. Zaten bir dosya paylaşmıştınız.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Ben açıkçası neden yeni dosya ekleme ihtiyacı duyduğunuzu anlamadım. Zaten bir dosya paylaşmıştınız.

Korhan Bey, en son istediğin şeyle ilgili 3 dosya paylaştım. İlk dosya örnek olarak gönderdiğim dosya, sonradan farkına vardım ki 6000 satır veri var, örnek olarak hazırladığım dosyayı eklememişim yani. Dosya boyutu büyük örnek dosyalara göre. İkinci dosya ise sadece excel kitabının adı değişik. A sütunu ile H sütunu (A-H) arasındaki veriler orjinal veriler. sistem verisi. 2. gönderdiğim dosyanın adı değişik ve satır verileri az, makro içermekte. asıl örnek dosya buydu. ancak 100 satırı bulmayan excel verisi olmasına rağmen dosya boyutu 1.4 mb görünüyor. Ben de düşündüm ki, dosya boyutundan dolayı incelenmek istenmemiş olabilir. Bu sebeple normal bir excel dosyası yükledim en son. bu dosyada 16B. farklı görünen dosyalar ancak değil. Özü itibari ile aynı olan dosyları bu sebeple 3 defa göndermiş oldum.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,269
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
O zaman son paylaştığınız dosyada 70001 nolu fiş için konuşursak bu fişin içinde 120.02 ve 191 hesapları varolduğu için J8:J13 hücrelerine "Ramada" yazılacak. Doğrumu anlıyorum.
 

walabi

Altın Üye
Katılım
22 Eylül 2012
Mesajlar
645
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
O zaman son paylaştığınız dosyada 70001 nolu fiş için konuşursak bu fişin içinde 120.02 ve 191 hesapları varolduğu için J8:J13 hücrelerine "Ramada" yazılacak. Doğrumu anlıyorum.

Evet doğru anlamışsınız kesinlikle, ancak daha önceki mesajlarımda düzensiz veri yapısından bahsetmiştim, 70001 nolu fişde buna bir örnek.

Nasıl, aslında j8-j9 arasının ayrı bir fişnoya, j10-j13 arasının ayrı bir fişnoya sahip olması gerekiyor. Ancak sistemin ( mevcut sistem LOGO ERP ) toplu muhasebeleştirme işleminden dolayı aynı fiş numarası içine birden fazla fiş girebilmekte. Bahsettiğiniz aralıkta, muhasebe olarak birbirinden bağımsız iki işlem var. Biri fatura, biri tahsilat. Bunların herbirinin aslında ayrı fişnolara sahip olması gerekiyor. Ancak sistemin toplu muhasebeleştirmesi nasıl işliyor bunu tam olarak bilmiyorum.

Ben bu sorunu şu şekilde aşmaya çalışmaktayım, ve sizde eğer kodlama yapacaksanız buna göre yapabilirsiniz. I sütununu Birleşim (Anahtar Kod ya da yeni fiş numarası sütunu ) olarak adlandırıp bu sütunu asıl fiş numarası yani dikkate alınacak sütün olarak belirleleyeceğim. Ve bu sütuna aşağıda belirteceğim sütunların satır verilerini birleştirerek yeni bir anahtar veri elde etmeye çalışacağım.

E sütunu Fiş No
C sütunu Tarih
D sütunu Fiş Türü
F sütunu Açıklama ( Yeni Sütun olarak Fatura No >>>bu satır içinde fatura olanları yeni bir sütuna ayırmam gerekiyor, bunu daha önceki bir kodlama ile yaptınız )

Yukarda bahsettiğim sütunların satır verileri her fiş nunarası için ortakdır. Bu satır verilerinin birleşiminden elde edeceğim yeni veri , örnek dosyada I (Birleşim) sütunu aslında sizden istediğim kodlamanın ana sütununu verecek.

Yazabileceğiniz kodlamada E sütunu değilde I sütununu baz alabilirsiniz. Siz E sütununa yani fiş no sütununa göre kodlama yaparsanız ben bunu daha sonra kendimce uyarlayacağım.
 
Üst