• DİKKAT

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

Eğerbirleştir - işin içinden çıkamadım-

Katılım
2 Ekim 2013
Mesajlar
347
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
ekte gönderdiğim excel tablosunda satırlarda şehirler sütunlarda ise saatler var.

bu tabloda "x" konulan saatleri birleştirmek istiyorum
örneğin adana nın olduğu satırlarda 11:00, 17:00 ve 21:15 saatleri işaretli ise
son hücrede Adana için 11:00 - 17:00 - 21:15 yazmasını istiyorum
yardımlarınız için şimdiden teşekkürler

https://mega.co.nz/#!bs8RwAab!EcYXhfQAqkPsJOzSe6SWk9jZyt7eGtmX6FmmmuM5hk4
 
Aşağıdaki kodları bir modüle ekleyip deneyin. Yalnız çalıştırmadan önce J sütununu metin olarak biçimlendirin:
Kod:
Sub saatler()
son = Cells(Rows.Count, 1).End(3).Row
Range("J3:J" & son).ClearContents
For i = 3 To son
    For j = 2 To 9
        If Cells(i, j) <> "" Then
            If Cells(i, 10) = "" Then
                Cells(i, 10) = Format(Cells(2, j), "hh:mm")
            Else
                Cells(i, 10) = Cells(i, 10) & " - " & Format(Cells(2, j), "hh:mm")
            End If
        End If
    Next
Next
End Sub
 
Şu daha iyi oldu, önce J sütununu boşaltır, sonra metin olarak biçmlendirir ve son olarak da istediğiniz verileri yazar:
Kod:
Sub saatler()
son = Cells(Rows.Count, 1).End(3).Row
[b1] = Format(Cells(2, 2), "hh:mm")
Range("J3:J" & son).ClearContents
Range("J3:J" & son).NumberFormat = "@"
For i = 3 To son
    For j = 2 To 9
        If Cells(i, j) <> "" Then
            If Cells(i, 10) = "" Then
                Cells(i, 10) = Format(Cells(2, j), "hh:mm")
            Else
                Cells(i, 10) = Cells(i, 10) & " - " & Format(Cells(2, j), "hh:mm")
            End If
        End If
    Next
Next
End Sub
 
Çok teşekkür ederim çalıştı.
ama örnek tabloda saatler artarsa sonuçların J sütunu yerine diyelim dw sütununa çıkmasını istiyorum. Makrodaki sadece J gördüğüm yere dw yazsam olur mu? Başka neleri değiştirmem gerecek?
 
Kodun açıklamasını yazayım:

son = Cells(Rows.Count, 1).End(3).Row
Bu kodla A sütunundaki son dolu satırı buluyoruz. Yani kaçıncı satırda işlem bitecek sorusunun cevabı.

Range("J3:J" & son).ClearContents
Bu kodla J sütununda 3 ile bir önceki satırda bulduğumuz son satıra kadar olan hücreleri boşaltıyoruz

ange("J3:J" & son).NumberFormat = "@"
Bu kodla boşalttığımız hücrelerin biçimini metin yapıyoruz.

For i = 3 To son
i değişkenine 3'ten son satır numarasına kadar değer verilecek. burdaki 3 ilk il siminin olduğu satırdır.

For j = 2 To 9
j değişkenine 2'den 9'a kadar değer verilecek. burdaki 2 B sütununu, 9 ise saatlerin bittiği sütun olan I sütununu simgeler. Excelde sütunlar A'dan itibaren 1-2-3-4 şeklinde numaralandırılmıştır. Yani C sütunu 3 sütundur, 7 sütunu 6. sütundur, D2 ise 127. sütundur. Eğer saatleriniz DW'de bitiyorsa burdaki 9'u 127 yapmanız gerekir, R'de bitiyorsa da 18 yapmanız gerekir vs. Burdaki j'yi sütun olan J ile karıştırmayın. Bu sadece değişkene benim verdiğim kısa isim. Bunun yerine aklıma gelen herhangi bir şeyi yazabilirdim: ali, kalem, saat, şey, lglgklk vs.

If Cells(i, j) <> "" Then
Bu kodla "i satırı j sütunundaki hücre boş değilse" diyoruz. i'yi 3'ten j'yi de 2 den başlattığımızdan kod ilk önce B3 hücresine bakacaktır, daha sonra sırasıyla C3, D3,... ve son olarak 9. sütun olan I3 hücresine bakacaktır. j'ler bittiğinde yani I3 hücresine de baktıktan sonra bu sefer i'yi 1 arttıracak ve 4. satırda yine aynı işlemleri yapacaktır. Bu işlem son dolu satıra kadar her dolu satır için ayrı ayrı yapılacaktır.

If Cells(i, 10) = "" Then
O anda işlem yapılmakta olan i satırı 10. sütuna yani i=3 iken J3 hücresine bakıyoruz bu sefer. Eğer bu hücre boşsa aşağıdaki işlemi yap.

Cells(i, 10) = Format(Cells(2, j), "hh:mm")
i satırında 10. sütundaki hücreye, 2. satırda j sütunundaki hücreyi saat formatında yaz. i=3 için J3 hücresine, o satırdaki dolu olan hücre kaçıncı sütundaysa o sütunun saatini yaz. Saatler 2. satırda olduğu için burda 2 olarak belirttik.

Else
Else, değilse demektir Yani bir önceki şart sağlanmıyorsa anlamına gelir. Bir önceki şartımız "i satırındaki 10. sütun hücresi boşsa" idi, else ile örneğin J3 hücresi boş değilse demiş oluyoruz.

Cells(i, 10) = Cells(i, 10) & " - " & Format(Cells(2, j), "hh:mm")
Eğer J sütunundaki hücre doluysa, önceki halinin sonuna sıradaki dolu saati (X konulmuş saat) yaz diyoruz.

End if ve nextlerle de daha önce açmış olduğumuz if şartlarını ve for döngülerini sonlandırıyoruz.

Kısacası sizin j'leri DW olarak değiştirmeniz yanlış olur. J sütunu 10. sütun olduğundan kodlardaki 10'ları ve I da 9. sütun olduğundan 9'ları son saat sütununa ve sonuç yazılacak sütuna göre değiştirmeniz gerekir.
 
teşekkürler ayrıntılı anlatımızın için.

EA sütununa çıkarılmasını istemiştim, 10 ları 131 9 u da 130 yaptım oldu gibi.


Sub saatler()
son = Cells(Rows.Count, 1).End(3).Row
[b1] = Format(Cells(2, 2), "hh:mm")
Range("EA3:EA" & son).ClearContents
Range("EA3:EA" & son).NumberFormat = "@"
For i = 3 To son
For j = 2 To 130
If Cells(i, j) <> "" Then
If Cells(i, 131) = "" Then
Cells(i, 131) = Format(Cells(2, j), "hh:mm")
Else
Cells(i, 131) = Cells(i, 131) & " - " & Format(Cells(2, j), "hh:mm")
End If
End If
Next
Next
End Sub
 
Geri
Üst