dizilerle aynı isimdeki veriden istediğimizi seçmek

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Merhaba Excel Dostları,
Ekte sunduğum bir dizi çalışmamda ,
1. veri artınca hız düşüyor , hızını artırmanın bir yolu varmı yoksa scripting dictionary ile de yapılabilirmi
2. örnek dosyada userform1 ac Butonuna tıklalayın ,gelen arayüzdeki combobox1 den "Ali Ayter"i seçip "Detay Göster userform2 de" butonuna basınca ,
açılan userform2 penceresinde ali ayter lerin listelendiğini göreceksiniz .Sorum şu Diyelim ki listede 3. sıradaki ali ayteri seçtikten sonra çift tıklayın.
Gelen arayüzde ki nesnelerde değişiklik yapmak istiyorum mesela miktar nesnesi olan textbox2 nin 240 olan değerini 444 olarak değiştirdikten sonra değiştir butonuna basıp gerekli değişikliği sayfa 1 de yapabilmeliyim .işte tam bu "DEĞİŞTİR"komutlarına ihtiyacım var
Biraz uzun oldu galiba ama ancak bu şekilde sıkıntımı ifade edebildim, desteğinizi bekliyorum , teşekkürler.
 

Ekli dosyalar

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Ziynettin eline emeğine sağlık kardeşim çok güzel olmuş ayrıca scripting dictionary nesnesi ile gayet hızlı,
Tabi ben hala sripting dictionary i çözemedim gayret ediyorum ilerde öğrenirim inş.
Ben şimdi işimden fırsat buldukça senin yazmış olduğun bu kodu anlamaya öğrenmeye ve kendi dosyama uyarlamaya çalışacağım.
Aslında isteğim 2 form ile idi ama ben senin yazdığın kodu bakalım 2 forma uyarlıyabilecekmiyim zaman alacak tabi..
Niye 2 form derseniz ? Gerçek projemde ilk form da yer sıkışıklığı sebebiyle . çok teşekkürler sağlıkla kalın ...
 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Merhaba,
üstadım eline , emeğine sağlık tam istediğim gibi hem hızlı hemde 2 form üzerinde olmuş .
CreateObject("scripting.dictionary") nesnesi hakkında Korhan beyin de çok değerli katkıları ve önerileri olmuştu ve fırsat buldukçada öğrenmeye çalışıyorum . birde sizden de CreateObject("scripting.dictionary") nesnesi hakkında bir başvuru kaynağı (türkçe olan) veya bir dipnot öneriniz olursa sevinirim ve benim gibi bunu nasıl öğreneceğim diyenlere birfikir verir , teşekkürler .Sağlıkla Kalın.
 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Tekrar Merhaba ,
Ziynettin bey , userform2 de listbox1 in ilk satır ve sütunlarına , sayfa1 in ilk satırdaki verilei yani , adı soyadı - cep - miktarı nıda yazdığınız kod'a ilave edebilirmisiniz
 
Katılım
26 Ağustos 2020
Mesajlar
20
Excel Vers. ve Dili
Excel Vers. ve Dili Ofis 2016 TR 64 Bit
arkadaşlar altın üyeler haricinde kimseye destek ve ya verilmiyor mu acaba ?
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,104
Excel Vers. ve Dili
office2010
Sutun başlıkları listbox da sutun başlığı olacak ise dizilerde bildiğim kadarıyla olmuyor.

Önerim label ile kendidinize göre düzenleyiniz.
 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Benim mesaj 1 deki dosyama bakar mısınız orada ben yapmıştım ama veri artınca hız proplemi yaşamıştım,1 mesaja bir kez daha bakar mısınız orada başlıkları yazılı
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,104
Excel Vers. ve Dili
office2010
Başlıkları 1. satır olarak almışsınız.

Useform2 initialize yordamındaki kod revize edildi.



Kod:
Private Sub UserForm_Initialize()
    With UserForm1
    If .ComboBox1.ListIndex <> -1 Then
        Dim a()
        Set s1 = Sheets("Sayfa1")
        son = s1.Cells(Rows.Count, 1).End(3).Row
        If son < 2 Then Exit Sub
        a = s1.Range("A1:C" & son).Value
        Dim b()
        ReDim b(1 To 4, 1 To UBound(a))
        say = 1
        b(1, say) = 1
        b(2, say) = a(1, 1)
        b(3, say) = a(1, 2)
        b(4, say) = a(1, 3)
        aranan = .ComboBox1.Value
            For i = 1 To UBound(a)
                If aranan = a(i, 1) Then
                    say = say + 1
                    ReDim Preserve b(1 To 4, 1 To say + 1)
                    b(1, say) = i
                    b(2, say) = a(i, 1)
                    b(3, say) = a(i, 2)
                    b(4, say) = a(i, 3)
                End If
            Next i
        If say > 0 Then
            ListBox1.Column = b
        End If
    End If
    End With
ListBox1.ColumnCount = 4
ListBox1.ColumnWidths = "30;80;70;90"
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,327
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Listbox+Başlık görünümü için linki inceleyebilirsiniz.

 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Sn.Ziynettin by ve Korhan by teşekkürler , dosyama uyarladım .
Acaba diyorum combobox1 den veri seçerken alfabetik sıraya göre düzenlenebilir mi ?comboboxta istediğim veriyi buluncaya kadar çok zaman kaybediyorum.(örnek dosyada veri az ama gerçek dosyada çok fazla)
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,553
Excel Vers. ve Dili
Pro Plus 2021
Kod:
Private Sub UserForm_Initialize()
    Dim a(), s1 As Worksheet, son&, i&
    Set s1 = Sheets("Sayfa1")
    son = s1.Cells(Rows.Count, 1).End(3).Row
    If son < 2 Then Exit Sub
    a = s1.Range("A1:A" & son).Value
    
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a)
            .Item(a(i, 1)) = ""
        Next i
        a = .keys
    End With
    
    QuickSort a, LBound(a), UBound(a)
    ComboBox1.List = a
End Sub

Sub QuickSort(vArray As Variant, arrLbound As Long, arrUbound As Long)
    
    Dim pivotVal As Variant
    Dim vSwap    As Variant
    Dim tmpLow   As Long
    Dim tmpHi    As Long
 
    tmpLow = arrLbound
    tmpHi = arrUbound
    pivotVal = vArray((arrLbound + arrUbound) \ 2)
 
    While (tmpLow <= tmpHi) 'divide
        While (StrComp(vArray(tmpLow), pivotVal, vbTextCompare) = -1 And tmpLow < arrUbound)
            tmpLow = tmpLow + 1
        Wend
 
        While StrComp(pivotVal, vArray(tmpHi), vbTextCompare) = -1 And tmpHi > arrLbound
            tmpHi = tmpHi - 1
        Wend
 
        If (tmpLow <= tmpHi) Then
            vSwap = vArray(tmpLow)
            vArray(tmpLow) = vArray(tmpHi)
            vArray(tmpHi) = vSwap
            tmpLow = tmpLow + 1
            tmpHi = tmpHi - 1
        End If
    Wend
    If (arrLbound < tmpHi) Then QuickSort vArray, arrLbound, tmpHi 'conquer
    If (tmpLow < arrUbound) Then QuickSort vArray, tmpLow, arrUbound 'conquer
End Sub
 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
İyi ki varsınız ! Sayenizde istediğimiz kodlarla işlerimiz kolaylaşıyor , çok teşekkürler veyselemre .

Şu ana kadar bana göre en karmaşık kod gibi , hem anlamaya hemde kendi dosyama uyarlamaya çalışacağım , zaman alacak

uyarlayacağım dosya da sütun sayısı 56 ...

Lütfen yanıtlarla ilgili geri dönüş yapınız. Dönüş yapılmayan veya geç dönüş yapılan sorularla tekrar ilgilenmiyorum.<veyselemre

Örnek dosya da yazdığınız kodu anlayıp dosyama uyarlamam zaman alacak çünki aynı zamanda yazılan kodu öğrenmeye çalışıyorum da , o yüzden desteğinizi kesmeyeceğinizi ümit ediyorum, saygılarımla
 
Son düzenleme:

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
İyi ki varsınız ! Sayenizde istediğimiz kodlarla işlerimiz kolaylaşıyor , çok teşekkürler veyselemre .

Şu ana kadar bana göre en karmaşık kod gibi , hem anlamaya hemde kendi dosyama uyarlamaya çalışacağım , zaman alacak

uyarlayacağım dosya da sütun sayısı 56 ...

Lütfen yanıtlarla ilgili geri dönüş yapınız. Dönüş yapılmayan veya geç dönüş yapılan sorularla tekrar ilgilenmiyorum.<veyselemre

Örnek dosya da yazdığınız kodu anlayıp dosyama uyarlamam zaman alacak çünki aynı zamanda yazılan kodu öğrenmeye çalışıyorum da , o yüzden desteğinizi kesmeyeceğinizi ümit ediyorum, saygılarımla
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,327
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Öğrenme aşamasında karışık kodlar yerine daha basit yöntemleri denemenizi tavsiye ederim.

Ben olsam önce sayfada excelin sıralama yöntemini kullanıp sonra verileri Combobox ya da başka nesneye yüklerim. Böylece hem kodu sadeleştirmiş hemde hızlı şekilde sonuca gitmiş olursunuz. Bu siralama kodunu da makro kaydet yöntemiyle elde edebilirsiniz.
 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Korhan Bey ,duygularıma tercüman oldunuz . 2-3 saattir nerdeyse hindi gibi düşünüp veysel emrenin yazdığı kodu anlamaya ,dosyama uyarlamaya çalışıyorum baktım olmadı tekrar acaba dedim excel web tr ye bakınca sizin mesajı görünce sevindim . veysel emrenin kodu maalesef dosyama şimdilik anlayamadığım için entegre edemedim.
Korhan Bey , dediğiniz yol dan gitmeye çalışacağım ama yapamazsam artık müracat Korhan bey diyeceğim , teşekkürler
 

şehiriçi

Altın Üye
Katılım
1 Ağustos 2013
Mesajlar
562
Excel Vers. ve Dili
Ofis 2016 TR 32 Bit
Korhan bey mümkünse ben sıralamayı sayfanın içinde değil yani sayfada değişiklik yapmadan ,sayfanın yapısını bozmadan( çünki tarih sütunu falan var)
bunu CreateObject("scripting.dictionary") yöntemi ile comboboxa A_Z ye göre sıralama yapılamaz mı?Eğer ayrı bir sayfada önce sırala derseniz her yeni veri girince birde onu ayrı sayfaya yazmak istemiyorum .
Uzatmıyayım , Veyselemre Beyin yöntemi gibi ama comboboxa yüklerken A_Z ye sıralamak için CreateObject("scripting.dictionary") ile yapabilirmisiniz rica etsem,Ziynettin Bey bunu CreateObject("scripting.dictionary") yöntemi ile 2 mesaj da yapmış ama A_Z ye sıralamıyor
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,327
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bence Dictionary nesnesinden önce öğrenmeniz gereken çok konu var. Siz olayın ortasından bodoslama dalmışsınız. Bu şekilde sağlıklı ilerleyemezsiniz.

Öğrenmek için bol bol araştırma yapmalısınız. Nette onlarca video var. İzleyip uygulamalı yaparak kendinizi geliştirebilirsiniz. Bu işler biraz emek ve zaman istiyor.
 
Üst