• DİKKAT

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

döngü ile sayfa2 den sayfa 1 e şartlı aktarma

  • Konbuyu başlatan Konbuyu başlatan cems
  • Başlangıç tarihi Başlangıç tarihi

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,581
Excel Vers. ve Dili
office 2010 tr 32bit
Ekte , aslı 15000 satır olan ve sayfa1 den bazı hücre bilgisinin sayfa2 de şartı uyan hücresine döngü yolu ile aktarılması için örnek 50 satırlık bir uygulama vardır. Bu aktarmayı oluşturduğum 2 userform üzerinde birinden diğerine ctrl+c ctrl+v yolu ile elle aktarmayı düşünsem de bunun günler alacağını gördüğüm için üstadlarımızdan bu şartlı döngünün kodlar ile yapılmasında destek bekliyorum.

Örnekte otomatik gelen userformlar vardır , bütün formlar showmodal 0 dır , gezdirilebilir.
Problem userformunda daha geniş açıklama ve diğer aktarmada kullanılan iki userform ile aktarılma şekli denenecek şekilde vardır. Userformlar üstüste otomatik geldiğinden birbiri üstünde kaydırılmalıdır.

Bu örnekteki sütunlar aslının birebir aynı yerinde olup , kodlar isteneni verdiğinde 15 000 satırlık ana listeye uygulamayı düşünüyorum .

Şimdiden teşekkürler


http://s6.dosya.tc/server8/0mxfhy/kucultulmus-dongu-kalibi.rar.html

---Dosya benim hatalı link vermem yüzünden silinmiş , tekrar yüklendi ve link yenilendi ---
 
Son düzenleme:
Merhaba,

Sorunuzu anlayamadım. Tekrar gözden geçirip örnek vererek açıklar mısınız. Yapılacak işlemi anlamadığım gibi form üzerinden mi yoksa ayrıca bir işlem mi yapılacak onu da anlayamadım.

.
 
Merhaba,

Sorunuzu anlayamadım. Tekrar gözden geçirip örnek vererek açıklar mısınız. Yapılacak işlemi anlamadığım gibi form üzerinden mi yoksa ayrıca bir işlem mi yapılacak onu da anlayamadım.

.

Merhaba sayın Ömer ;

Yapılacak aktarma işlemi sadece sayfa üzerinden yapılacak.
İşlem 1 kere yapılacak
İşlem sayfa 2 E sütunundaki ana kod ile sayfa 1 de H sütunundaki ana kod aynı olduğunda
aynı satır için sayfa 2 deki C D E F G hücrelerindeki bilgiyi Sayfa1 de L M N O P sütunlarına aktaracak.

Formlar örneklemek içindi ...
 
Sayfa1 E11 ve E12 aynı kod. Bu iki kodu Sayfa2 de aradığı zaman ikisi için aynı değerleri bulup Sayfa2 den Sayfa1 e 2 kere yazmış olacağız. Bunun gibi mükerrer veri oldukça fazla.

Bu bölümde bu şekilde mi olacak?

Deneyiniz.

Kod:
Sub Listele()
    
    Dim S2 As Worksheet, i As Long, c As Range, sat As Long
    
    Set S2 = Sheets("Sayfa2")
    
    Application.ScreenUpdating = False
    
    Sheets("Sayfa1").Select
    Range("L2:P" & Rows.Count).ClearContents
    
    sat = 2
    For i = 2 To Cells(Rows.Count, "E").End(xlUp).Row
        Set c = S2.[H:H].Find(Cells(i, "E"), , xlValues, xlWhole)
        If Not c Is Nothing Then
            S2.Cells(c.Row, "C").Resize(1, 5).Copy Cells(sat, "L")
            sat = sat + 1
        End If
    Next i
    
    Application.ScreenUpdating = True
    
End Sub

.
 
Sayfa1 E11 ve E12 aynı kod. Bu iki kodu Sayfa2 de aradığı zaman ikisi için aynı değerleri bulup Sayfa2 den Sayfa1 e 2 kere yazmış olacağız. Bunun gibi mükerrer veri oldukça fazla.

Bu bölümde bu şekilde mi olacak?

Deneyiniz.

Ömer Bey,
Sayfa 2 H sütununu benzersiz liste olarak düşünerek ;
Sayfa 1 E11 ve E12 de mükerrer olmasının sebebi J11 ve J12 de iki farklı kişinin aynı firma ile farklı tarihlerde görüşmüş olması. Bu nedenle satırlar bu isimler hariç mükerrer olmak durumunda ve 2 kere yazmamız gerekecek.

Sanırım bu nedenle bir kayma var ,
A2 ile P2 aynı ya da P2 boş çıkması gerekirken ;
P15 ten P16 ya geçerken bir kayma oluşuyor. Bunu görmek için Q sütununda =EĞER(P2=A2;DOĞRU;"KAYMIŞ ") kullandım, ancak nedenini keşfedemedim .Bu kayma yüzünden P16dan sonrası sürekli bir satır yukarıya yazıyor. Eğer bunun sebebini halledebilirsek , kopya bir analistede deneyeceğim.

Bunun dışında diğer veriler olması gereken yerde , kayma düzelirse istediğim tam bu :)

Bir diğer sorun ; Client List formunda açılırlistede firma ismi aynı ise ( mesela 25 ve bundan 10 kadar var ) bir sonraki aynı ad için altındaki detayı değiştirmiyor. Bunu benzersizleştirip aşmak için yanına nokta koydum 25. 25.. gibi ama bu da doğru bir çozum değil , sizin bir öneriniz var mı ?
 
Son düzenleme:
Açıklamanızı anlamadım.

Sayfa2 de tekrarsız liste olduğu için ve aranan değerler aynı olduğunda, bu değerlerin Sayfa2 den bulduğu tek değer olacağı için aynı değerlerin gelmesi normal.

Basit mantıkla

L2 hücresine yazıp yana ve alt satırlara kopyalayın. Bir nevi düşeyara ile verilerin gelmesini istiyorsunuz sanırım diye anladım. Bunu da kod yapıyor. Hatayı anlamadım.

Kodların çalışması formül ile aynı mantık. Formülden gidip koda da çevirebiliriz.
Kod:
=İNDİS(Sayfa2!C:C;KAÇINCI($E2;Sayfa2!$H:$H;0))

.
 
Açıklamanızı anlamadım.

Sayfa2 de tekrarsız liste olduğu için ve aranan değerler aynı olduğunda, bu değerlerin Sayfa2 den bulduğu tek değer olacağı için aynı değerlerin gelmesi normal.

Buraya kadar mutabıkız , sütunların bazısını rahat görmek için gizledim. İndiste C:C değil A:A olduğunda doğru yere bakmış olacak, L2 den kopyalamaya gerek yok o sütun doğru.
Yani şu şekilde kontrol etmek gerekiyor
Kod:
=İNDİS(Sayfa2!A:A;KAÇINCI($E2;Sayfa2!$H:$H;0))
ancak yine 15ci satırda kayma oluşuyor

Basit mantıkla

L2 hücresine yazıp yana ve alt satırlara kopyalayın. Bir nevi düşeyara ile verilerin gelmesini istiyorsunuz sanırım diye anladım. Bunu da kod yapıyor. Hatayı anlamadım.

Kodların çalışması formül ile aynı mantık. Formülden gidip koda da çevirebiliriz.
Kod:
=İNDİS(Sayfa2!C:C;KAÇINCI($E2;Sayfa2!$H:$H;0))

.

Kaymayı 2 şekilde gösteren dosyayı ekledim , bunu hallettikten sonra userform ile ilgili duyarsızlık sorusuna ( bir önceki mesajda düzelterek yazdığım) geçebiliriz sanıyorum.

http://s9.dosya.tc/server2/mpr64p/kucultulmus-dongu-kalibi-kayma_ornekli.rar.html
 
Tüm tabloda Duns numaraları aynı olduğunda Company_Name lerin numarası artmadan aynı rakamı almış. Sadece E17 ve E18 de değişmiş. Bunun nedeni nedir?
Ve biz neden A sütununu dikkate alıyoruz. Mesajlarınızda Sayfa1 de E ile Sayfa2 deki H sütunlarını karşılaştırmamız gerektiğini yazmışsınız. A sütunu ile bir bağlantı kuramadım.

.
 
Tüm tabloda Duns numaraları aynı olduğunda Company_Name lerin numarası artmadan aynı rakamı almış. Sadece E17 ve E18 de değişmiş. Bunun nedeni nedir?
Ve biz neden A sütununu dikkate alıyoruz. Mesajlarınızda Sayfa1 de E ile Sayfa2 deki H sütunlarını karşılaştırmamız gerektiğini yazmışsınız. A sütunu ile bir bağlantı kuramadım.

.

İşlem 1 kere yapılacak
İşlem sayfa 2 E sütunundaki ana kod ile sayfa 1 de H sütunundaki ana kod aynı olduğunda
aynı satır için sayfa 2 deki C D E F G hücrelerindeki bilgiyi Sayfa1 de L M N O P sütunlarına aktaracak.

Benim ifade hatam olmuş , saatlerdir ekranda olunca şeşi beş görmeye başlamışım.
Doğru olan şuydu ...

İşlem 1 kere yapılacak
İşlem sayfa 2 H sütunundaki ana kod ile sayfa 1 de E sütunundaki ana kod aynı olduğunda
aynı satır için sayfa 2 deki C D E F G hücrelerindeki bilgiyi Sayfa1 de L M N O P sütunlarına aktaracak.

Sayfa1 E17 ve E18 deki mükerreriyet, aynı firma ile iki ayrı personel farklı zamanlarda görüşmüş bu yüzden var, bunun dışında E20 ile 21 , E24 de E27 ye kadar , E30 da E31 ,
E33 de E44 e kadar mükerrer.

L sütunu konuyu karıştıracak , bunu gözardı etsek de olur , klasik olarak DUNS_name ile Company_name ya aynı çıkar veya kartı giren tarafından yazılmamıştır. Önemi yok.

özür dilerim ...
 
Sonuç olarak;

İşlem sayfa 2 H sütunundaki ana kod ile sayfa 1 de E sütunundaki ana kod aynı olduğunda
aynı satır için sayfa 2 deki C D E F G hücrelerindeki bilgiyi Sayfa1 de L M N O P sütunlarına aktaracak.

Benim anladığım kadarıyla bu açıklamanızda ki işlemi kodlar yapıyor. Eksik olan nedir? Size göre düzeltilmiş halinin yazılı açıklaması nedir? Örnek; E17 ve E18 den ilerlersek bu bölümlere Sayfa2 den hangi satırlar gelecek ve neden?

.
 
Sonuç olarak;



Benim anladığım kadarıyla bu açıklamanızda ki işlemi kodlar yapıyor. Eksik olan nedir? Size göre düzeltilmiş halinin yazılı açıklaması nedir? Örnek; E17 ve E18 den ilerlersek bu bölümlere Sayfa2 den hangi satırlar gelecek ve neden?

.


Sayın Ömer ,
Kodlarınızda şu şekilde değişiklik yaptım ,ayrıca E17-18 arasında DUNS_Number aynı olduğu halde Company_Name farklı yazılmış onu yakaladım, sonuçta aktarma doğru olarak yapıldı

Sub Listele()

Dim S2 As Worksheet, i As Long, c As Range, Adr As String, sat As Long

Set S2 = Sheets("Sayfa2")

Application.ScreenUpdating = False

Sheets("Sayfa1").Select
Range("L2:Q" & Rows.Count).ClearContents

sat = 2
For i = 2 To Cells(Rows.Count, "H").End(xlUp).Row
With S2.[H:H]
Set c = .Find(Cells(i, "E"), , xlValues, xlWhole)
If Not c Is Nothing Then
Adr = c.Address
Do
S2.Cells(c.Row, "C").Resize(1, 5).Copy Cells(sat, "L")
sat = sat + 1
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> Adr
End If
End With
Next i

Application.ScreenUpdating = True

End Sub

.

Ekte doğrulanmış liste çıkaran örnek ekledim, ancak analiste üzerinde yarın deneme yapacağım , kafam durdu. Sonuçta istediğimi yaptı kodlar ancak niye yaptığını hala algılayamadım ,sabaha düzelirim umuyorum :)

Size çok zahmet verdim , dikkatiniz ve soru ile yönlendirmelerinizin çok faydası oldu , çok teşekkür ederim .

Userformda açılır liste birden fazla aynı ad olduğunda ilk olanı algılıyor sonrakilere duyarsız kalıyor ve altındaki detayı değiştirmiyor. Bunu aşmak için firma adı sağına her seferinde artan miktarda nokta koyarak benzersizleştirmeye çalıştım ama bu kaçak güreşmek açıkçası , kalıcı bir şekilde açılır liste bir firma ismini tekrar gördüğünde nasıl duyarlılaştırılabilir ; sanırım bu da sonraya kalan bir konu oldu.

Siz bu kod savaşlarına nasıl dayanıyorsunuz ?

Saygılar :)

http://s9.dosya.tc/server2/t7f7g3/SON_COZULEN_kucultulmus-dongu-kalibi.rar.html
 
Zaman içerisinde alışıyorsunuz.

Sorunuza gelirsek;

Bul kodunda aranan değer ilk bulduğu satır numarasına göre işlem yaptığı için "kaçıncı fonksiyonu gibi" istediğiniz sonuçları alamıyorsunuz.

Bunun yerine

ComboBox1.ListIndex + 2 kullanabilirsiniz.

Private Sub CommandButton1_Click() de Find komutunu kaldırarak,

sat = ComboBox1.ListIndex + 2

TextBox1 = Cells(sat, "a")
TextBox2 = Cells(sat, "b")
.
.
.

şeklinde devam ederek kodu tamamlayın. Bu şekilde combobox1 deki seçim yaptığınız satır indisine göre işleme devam edersiniz.

.
 
Zaman içerisinde alışıyorsunuz.

Sorunuza gelirsek;

Bul kodunda aranan değer ilk bulduğu satır numarasına göre işlem yaptığı için "kaçıncı fonksiyonu gibi" istediğiniz sonuçları alamıyorsunuz.

Bunun yerine

ComboBox1.ListIndex + 2 kullanabilirsiniz.

Private Sub CommandButton1_Click() de Find komutunu kaldırarak,

sat = ComboBox1.ListIndex + 2

TextBox1 = Cells(sat, "a")
TextBox2 = Cells(sat, "b")
.
.
.

şeklinde devam ederek kodu tamamlayın. Bu şekilde combobox1 deki seçim yaptığınız satır indisine göre işleme devam edersiniz.

.

Sayın Ömer ;

Dün benim yüzümden zaman bilgi ve göz nurunuzu uzun süre döktüğünüz çalışmayı bugün ana orijinal listeye uyguladım , hem tamamı ile doğru çekiş yaptı hem userform kontrolünde ek verdiğiniz yöntemle duyarsızlık problemi de ortadan kalktı.

Bu noktadan sonra kişiler ve bağlantılarını sağa doğru yine döngü ile ama mümkün olduğunca sizden bu çalışma esnasında öğrendiğim yöntemle çözmeye çalışacağım .

Keşke elimden burada sonsuz teşekkür etmekten daha öte bir yöntem gelebilse ; mesela huzur ile düşük ateşte demlenmiş dumanı üstünde bir bardak demli çay :)

Hatalarıma gösterdiğiniz metanet ve sabır dolu doğru yardımınızdan Allah razı olsun :)
 
Önemli değil. Allah hepimizden razı olsun.
 
Geri
Üst