Düşeyara ile çoklu data çekmek

Katılım
25 Ocak 2010
Mesajlar
11
Excel Vers. ve Dili
Office 365
Selamlar, iyi günler.
Sorum şu; 1 sheet içerisinde aylık siparişlerin tüm datası var: Sipariş numarası, tarihi, içerisindeki farklı modeller, adetler ve fiyatlar. Yeni bir dosya olusturmam lazım burada kaynak verim sipariş numarası olacak ve bu sipariş numarasına göre 1. sheet içerisinden diğer datalaları cekmek istiyorum. Örn;

Sipariş numarası: 123456
Düşeyara ile cekmek isterken: 123456 kaynak alacagım ve bu siparişte yer alan tüm modeller satır satır görmek istiyorum ve adet, tarih, fiyat bilgilerini karsılarına yazdırmak istiyorum.
Şimdiden tşkler.
 
Katılım
25 Ocak 2010
Mesajlar
11
Excel Vers. ve Dili
Office 365
Selamlar, iyi günler.
Sorum şu; 1 sheet içerisinde aylık siparişlerin tüm datası var: Sipariş numarası, tarihi, içerisindeki farklı modeller, adetler ve fiyatlar. Yeni bir dosya olusturmam lazım burada kaynak verim sipariş numarası olacak ve bu sipariş numarasına göre 1. sheet içerisinden diğer datalaları cekmek istiyorum. Örn;

Sipariş numarası: 123456
Düşeyara ile cekmek isterken: 123456 kaynak alacagım ve bu siparişte yer alan tüm modeller satır satır görmek istiyorum ve adet, tarih, fiyat bilgilerini karsılarına yazdırmak istiyorum.
Şimdiden tşkler.
arkadaslar selam, var mı yardımcı olabilecek?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bu işlem DÜŞEYARA ile olur ama biraz zor olur (Ben yapamam maalesef). En ideal çözüm makrolu çözümdür.

Aşağıdaki kodları TAKİP sayfasının kod bölümüne (sayfa adına sağ tıklayıp kod görüntüle deyince açılan sayfaya) yapıştırırsanız, TAKİP sayfasında A2'den itibaren kod girdiğinizde listeleme işlemini yapar:

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A" & Rows.Count)) Is Nothing Then Exit Sub
Set s1 = Sheets("ANA TABLO")
son = s1.Cells(Rows.Count, "A").End(3).Row
If Target <> "" Then
    If WorksheetFunction.CountIf(s1.Range("A1:A" & son), Target) = 0 Then
        MsgBox "Girilen kod ANA TABLO'da bulunamadı", vbCritical
        Target.Select
        Exit Sub
    Else
        aranan = Target
        Application.EnableEvents = False
            Target = ""
            For i = 2 To son
                If s1.Cells(i, "A") = aranan Then
                    yeni = Cells(Rows.Count, "A").End(3).Row + 1
                    s1.Range("A" & i & ":E" & i).Copy Cells(yeni, "A")
                End If
            Next
        Application.EnableEvents = True
    End If
End If
End Sub
 
Katılım
25 Ocak 2010
Mesajlar
11
Excel Vers. ve Dili
Office 365
Bu işlem DÜŞEYARA ile olur ama biraz zor olur (Ben yapamam maalesef). En ideal çözüm makrolu çözümdür.

Aşağıdaki kodları TAKİP sayfasının kod bölümüne (sayfa adına sağ tıklayıp kod görüntüle deyince açılan sayfaya) yapıştırırsanız, TAKİP sayfasında A2'den itibaren kod girdiğinizde listeleme işlemini yapar:

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:A" & Rows.Count)) Is Nothing Then Exit Sub
Set s1 = Sheets("ANA TABLO")
son = s1.Cells(Rows.Count, "A").End(3).Row
If Target <> "" Then
    If WorksheetFunction.CountIf(s1.Range("A1:A" & son), Target) = 0 Then
        MsgBox "Girilen kod ANA TABLO'da bulunamadı", vbCritical
        Target.Select
        Exit Sub
    Else
        aranan = Target
        Application.EnableEvents = False
            Target = ""
            For i = 2 To son
                If s1.Cells(i, "A") = aranan Then
                    yeni = Cells(Rows.Count, "A").End(3).Row + 1
                    s1.Range("A" & i & ":E" & i).Copy Cells(yeni, "A")
                End If
            Next
        Application.EnableEvents = True
    End If
End If
End Sub

hocam cok sagol bu makro ile calıstı. böyle kullanacagım ancak daha basit bir formülle cektirme sansımız olsa daha iyi olur, makroya hakim değilim de sonradan edit vs zorlanırım. yine de tsk ederim eline saglık.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,496
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Öncelikle order no A sütununda yazılmış olmalı , boş olduğunda #YOK hatası verir.

Takip sayfasında b2 hücresine bu formülü yapıştırın

Kod:
=DÜŞEYARA(A2;'ANA TABLO'!A2:E10;2;YANLIŞ)
daha sonra sağ alt ucundan tutup sağa doğru sürükleyin satır aktarma tamamlanır.
Bu satır tamamlanınca order no harici hücrelerin hepsini seçin
sağ alt köşesinden tutup aşağı çekin
Bu şekilde bütün tablo aktarılmış olur.

http://s4.dosya.tc/server5/ln5j07/SIPARIS_TAKIP.rar.html

Dosya eklenmesi çözümün en hızlı şekilde gelmesini sağlar. Bu yol uğraştırıcı gibi , Sayın Yusuf44 ün verdiği kodlar saniyede yapıyor ve kesin doğruyu veriyor.
 
Son düzenleme:

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Benim bildiğim hiçbir basit formül bu işi yapamaz maalesef. En basit formül zaten DÜŞEYARA'dır ama bildiğiniz gibi bu formül sadece ilk bulduğu değerin bilgilerini getirir. Aynı koddan birden fazla varsa diğer satırları getirmez. DİZİ formülleriyle yapılabilir diye düşünüyorum ama onlar basit formüller değiller ve ben maalesef o formülleri kurmayı bilmiyorum.

Ayrıca formüller önceden belirlenmiş sınırlarda çalışırlar. Örneğin siz formülü 10. satıra kadar uygularsanız ama gelmesi gereken veri 11 taneyse son veri gelmez. Ya da siz formülde başvuru alanı olarak asıl listeden 1000 satır ayarlarsanız ama sonradan 1001. satıra da veri girerseniz muhtemelen formül yine tam doğru sonucu vermez. Ancak verdiğim kod her iki durumda da mevcut güncel verilere göre işlem yapar.

Başka bir sorun ise formüller sürekli olarak hesap yaptıkları için sayfadaki en ufak değişiklik formülün yeniden çalışmasını sağlar. Bu da verilerin çokluğuna göre işinizi yavaşlatır.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Öncelikle order no A sütununda yazılmış olmalı , boş olduğunda #YOK hatası verir.

Takip sayfasında b2 hücresine bu formülü yapıştırın

Kod:
=DÜŞEYARA(A2;'ANA TABLO'!A2:E10;2;YANLIŞ)
daha sonra sağ alt ucundan tutup sağa doğru sürükleyin satır aktarma tamamlanır.
Bu satır tamamlanınca order no harici hücrelerin hepsini seçin
sağ alt köşesinden tutup aşağı çekin
Bu şekilde bütün tablo aktarılmış olur.

http://s4.dosya.tc/server5/ln5j07/SIPARIS_TAKIP.rar.html

Dosya eklenmesi çözümün en hızlı şekilde gelmesini sağlar. Bu yol uğraştırıcı gibi , Sayın Yusuf44 ün verdiği kodlar saniyede yapıyor ve kesin doğruyu veriyor.
Sayın cems, aklınızda bulunsun: Düşeyara gibi formüllerde arama alanını sabitlemezseniz formüllü hücreler kopyalandığında arama alanı da kopyalanan hücreye göre değişir.

Örnek olarak eklediğiniz dosyada TAKİP sayfasında B2'deki formül:

Kod:
=DÜŞEYARA(A2;'ANA TABLO'!A[COLOR="red"]2[/COLOR]:E[COLOR="red"]10[/COLOR];2;YANLIŞ)
iken sabitleme yapmadan kopyaladığınız için B3'teki formül

Kod:
=DÜŞEYARA(A3;'ANA TABLO'!A[COLOR="Red"]3[/COLOR]:E[COLOR="red"]11[/COLOR];2;YANLIŞ)
olmuş. Bu da eğer A3'teki değer ANA TABLO'da A2 hücresindeyse bulunamayacağı anlamına gelmektedir.

Bunu önlemek için B2'deki formül

Kod:
=DÜŞEYARA(A2;'ANA TABLO'![COLOR="red"]$[/COLOR]A[COLOR="red"]$[/COLOR]2:[COLOR="red"]$[/COLOR]E[COLOR="red"]$[/COLOR]10;2;YANLIŞ)
Şeklinde olmalıydı.

Ayrıca soru sahibi aynı koddan birden fazla satırda varsa tüm satırların bilgisinin gelmesini istiyor. DÜŞEYARA ise sadece ilk bulduğu veriyi getiriyor.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,496
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Benim bildiğim hiçbir basit formül bu işi yapamaz maalesef. En basit formül zaten DÜŞEYARA'dır ama bildiğiniz gibi bu formül sadece ilk bulduğu değerin bilgilerini getirir. Aynı koddan birden fazla varsa diğer satırları getirmez. DİZİ formülleriyle yapılabilir diye düşünüyorum ama onlar basit formüller değiller ve ben maalesef o formülleri kurmayı bilmiyorum.

Ayrıca formüller önceden belirlenmiş sınırlarda çalışırlar. Örneğin siz formülü 10. satıra kadar uygularsanız ama gelmesi gereken veri 11 taneyse son veri gelmez. Ya da siz formülde başvuru alanı olarak asıl listeden 1000 satır ayarlarsanız ama sonradan 1001. satıra da veri girerseniz muhtemelen formül yine tam doğru sonucu vermez. Ancak verdiğim kod her iki durumda da mevcut güncel verilere göre işlem yapar.

Başka bir sorun ise formüller sürekli olarak hesap yaptıkları için sayfadaki en ufak değişiklik formülün yeniden çalışmasını sağlar. Bu da verilerin çokluğuna göre işinizi yavaşlatır.
Benim de dikkatimden kaçan da bu , benzer veri olma riskini düşünmedim. Diğer açıklama da netleştirmiş.
 
Katılım
25 Ocak 2010
Mesajlar
11
Excel Vers. ve Dili
Office 365
@yusuf44 ve @cems, cok sagolun arkadaşlar. tek koddan birkaç data çekmem gerektiği için şuan makro en temizi gibi görünüyor.

tşkler.
 

Suddedly

Altın Üye
Katılım
7 Ekim 2010
Mesajlar
210
Excel Vers. ve Dili
Excel 365
Excel 2019
Altın Üyelik Bitiş Tarihi
02-03-2028
Katılım
25 Ocak 2010
Mesajlar
11
Excel Vers. ve Dili
Office 365
Bu kadar usta varken ben haddim olmayarak bir sonuç çıkardım sanki takip sayfasında sipariş numarasını yukarıya yazdığınızda aşağıda listeleyen bir gelişmiş filtre. Umarım istediğiniz budur.



http://www.dosya.tc/server10/iu0kxz/SIPARIS_TAKIP.rar.html
@Suddedly hocam sagol eline saglık. inceledim, yanlıs görmediysem sadece A2ye yazdıgım sipariş numaralarını tek tek asagıda filtre ediyor ama sıradan A2-A3-A4 diye yazdıgımda bu calısmıyor, değil mi? benim takip dosyamda A sutununda tüm sipariş numaraların olması lazım, bu formul işimi görür daha kolay süzüp 3. bir sheet üzerinde bastan yazarak olusturmamı kolaylastırır. en kolay, stabil ve hızlı metodu bulmaya calısıyorum. cok sagol desteğin için.
 
Üst