Belirtilen sütun ve satır sayısına göre sıralama yapma

Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Merhabalar, örnek dosyadaki gibi belirtilen satır ve sütun sayısına göre gruplama yapmak mümkün müdür?
Örneğin 1.sayfanın A sütununda sıra ile 18 tane veri var. B2 ve C2 hücrelerinde de kullanıcıdan grup sayısı istiyorum. Kullanıcının girdiği sayılara göre sayfa2 de gruplama yaparak A sütunundaki verileri oraya çekmesini istiyorum. Bunu Excel'e yaptırmamız mümkün müdür? Şimdiden teşekkür ederim.
Yeni Microsoft Excel Çalışma Sayfası.xlsx - 10 KB
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Soru 1
A sütunundaki veriler 3x6=18 alana hangi sırayla yazılacak. Önce satır mı önce sütun mu? Yoksa rastgele mi?

Soru 2
B2 ve C2 deki sütun ve satır sayılarının çarpımı listedeki veri adedi olan 18den büyük ya da küçük olursa ne olacak?

Soru 3
VBA ile şart mı? Formülle de olabilir mi?
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Soru 1
A sütunundaki veriler 3x6=18 alana hangi sırayla yazılacak. Önce satır mı önce sütun mu? Yoksa rastgele mi?

Soru 2
B2 ve C2 deki sütun ve satır sayılarının çarpımı listedeki veri adedi olan 18den büyük ya da küçük olursa ne olacak?

Soru 3
VBA ile şart mı? Formülle de olabilir mi?
1.sorunuz için dosyayı yeniledim. Kullanıcı satır sayısına 6 girmişse; sayfa2 A sütununun ilk 6 hücresine sayfa1 A sütununun ilk 6 hücresindeki veriyi aktaracak, kalanı sayfa2 B hücresinden kaldığı sıradan devam ederek yerleştirecek (yani A7-A12), kalanı da C sütununa aktaracak. Yani hepsi sırayla.
2.sorunuz B2 ile C2 hücresinin çarpımı eğer A sütunundaki verilerden az çıkarsa sistem hata uyarısı verecek. Çarpım fazla çıkarsa Sayfa 2 C sütununda boş hücreler kalabilir. Sorun teşkil etmez. Yani diyelim ki kullanıcı 6*3 girdi(18 alan açması lazım formülün), A sütununda ise 15 hücre veri var. O zaman Sayfa2 C sütunundan son 3 hücre boş kalacak, kalabilir.
3.sorunuz ise hiç fark etmez, ama formül olacaksa 365 ten eski sürümlerde de kullanılabilir olması iyi olacaktır, Ömer Faruk Bey.
İlginiz için teşekkür ederim.
Yeni Microsoft Excel Çalışma Sayfası.xlsx - 10 KB
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Bir module ekleyip çalıştırabilirsiniz.
C++:
Sub YeniMakro()
    Dim Sh1 As Worksheet, Sh2 As Worksheet
    'Orjinal dosyanızda sayfa isimleriniz farklı ise buradan değiştirin
    Set Sh1 = Worksheets("Sayfa1")
    Set Sh2 = Worksheets("Sayfa2")
    Veri = Sh1.Range("A1:A" & Sh1.Range("A" & Rows.Count).End(3).Row).Value
    Sütun = Sh1.Range("B2")
    Satır = Sh1.Range("C2")
    If Satır * Sütun < UBound(Veri) Then MsgBox ("Alan küçük tanımlanmış"): Exit Sub
    ReDim Liste(1 To Satır, 1 To Sütun)
    For i = 1 To Sütun
        For k = 1 To Satır
            Say = Say + 1
            If UBound(Veri) < Say Then Exit For
            Liste(k, i) = Veri(Say, 1)
        Next k
    Next i
    Sh2.Range("A1").Resize(Satır, Sütun) = Liste
End Sub
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Bir module ekleyip çalıştırabilirsiniz.
C++:
Sub YeniMakro()
    Dim Sh1 As Worksheet, Sh2 As Worksheet
    'Orjinal dosyanızda sayfa isimleriniz farklı ise buradan değiştirin
    Set Sh1 = Worksheets("Sayfa1")
    Set Sh2 = Worksheets("Sayfa2")
    Veri = Sh1.Range("A1:A" & Sh1.Range("A" & Rows.Count).End(3).Row).Value
    Sütun = Sh1.Range("B2")
    Satır = Sh1.Range("C2")
    If Satır * Sütun < UBound(Veri) Then MsgBox ("Alan küçük tanımlanmış"): Exit Sub
    ReDim Liste(1 To Satır, 1 To Sütun)
    For i = 1 To Sütun
        For k = 1 To Satır
            Say = Say + 1
            If UBound(Veri) < Say Then Exit For
            Liste(k, i) = Veri(Say, 1)
        Next k
    Next i
    Sh2.Range("A1").Resize(Satır, Sütun) = Liste
End Sub
Öncelikle çok teşekkür ediyorum Ömer Faruk Bey,
Kitap1.xlsm - 22 KB
Yeni bir yardım daha istesem. Yeni eklediğim dosyadaki gibi kullanıcının sayfa1 deki "C1" hücresindeki seçimine göre şekillenen bir dağıtım yapılabilir mi? Tekli seçtiğinde sayfa2 deki gibi, ikili seçtiğinde sayfa3 teki gibi bir dağıtım olabilir mi?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
C++:
Sub YeniMakro2()
    Dim Sh1 As Worksheet, Sh2 As Worksheet
    'Orjinal dosyanızda sayfa isimleriniz farklı ise buradan değiştirin
    Set Sh1 = Worksheets("Sayfa1")
    Set Sh2 = Worksheets("Sayfa2")
    
    Veri = Sh1.Range("A1:A" & Sh1.Range("A" & Rows.Count).End(3).Row).Value
    Sütun = Sh1.Range("B3")
    Satır = Sh1.Range("C3")

    If Sh1.Range("C1") = "tekli" Then Carpan = 1 Else Carpan = 2
        
    If Satır * Sütun * Carpan < UBound(Veri) Then MsgBox ("Alan küçük tanımlanmış"): Exit Sub
    ReDim Liste(1 To Satır, 1 To Sütun * Carpan)
    For i = 1 To Sütun * Carpan Step Carpan
        For k = 1 To Satır
            Say = Say + 1
            If UBound(Veri) < Say Then Exit For
            Liste(k, i) = Veri(Say, 1)
            If Carpan = 2 Then
                Say = Say + 1
                If UBound(Veri) < Say Then Exit For
                Liste(k, i + 1) = Veri(Say, 1)
            End If
        Next k
    Next i
    Sh2.Range("A1").Resize(Satır, Sütun * Carpan) = Liste
End Sub
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
C++:
Sub YeniMakro2()
    Dim Sh1 As Worksheet, Sh2 As Worksheet
    'Orjinal dosyanızda sayfa isimleriniz farklı ise buradan değiştirin
    Set Sh1 = Worksheets("Sayfa1")
    Set Sh2 = Worksheets("Sayfa2")
  
    Veri = Sh1.Range("A1:A" & Sh1.Range("A" & Rows.Count).End(3).Row).Value
    Sütun = Sh1.Range("B3")
    Satır = Sh1.Range("C3")

    If Sh1.Range("C1") = "tekli" Then Carpan = 1 Else Carpan = 2
      
    If Satır * Sütun * Carpan < UBound(Veri) Then MsgBox ("Alan küçük tanımlanmış"): Exit Sub
    ReDim Liste(1 To Satır, 1 To Sütun * Carpan)
    For i = 1 To Sütun * Carpan Step Carpan
        For k = 1 To Satır
            Say = Say + 1
            If UBound(Veri) < Say Then Exit For
            Liste(k, i) = Veri(Say, 1)
            If Carpan = 2 Then
                Say = Say + 1
                If UBound(Veri) < Say Then Exit For
                Liste(k, i + 1) = Veri(Say, 1)
            End If
        Next k
    Next i
    Sh2.Range("A1").Resize(Satır, Sütun * Carpan) = Liste
End Sub
Teşekkür ediyorum.
Eğer yapılması mümkünse son bir uyarlama daha talep ediyorum. Yüklediğim dosyada "1.SALON" sayfasında bulunan sıra numaralarını sizin hazırladığınız makro ile çok rahatlıkla çekebiliyorum. İstediğim eklenti "1.OP" veya "2.OP" sayfalarında bulunun tekli veya ikili seçime göre yerleştirilmesi gereken bölümler var. Sıra numaralarını dosyada belirttiğim yerlere yerleştirmesi durumunda sıra numaralarının hemen altına ad ve soyad bilgilerinin çekilmesini kaydır yöntemi ile alıyorum. Sizin makroda bilgileri peş peşe yerleştiriyor. Bu numaraları belirttiğim sıra numarası olan yerlere yerleştirmesi mümkün müdür?
SINAV.xlsm - 43 KB
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Her çözüm sonrasında sorunuzu değiştirip tekrar soruyorsunuz.
Kendimi antrenmanda gibi hissetmeye başladım.

Sizin bir kaç yeni isteğiniz belki size basit gibi gelmekle beraber çözüm için her daim öyle olmuyor.
Lütfen sorunuzu kontrol edin. Varsa tüm sorularınızı, tüm formatlarınızı beraber sorun.

Mesela siz öğrencilerin sadece isim ve soy isimlerini yazdırıyorsunuz. Sanki öğrenci numarası da eklenmeli.
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Her çözüm sonrasında sorunuzu değiştirip tekrar soruyorsunuz.
Kendimi antrenmanda gibi hissetmeye başladım.

Sizin bir kaç yeni isteğiniz belki size basit gibi gelmekle beraber çözüm için her daim öyle olmuyor.
Lütfen sorunuzu kontrol edin. Varsa tüm sorularınızı, tüm formatlarınızı beraber sorun.

Mesela siz öğrencilerin sadece isim ve soy isimlerini yazdırıyorsunuz. Sanki öğrenci numarası da eklenmeli.
Öncelikle özür diliyorum, sizi yormak gibi bir niyetim tabi ki asla yok. Kolay olamadığının da farkındayım, en azından benim için. Hatta utandığımdan bu son yazdığımı sorup sormamakta çok ikilemde kaldım. Okulum için bir katkım olsun istiyorum. Dediğiniz gibi öğrenci numaraları da eklenebilir, hatta eklenmeli, haklısınız. Bu son isteğim olacak, Ömer Faruk Bey. Umarım...
SINAV.xlsm - 45 KB
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Anlayışın için teşekkürler.


1den fazla sütun sayısı ve TEKLİ dizilimlerde A-F-K-P-.... sütunları mı kullanılacak?
Benzer şekilde çiftli dizilimlerde A/B - F/G - K/L - PR -..... sütunları mı kullanılacak?
Yoksa son gönderdiğin dosyada sıraları 6 sütun göstermişsin. Bu 6 sütun maksimum mudur? Sabit midir?

Sayfa formatları hep böylemi olacak? C-D-E ve H-I-J deki boş sütunlar ve renklendirmeleri olacak mı?

Nihayetinde ben şöyle anlıyorum.
Bu sınavlarda öğrencilerin sıralara yerleşim planı olacak.

Verilen Listeyi
Satır Miktarı - Sütun Miktarı -Tek/Çift durumuna göre
Tekli dizilimlerde A-F-K sütunlarını
Çiftli dizilimlerde AB-FG-KL sütunlarını kullanarak.

4. satırdan itibaren SıraNo/İsim/Soyisim/ÖğrenciNo bilgilerini alt alta yazıp,
Araya bir boş satır bırakarak
Önce satırları sonra sütunları doldurmak.

Eğer doğruysa teyit ediniz.

Kullanılan sınıflarda sıra sayısı asla yan yana 4 olamaz. (Çiftli dizilimlerde bir sıraya 2 öğrenci yerleşiyor)
Eğer bu sayı 3 ten faz 4-5-6... gibi olabiliyorsa sayfa formatını da düzenleyecek miyiz?
yada dosyanızdaki gibi 6 satır değil de 4 satır varsa 5 ve 6. sıralara denk gelen satır aralığını silecek miyiz?
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Anlayışın için teşekkürler.


1den fazla sütun sayısı ve TEKLİ dizilimlerde A-F-K-P-.... sütunları mı kullanılacak?
Benzer şekilde çiftli dizilimlerde A/B - F/G - K/L - PR -..... sütunları mı kullanılacak?
Yoksa son gönderdiğin dosyada sıraları 6 sütun göstermişsin. Bu 6 sütun maksimum mudur? Sabit midir?

Sayfa formatları hep böylemi olacak? C-D-E ve H-I-J deki boş sütunlar ve renklendirmeleri olacak mı?

Nihayetinde ben şöyle anlıyorum.
Bu sınavlarda öğrencilerin sıralara yerleşim planı olacak.

Verilen Listeyi
Satır Miktarı - Sütun Miktarı -Tek/Çift durumuna göre
Tekli dizilimlerde A-F-K sütunlarını
Çiftli dizilimlerde AB-FG-KL sütunlarını kullanarak.

4. satırdan itibaren SıraNo/İsim/Soyisim/ÖğrenciNo bilgilerini alt alta yazıp,
Araya bir boş satır bırakarak
Önce satırları sonra sütunları doldurmak.

Eğer doğruysa teyit ediniz.

Kullanılan sınıflarda sıra sayısı asla yan yana 4 olamaz. (Çiftli dizilimlerde bir sıraya 2 öğrenci yerleşiyor)
Eğer bu sayı 3 ten faz 4-5-6... gibi olabiliyorsa sayfa formatını da düzenleyecek miyiz?
yada dosyanızdaki gibi 6 satır değil de 4 satır varsa 5 ve 6. sıralara denk gelen satır aralığını silecek miyiz?
Sorduğunuz soruların karşılıklarını 1.OP sayfasına yazdım.
SINAV (2).xlsm - 49 KB
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Ekteki dosyayı inceleyin.
Sütun sayısına dikkat edin. Sütun olarak sıranın tamamını 1 sütun saydım.

Buradan indirebilirsiniz.
1.Sizi çok uğraştırdığımın farkındayım.
2. Soyadı kısımları dağıtımda görünmüyor.
3. Benim olmaz diye düşünüp söylemediğim sıranın tek sütun olayını da halletmişiniz, fakat 3 sütun 6 sıra çiftli oturacağı zaman (3*2)*6 olarak hesaplamadığı için sanırım "alan küçük tanımlanmış" hatası veriyor.
4. Tekli dağıtımda da listedeki öğrenci sayısında az seçtiğimde hata vermiyor, örneğin toplamda 41 öğrenci var ben 4*7 seçtiğimde ilk 28 kişiyi dağıtıyor geri kalanlar dağıtımda yok.
5. İki tane yeni makro görünüyor, biri fazla galiba.
 
Son düzenleme:

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Siz ilk kodları çalışma kitabı altına kaydetmişsiniz. Onları silin.
Module1 içindeki kodlar üzerinde çalıştığımız kod.
Module1 içindekini de komple silin. Aşağıda revize edilmiş hali var.
C++:
Sub YeniMakro2()
    Dim Sh1 As Worksheet, Sh2 As Worksheet
    'Orjinal dosyanızda sayfa isimleriniz farklı ise buradan değiştirin
    Set Sh1 = Worksheets("1.SALON")
    Set Sh2 = Worksheets("OturmaPlanı")
    Set Sh3 = Worksheets("Şablon")
    Sh2.Cells.Clear
    Veri = Sh1.Range("A10:F50").Value
    'Eğer satır sayınız 50 den fazla olacaksa, en alt öğrenci satırından sonra bir boş satır olması koşuluyla
    'Üstteki Veri ile başlayan satırı iptal edin.. Başına ' işareti koyunca iptal olur
    'Alttaki satırı kullanın...başındaki ' kesme işaretini silin
    'Veri = Sh1.Range("A10:A" & Sh1.Range("A10").End(xlDown).Row).Value
    
    Sütun = Sh1.Range("Q2")
    Satır = Sh1.Range("R2")
    If Sh1.Range("S2") = "Tekli" Then Carpan = 1 Else Carpan = 2
    Sh3.Range("A:E").Copy Sh2.Range("A:E")
    Sh2.Rows("4:8").Copy
    Sh2.Rows("4:" & Satır * 5 + 2).PasteSpecial xlFormats
    Sh2.Range("A:E").Copy
    For i = 2 To Sütun
        Sh2.Range("A:E").Offset(0, 5 * (i - 1)).PasteSpecial xlFormats
    Next i
    Application.CutCopyMode = False
    Sh2.Range("A:E").Offset(0, 5 * (i - 1) - 3).Delete
    Sh2.Range("A1").Resize(1, Sütun * 5 - 3).Merge
    Sh2.Range("A2").Resize(1, Sütun * 5 - 3).Merge
    Sh2.Range("A1") = Sh1.Range("A3")
    Sh2.Range("A2") = "SINIFI ORTAK SINAV OTURMA PLANI"
    Sh2.Range("A1").HorizontalAlignment = xlHAlignCenter
    Sh2.Range("A2").HorizontalAlignment = xlHAlignCenter
    Sh2.Range("A2").Resize(1, Sütun * 5 - 3).Borders(xlEdgeBottom).Weight = xlThick
    If Satır * Sütun * Carpan < UBound(Veri) Then
        Mesaj = "Alan küçük tanımlanmış"
        Mesaj = Mesaj + Chr(10) + Chr(10) + "Satır x Sütun x Oturma Şekli = " & Satır & " x " & Sütun & " x " & Sh1.Range("S2") & " = " & Satır * Sütun * Carpan
        Mesaj = Mesaj + Chr(10) + "Listede " & UBound(Veri) & " öğrenci var."
        MsgBox Mesaj, vbOKOnly, "Hata Uyarısı"
        Exit Sub
    End If
    ReDim Liste(1 To Satır * 5, 1 To Sütun * 5 - 3)
    For i = 1 To UBound(Liste, 2) Step 5
        For k = 1 To UBound(Liste, 1) Step 5
            Say = Say + 1
            If UBound(Veri) < Say Then Exit For
            Liste(k, i) = Veri(Say, 1)
            Liste(k + 1, i) = Veri(Say, 4)
            Liste(k + 2, i) = Veri(Say, 5)
            Liste(k + 3, i) = Veri(Say, 2)

            If Carpan = 2 Then
                Say = Say + 1
                If UBound(Veri) < Say Then Exit For
                Liste(k, i + 1) = Veri(Say, 1)
                Liste(k + 1, i + 1) = Veri(Say, 4)
                Liste(k + 2, i + 1) = Veri(Say, 5)
                Liste(k + 3, i + 1) = Veri(Say, 2)
            End If
        Next k
    Next i
    Sh2.Range("A4").Resize(UBound(Liste, 1), UBound(Liste, 2)) = Liste
    Sh2.Select
    Sh2.Range("A3").Select
End Sub
 
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Adsız.jpg - 312 KB

Adsız2.jpg - 547 KB
satır numarasının 50 den fazla olması durumunda yapmam gerekeni not düşmüşünüz, satır sayısının 50 den az olması durumunda (1.fotoğrafta olduğu gibi) bir hata veriyor. satır sayısı 32 olduğu halde 41 dolu görüyor, dolu görmesinin sebebi 2.fotoğraf olabilir mi? Oralarda formüller var.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Veri = Sh1.Range("A10:A" & Sh1.Range("A10").End(xlDown).Row).Value
bu satırı aktif edin direkt
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,655
Excel Vers. ve Dili
Microsoft 365 Tr-64
Veri = Sh1.Range("A10:F" & Sh1.Range("A10").End(xlDown).Row).Value

Bu satırda gösterdiğim düzeltmeyi yaparsanız düzelecektir.
Dosyanızın son halini de ekliyorum.
 

Ekli dosyalar

Son düzenleme:
Katılım
7 Mayıs 2023
Mesajlar
22
Excel Vers. ve Dili
Microsoft 365
Veri = Sh1.Range("A10:F" & Sh1.Range("A10").End(xlDown).Row).Value

Bu satırda gösterdiğim düzeltmeyi yaparsanız düzelecektir.
Dosyanızın son halini de ekliyorum.
Bu yüklediğiniz dosyayı altın üye olmadığım için indiremedim.
Dediğiniz değişikliği yaptım ama sorun devam ediyor, İçinde formül olan hücreleri de değer olarak karşılığı olmasa bile dolu görüyor.
SINAV.xlsm - 50 KB
 
Üst