Eğer indis formülü (yardım)

Katılım
10 Ağustos 2017
Mesajlar
159
Excel Vers. ve Dili
Excel 2017
Türkçe
Altın Üyelik Bitiş Tarihi
11-03-2023
Merhaba ,

Ekte yer alan dosyada DATA isimli sayfadan TAKSİ ve EK SERVİS isimli verilerin EK SERVİS & TAKSİ isimli sayfaya atmasını istiyorum. Bu konuda bana yardımcı olabilir misiniz

İyi çalışmalar
 

Ekli dosyalar

Son düzenleme:

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Örnek dosyanızda "başlıklar birebir aynı" demişsiniz ama sadece Sıra, Tarih, Kimin servisi ve Servis numarası başlıkları data sayfasında da aynen bulunuyor. Diğer sütunların başlıkları farklı.

Dosyanızda nasıl bir çözüm istiyorsunuz? Nereye ne yapıldığında nerede ne olması gerekiyor?
Dosyanızda örnek birkaç çözüm paylaşırsanız iyi olur.
 
Katılım
10 Ağustos 2017
Mesajlar
159
Excel Vers. ve Dili
Excel 2017
Türkçe
Altın Üyelik Bitiş Tarihi
11-03-2023
Örnek dosyanızda "başlıklar birebir aynı" demişsiniz ama sadece Sıra, Tarih, Kimin servisi ve Servis numarası başlıkları data sayfasında da aynen bulunuyor. Diğer sütunların başlıkları farklı.

Dosyanızda nasıl bir çözüm istiyorsunuz? Nereye ne yapıldığında nerede ne olması gerekiyor?
Dosyanızda örnek birkaç çözüm paylaşırsanız iyi olur.
Yusuf bey merhaba,

Belirttiğiniz gibi tam açıklayıcı olmamış dosya :( Şimdi eki düzelttim. Turuncuya boyadım başlıkları. ve numaralar verdim sutunlara. Başlıklarıda aynı yaptım isim olarak. Şimdi daha net anlaşılır sanırım
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aaşğıdaki kodları bir modüle kopyalayıp deneyiniz. Kodlar Data sayfasındaki her satırı ayrı ayrı kontrol eder, Q sütununda Ek Servis ya da Taksi yazan satırdaki bilgileri diğer sayfaya belirttiğiniz şekilde aktarır. Makronun doğru çalışması için Q sütununa veriler aynen kodda yazıldığı gibi dirilmelidir, büyük-küçük harf duyarlıdır:

Kod:
Sub aktar()
Set s1 = Sheets("DATA")
Set s2 = Sheets("EK SERVİS & TAKSİ")

son = WorksheetFunction.Max(3, s1.Cells(Rows.Count, "Q").End(3).Row)
For i = 3 To son
    If s1.Cells(i, "Q") = "Taksi" Or Cells(i, "Q") = "Ek Servis" Then
        yeni = s2.Cells(Rows.Count, "A").End(3).Row + 1
        s2.Cells(yeni, "A") = s1.Cells(i, "A")
        s2.Cells(yeni, "B") = s1.Cells(i, "B")
        s2.Cells(yeni, "C") = s1.Cells(i, "U")
        s2.Cells(yeni, "F") = s1.Cells(i, "R")
        s2.Cells(yeni, "G") = s1.Cells(i, "S")
        s2.Cells(yeni, "H") = s1.Cells(i, "T")
        s2.Cells(yeni, "I") = s1.Cells(i, "C")
        s2.Cells(yeni, "J") = s1.Cells(i, "D")
        s2.Cells(yeni, "L") = s1.Cells(i, "X")
        
        With s2.Range("A" & yeni & ":L" & yeni).Font
            .Name = "Calibri"
            .Size = 8
        End With
    
        s2.Range("A" & yeni & ":L" & yeni).Borders.LineStyle = xlContinuous
        s2.Range("A" & yeni & ":L" & yeni).Borders.Weight = xlHairline
        
        s1.Cells(yeni, "B").NumberFormat = "dd/mm/yyyy"
    
        With s2.Range("A" & yeni & ":L" & yeni)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
        
    End If
Next

End Sub
 
Katılım
10 Ağustos 2017
Mesajlar
159
Excel Vers. ve Dili
Excel 2017
Türkçe
Altın Üyelik Bitiş Tarihi
11-03-2023
Aaşğıdaki kodları bir modüle kopyalayıp deneyiniz. Kodlar Data sayfasındaki her satırı ayrı ayrı kontrol eder, Q sütununda Ek Servis ya da Taksi yazan satırdaki bilgileri diğer sayfaya belirttiğiniz şekilde aktarır. Makronun doğru çalışması için Q sütununa veriler aynen kodda yazıldığı gibi dirilmelidir, büyük-küçük harf duyarlıdır:

Kod:
Sub aktar()
Set s1 = Sheets("DATA")
Set s2 = Sheets("EK SERVİS & TAKSİ")

son = WorksheetFunction.Max(3, s1.Cells(Rows.Count, "Q").End(3).Row)
For i = 3 To son
    If s1.Cells(i, "Q") = "Taksi" Or Cells(i, "Q") = "Ek Servis" Then
        yeni = s2.Cells(Rows.Count, "A").End(3).Row + 1
        s2.Cells(yeni, "A") = s1.Cells(i, "A")
        s2.Cells(yeni, "B") = s1.Cells(i, "B")
        s2.Cells(yeni, "C") = s1.Cells(i, "U")
        s2.Cells(yeni, "F") = s1.Cells(i, "R")
        s2.Cells(yeni, "G") = s1.Cells(i, "S")
        s2.Cells(yeni, "H") = s1.Cells(i, "T")
        s2.Cells(yeni, "I") = s1.Cells(i, "C")
        s2.Cells(yeni, "J") = s1.Cells(i, "D")
        s2.Cells(yeni, "L") = s1.Cells(i, "X")
        
        With s2.Range("A" & yeni & ":L" & yeni).Font
            .Name = "Calibri"
            .Size = 8
        End With
    
        s2.Range("A" & yeni & ":L" & yeni).Borders.LineStyle = xlContinuous
        s2.Range("A" & yeni & ":L" & yeni).Borders.Weight = xlHairline
        
        s1.Cells(yeni, "B").NumberFormat = "dd/mm/yyyy"
    
        With s2.Range("A" & yeni & ":L" & yeni)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
        
    End If
Next

End Sub
Yusuf bey teşekkür ederim ilginiz için ancak datayı başkalarıda kullanacağı için direk formül ile çözmek daha iyi olur bizim için. İlerde sayfaya ek sütun ekleme vs. yapılırsa bende kod mantığını bilmediğim için zorluk olur. Formül bazında yardımcı olma imkanınız var mı acaba

İyi çalışmalar
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Kod:
Sub aktar()
Makromuzun adı aktar

Kod:
Set s1 = Sheets("DATA")
Set s2 = Sheets("EK SERVİS & TAKSİ")
Dosyadaki sayfalara s1 ve s2 kısa adlarını atıyoruz.

Kod:
son = WorksheetFunction.Max(3, s1.Cells(Rows.Count, "Q").End(3).Row)
s1 yani Data sayfasında Q sütununda son dolu hücrenin satır numarasın son değişkenine atıyoruz.


Kod:
For i = 3 To son
i değişkenine 3'ten (çünkü s1 yani Data sayfasında verilerimiz 3. satırda başlıyor) son değişkenine kadar birer arttırarak değer verdiriyoruz.

Kod:
    If s1.Cells(i, "Q") = "Taksi" Or Cells(i, "Q") = "Ek Servis" Then
Koddan da anlayabileceğiniz gibi Data sayfasının Q sütunu Taksi ya da Ek Servis ise aşağıdaki işlemleri yap diyoruz:

Kod:
        yeni = s2.Cells(Rows.Count, "A").End(3).Row + 1
s2 yani Ek servis sayfasında A sütunundaki ilk boş satır numarasını buluyoruz.

Kod:
        s2.Cells(yeni, "A") = s1.Cells(i, "A")
s2 yani Ek servis sayfasındaki ilk boş satırın A hücresine, s1 yani Data sayfasının kontrol edilen satırdaki A hücresinin verisini yazdırıyoruz.

Kod:
        s2.Cells(yeni, "B") = s1.Cells(i, "B")
        s2.Cells(yeni, "C") = s1.Cells(i, "U")
        s2.Cells(yeni, "F") = s1.Cells(i, "R")
        s2.Cells(yeni, "G") = s1.Cells(i, "S")
        s2.Cells(yeni, "H") = s1.Cells(i, "T")
        s2.Cells(yeni, "I") = s1.Cells(i, "C")
        s2.Cells(yeni, "J") = s1.Cells(i, "D")
        s2.Cells(yeni, "L") = s1.Cells(i, "X")
Aynı işlemlerin devamı, Data sayfasının ilgili sütunundan Ek servis sayfasının ilgili sütununa vevri aktarımı.

Kod:
        With s2.Range("A" & yeni & ":L" & yeni).Font
            .Name = "Calibri"
            .Size = 8
        End With
Ek servis sayfasının veri girilen satırının A:L (Çünkü Ek servis sayfasındaki veriler A:L arasında) arasındaki yazı tipini Calibri, boyutunu 8 yapıyoruz.

Kod:
        s2.Range("A" & yeni & ":L" & yeni).Borders.LineStyle = xlContinuous
        s2.Range("A" & yeni & ":L" & yeni).Borders.Weight = xlHairline
EK servis sayfasının ilgili satırının A:L arasındaki hücrelere noktalı kenarlık ekliyoruz.

Kod:
        s1.Cells(yeni, "B").NumberFormat = "dd/mm/yyyy"
Burda s1 demişim ama aslında s2 olmalı.
Kod:
        s2.Cells(yeni, "B").NumberFormat = "dd/mm/yyyy"
Ek servis sayfasının tarih (B) sütunundaki veriyi tarih biçimine getiriyoruz.

Kod:
        With s2.Range("A" & yeni & ":L" & yeni)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
Ek servis sayfasının ilgili satırının A:L arasındaki verileri yatay ve dikey olarak ortaya hizalıyoruz

Kod:
    End If
Next

End Sub
Daha önce açtığımız if ve next if satırlarını kapatıp makroyu sonlandırıyoruz.

Makroya buradan başlayabilirsiniz bence :)
 
Katılım
10 Ağustos 2017
Mesajlar
159
Excel Vers. ve Dili
Excel 2017
Türkçe
Altın Üyelik Bitiş Tarihi
11-03-2023
Kod:
Sub aktar()
Makromuzun adı aktar

Kod:
Set s1 = Sheets("DATA")
Set s2 = Sheets("EK SERVİS & TAKSİ")
Dosyadaki sayfalara s1 ve s2 kısa adlarını atıyoruz.

Kod:
son = WorksheetFunction.Max(3, s1.Cells(Rows.Count, "Q").End(3).Row)
s1 yani Data sayfasında Q sütununda son dolu hücrenin satır numarasın son değişkenine atıyoruz.


Kod:
    End If
Next

End Sub
Daha önce açtığımız if ve next if satırlarını kapatıp makroyu sonlandırıyoruz.

Makroya buradan başlayabilirsiniz bence :)

Yusuf bey diyorsunuz ki boş ver formülleri kod lar ile devam et :) Valla bana uyar :) Ama sizi yorarım hiç temelim yok bu konuda. Ama siz IQ su en düşük insanın bile anlayacağı şekilde o kadar güzel açıklayarak ifade etmişsiniz ki :) Deneyeceğim bunu Kod mantığını anlamaya çalışayım bakalım IQ m kurtaracak mı :) TEŞEKKÜR EDERİM :)
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,071
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bu sitenin amacı zaten bilgi paylaşımı. Herkes elinden geldiğince bilgisini paylaşıp yardımcı oluyor.

Formüller bazen yetersiz kalıyor. Yaptığınız işin özelliği itibariyle formülle de çözüm bulunabilir. Ancak formüller yapıları gereği sadece formülde belirtilen alanlar için işlem yaparlar. Daha kötüsü ise sürekli olarak çalışırlar. Sayfadaki her değişiklik formüllerini tekrar çalışmasına neden olur. Bi da sizin işleminizde yavaşlama neden olur. Veriler çoğaldıkça çalışmak zorlaşır.

Verdiğim kod her çalıştırıldığında data sayfasındaki tüm dolu satırları kontrol eder. Yeni veri eklediğinizde güncellemeniz gerekmez. Halbuki formülde 50. Satırı baz alırsanız, 51. Satır dikkate alınmaz.

İşleminiz bazı satırların değil de tüm satırların aktarılması şeklinde olsaydı formül kurmak daha basit olabilirdi. Ancak aradan bazı satırların aktarılması gerektiği için biraz dolambaçlı formüller kurmak gerekir. Bu da önceki paragrafta açıkladığı gibi exceli yorar.

Makro sizi korkutmasın. Bu sitede çözülemeyecek sorun çok nadirdir.
 
Üst