• DİKKAT

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

for next döngüsü kuramıyorum.

  • Konbuyu başlatan Konbuyu başlatan hmtstc
  • Başlangıç tarihi Başlangıç tarihi
Katılım
20 Şubat 2014
Mesajlar
315
Excel Vers. ve Dili
Excel 2016 - Türkçe
Merhaba Arkadaşlar,

Makro yazmaya çalışıyorum yeni amatör bir arkadaşınız olarak :)
Ancak döngü kurmayı bir türlü beceremedim.

Üyelik alamadığım için ek olarak veremiyorum ama şöyle anlatayım.
Dosya geniş bir dosya ve her ay amelelik yapıyorum resmen. Oradan al oraya kopyala işi.

Dosyayı anlatmaya çalışayım.

A B C ..... AI ' ya kadar gidiyor.
Aşağıya doğru yaklaşık 2000 satır var. ve değişebiliyor. (1800 gibi,2200 gibi )

Yapmak istediğim şey şu; ben makroyu çalıştırdığımda D sütununda yer alan sayılar arasında belirteceğim sayıyı arasın ve bulsun. bulduğunda onu yeni bir sekmede yazsın ve sağ tarafında doğru mesela d e f g h ı j kolonlarındaki sayıları yazsın. daha sonra D sütununda yine aşağıya doğru arama yaparak o belirtmiş olduğum sayıyı her bulduğunda bu işlemi yapsın.

Ben şöyle bir çalışma yaptım. Aşağıda paylaştım.
Lütfen arkadaşlar bana yardımcı olun ben çıkamadım işin içinden. Kafayı yemek üzereyim uykularım kaçıyor evliliğim sallantıya girdi resmen :D

Sub aaa()
Dim i As Integer
Dim a As Integer
Sheets.Add
Sheets(ActiveSheet.Name).Name = ("koltuk")
For i = 1 To 200
For a = 1 To 200
If Sheets("ODUNC").Cells(2 + i, 4) = "11010201" Then
Cells(2, 2) = Worksheets("ODUNC").Cells(2, 4).Value
Cells(2, 2 + i) = Worksheets("ODUNC").Cells(2, 4 + a).Value
End If
Next a
Next i
End Sub
 
Merhaba
Aşağıdaki gibi deneyin;
([D:J] aralığını yeni sayfada [B:H] aralığına aktarsın)
Kod:
Sub aaa()
Dim i As Integer
Dim a As Long
Sheets.Add
Sheets(ActiveSheet.Name).Name = ("koltuk")
For a = 2 To Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row
If Sheets("ODUNC").Cells(a, 4) = "11010201" Then
i = i + 1
Sheets("koltuk").Range("B" & i & ":H" & i).Value = Sheets("ODUNC").Range("D" & a & ":J" & a).Value
End If
Next
End Sub
 
Cevaplarınız için teşekkür ederim arkadaşlar. Bana ciddi yardımcı oldu. Kendim bir miktar düzenleme yapabildim. Ama şurayı anlayamadım. Burda ne anlatmaya çalışıyoruz ?

For a = 2 To Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row

Bir de program çalıştığında en üstten başlıyor ya ben bunu 2. satırdan başlatmak istiyorum. İlk satıra açıklamalarını yazacağım.
Nasıl düzenleme yapabilirim?

Yardımlarınız için şimdiden teşekkürler...
 
Arkadaşlar bir noktaya kadar ilerleme kaydettim. Dosya ekte mevcuttur.
Ancak buradan sonra filtreleme ve toplama problemi ile karşı karşıyayım. Bir hayli profesyonellik isteyen bir durum diye tahmin ediyorum.

Aynı isim farklı bölümlerde bulunmuş. aynı isim aynı bölümde farklı zamanlarda da bulunmuş ama hepsi ayrı halde yazılı. Ben bunların toplanmış halde olmasını istiyorum. Ama nasıl bir koşul ile düşünmem lazım bilemiyorum.

Yapabilecek arkadaşlar var ise bana nasıl yaptığının mantığını anlatarak yazabilir mi? Böylece bende bir şeyler öğrenmiş olurum ve buradaki arkadaşlara yardımcı olabilecek duruma gelebilirim inşallah.

Şimdiden teşekkürler.

http://s2.dosya.tc/server/erg8qu/ORNEK_DOSYA.xlsx.html
 
Cevaplarınız için teşekkür ederim arkadaşlar. Bana ciddi yardımcı oldu. Kendim bir miktar düzenleme yapabildim. Ama şurayı anlayamadım. Burda ne anlatmaya çalışıyoruz ?

For a = 2 To Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row
Bir de program çalıştığında en üstten başlıyor ya ben bunu 2. satırdan başlatmak istiyorum. İlk satıra açıklamalarını yazacağım.
Nasıl düzenleme yapabilirim?
Merhaba
Kod:
Sub aaa()
Dim i As Integer
Dim a As Long
Sheets.Add
Sheets(ActiveSheet.Name).Name = ("koltuk")
[COLOR="Blue"]i=1[/COLOR]
[COLOR="Red"]For a = 2 To Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row[/COLOR]
If Sheets("ODUNC").Cells(a, 4) = "11010201" Then
i = i + 1
Sheets("koltuk").Range("B" & i & ":H" & i).Value = Sheets("ODUNC").Range("D" & a & ":J" & a).Value
End If
Next
End Sub
Yukarıda "for" döngüsünden önce "i= 1" olarak tanıtırsınız döngü başladığında i=i+1 ile 2 olur, 2. satırdan başlar.
Mesajınızda sorduğunuz;
"For a = 2 To Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row"
"ODUNÇ" Sayfasının 2. satırından; "D" sütununun son satırına kadar devam edecek (karşılaştırma) döngü başlangıcıdır.
 
Hocam ben söylediğinizi yapmıştım. i=1 verdim ancak sadece ilk satırı yapıyor sonra hiç devam etmiyor. Döngüyü döndürmüyor. o yüzden acaba başka bir durum mu var diye sordum. İlave olarak da end(3) anlamı ne oluyor ? niye 3 yazdık oraya ?
 
For a = 2 To Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row

For a = 2 To ==> a'ya 2 den başlayarak değer ver

Rows.Count ==> sayfadaki satır sayısı

Sheets("ODUNC").Cells(Rows.Count, "D") ==> ODUNC sayfasında D sütunundaki son hücre, burda sayfadaki satır sayısını bilmediğimizden (malum xls'de 65 bin küsür, xlsx'te ise 1 milyon küsür satır var), rows.count ile satır sayısını buluyoruz.

End(3) işlemi aynı zamanda End(xlup) da demektir. Bu o an seçili hücreden yukarı doğru CTRL+Üst ok işleminin yapılmasını sağlar. Yani
Cells(Rows.Count, "D").End(3).Row ile D sütunundaki en alt hücrede CTRL+Üst ok yapıp o sütundaki son dolu hücreyi buluyoruz. Bunu kendiniz son hücreye gidip CTRL+Üst ok yaparak test edebilirsiniz.

Sheets("ODUNC").Cells(Rows.Count, "D").End(3).Row ==> ise CTRL+Üst ok ile gelinen hücrenin satır numarasını veriyor.

Kodun bu satırı hep beraber a'ya 2'den D sütunundaki son dolu satırın numarasına kadar değer vermesini söylüyor.
 
YUSUF44 hocam çok teşekkür ederim anlatımınız yardımınız için. Şimdi mantığı kafamda kurabildim. Ezbere bir şeyler öğrenmek değil mantığını anlayıp öyle ilerlemek istiyorum. Bu yüzden böyle açıklamalar ben gibi amatör arkadaşlara çok faydalı oluyor. Çok teşekkür ederim.
 
. İlave olarak da end(3) anlamı ne oluyor ? niye 3 yazdık oraya ?
Yusuf bey güzel bir açıklama yapmış, bunun yanında gerek internette gerek formda hücre seçimi ile ilgili makale ve örnekleri okumanızı tavsiye ederim
örnek olarak yukarıdaki sorunuzla ilgili:
https://support.microsoft.com/tr-tr/kb/291308

Hocam ben söylediğinizi yapmıştım. i=1 verdim ancak sadece ilk satırı yapıyor sonra hiç devam etmiyor. Döngüyü döndürmüyor. o yüzden acaba başka bir durum mu var diye sordum.
Bu sorunuza göre eki bir deneyin
http://s4.dosya.tc/server/y4v261/0009.zip.html
"Aynı isim ve aynı bölümle" ilgili sorun için; daha kapsamlı bir açıklama bulunan örnek dosya eklerseniz çözüm kolay olacaktır.
 
PLİNT arkadaşım araştırdım ama gerçekten ıkamadım işin içinden. Bu nedenle yazdım. Yoksa araştırmadan yazmıyorum.

Diğer konu ile ilgili olarak, aşağıdaki linkte dosyayı paylaşıyorum.

http://s2.dosya.tc/server/lvu6ou/yeni_ornek_dosya.xlsx.html

Burada aynı isim farklı bölümlerde çalışmış ve aynı bölümde farklı saatlerde de çalışmış ancak liste bunu haliyle sıralı olarak gösteriyor.

Bende istiyorum ki farklı saatlerde bile çalışsa benim için toplamı önemli.
Yani tek isim ve aynı bölümde çalıştığı saatlerin toplamı yazsa daha makbul olacak.

Umarım düzgün açıklama yapabilmişimdir.

Yardımlarınız için şimdiden Allah sizlerden razı olsun arkadaşlar...
 
Son düzenleme:
PLİNT hocam aynen istediğim buydu çoooookkkkkkk teşekkür ediyorum sana Allah senden razı olsun inşallah... Allah da sana yardım etsin :)
 
PLİNT hocam aynen istediğim buydu çoooookkkkkkk teşekkür ediyorum sana Allah senden razı olsun inşallah... Allah da sana yardım etsin :)
Merhaba
Rica ederim, Allah sizdende razı olsun.
Kod:
For a = 2 To x
If a = s1.Cells(Rows.Count, "B").End(xlUp).Row [COLOR="Red"]-1[/COLOR] Then Exit Sub
Kodlar içindeki "-1" bölümünü silin, buna göre yukarıdaki değişen dosyayı indirin.
 
Geri
Üst