A sütununda değer değişince 3 satır ekle

Katılım
25 Mart 2005
Mesajlar
66
Herkese merhabalar,
Gerçekten 2 saatten beri forumda karşılaştırma ile ilgili yazılanları okudum ama çözüm bulamadım.Onun için yeni konu açtım.

Sorum şu :
A sütununda yaklaşık 500-600 satır bilgi var.Envanterle ilgili bilgiler A sütununda 150.10.001 150.20.001 gibi değerler var,ama 150.10.001 den atıyorum 10 tane var sonra 150.20.001 e geçiyor bu geçişte değer değişince 3 satır eklemek istiyorum.

Şimdiden teşekkürler.
 

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,731
Excel Vers. ve Dili
Excel 2019 Türkçe
Aşağıdaki şekilde dener misiniz?

Kod:
Sub ekle()
For t = [a65536].End(3).Row To 1 Step -1
If Cells(t, 1) <> "" Then
If Cells(t, 1) <> Cells(t + 1, 1) Then
Rows(t + 1 & ":" & t + 3).Insert
End If
End If
Next
End Sub
 
Katılım
25 Mart 2005
Mesajlar
66
Teşekkür Ederim

Sn.Hamitcan çok teşekkür ederim.Sorumun yanıtı buydu.
Ayrıca bir şey daha sorabilirmiyim.peki arada boşluk varsa onu dikkate almasak.nasıl olur.
 
Katılım
25 Mart 2005
Mesajlar
66
Sn.Hamitcan Bir &#246;nceki mesaj&#305;mda te&#351;ek&#252;r ettim,ama bir sorum daha olacak size.Bu yazm&#305;&#351; oldu&#287;unuz kodda for d&#246;ng&#252;s&#252;n&#252;n nas&#305;l &#231;al&#305;&#351;t&#305;&#287;&#305;n&#305; anlat&#305;rm&#305;s&#305;n&#305;z.Ben bu forumdan &#231;ok fazla &#351;ey &#246;&#287;rendim ve uygulad&#305;m.Olaylar&#305;n mant&#305;&#287;&#305;n&#305; kuruyorum ama uygulamada tak&#305;l&#305;yorum bu sebeple direk olarak sizin verdi&#287;iniz kodu kullan&#305;p oldu demek istemiyorum &#246;&#287;renmek anlam&#305;nda.Yar&#305;n ba&#351;ka bir sorunla kar&#351;&#305;la&#351;&#305;rsam sizin &#246;rnekten yola &#231;&#305;karak gerekli d&#252;zeltmeleri yaparak kullanabilirim.Mesala 50 sat&#305;rl&#305;k bir veri var elimde farkl&#305; de&#287;i&#351;kenlerin aras&#305;na 3 sat&#305;r ekledik ama diyelimki 50 sat&#305;r&#305;n i&#231;inde 1 veya daha fazla bo&#351;luk var onlarada 3 sat&#305;r ekliyor.2.si [a65536].End(3).Row bunu ba&#351;a yazm&#305;&#351;s&#305;n&#305;z for bunu ba&#351;lang&#305;&#231; olarak kabul ediyor i&#351;lem a s&#252;tunun sonundan m&#305; ba&#351;l&#305;yor .K&#305;sacas&#305; l&#252;tfen bu yazd&#305;klar&#305;n&#305;z&#305;n yan&#305;na k&#252;&#231;&#252;k a&#231;&#305;klama
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,428
Excel Vers. ve Dili
Ofis 365 Türkçe
Say&#305;n hamitcan'&#305;n kodlar&#305;nda k&#252;&#231;&#252;k bir ekleme yaparak sorununuz &#231;&#246;z&#252;l&#252;l&#252;r sanyorum.
&#214;nce A s&#252;tununda bo&#351; sat&#305;rlar&#305; silip sonra araya 3 bo&#351; sat&#305;r eklemek, gereksiz kod yazmay&#305; engeller.

Kod:
Sub ekle()
Range("A1:A" & [A65536].End(3).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
For t = [A65536].End(3).Row To 1 Step -1
If Cells(t, 1) <> "" Then
If Cells(t, 1) <> Cells(t + 1, 1) Then
Rows(t + 1 & ":" & t + 3).Insert
End If
End If
Next
End Sub
D&#246;ng&#252;n&#252;n sondan ba&#351;lay&#305;p ba&#351;a gitmesinin nedeni, sat&#305;r eklendi&#287;inde bulundu&#287;u sat&#305;r&#305; kaybetmemek i&#231;indir.

Ba&#351;tan ba&#351;lay&#305;p sona gidilseydi, son sat&#305;r&#305;n numaras&#305;n&#305; s&#252;rekli de&#287;i&#351;tirmek gerekirdi.

Not : Ben bu kodda Ba&#351;l&#305;k varsa for d&#246;ng&#252;s&#252;ndeki to 1 yerine to 2 demek (yada ka&#231; sat&#305;r ba&#351;l&#305;k varsa, &#246;rne&#287;in 2 sat&#305;r ba&#351;l&#305;k varsa to 3) gerekir.


Kodu biraz k&#305;saltmak gerekirse :

Sub ekle()
Range("A1:A" & [A65536].End(3).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
For i = [A65536].End(3).Row To 2 Step -1
If Cells(i, "A") <> Cells(i + 1, "A") Then
Rows(i + 1 & ":" & i + 3).Insert
End If
Next i
End Sub
 
Son düzenleme:
Katılım
25 Mart 2005
Mesajlar
66
Sn.Necdet Yesertener yard&#305;mlar&#305;n&#305;z i&#231;in te&#351;ekk&#252;r ederim.Ben Sn hamitcan&#305;n kodunu &#351;&#246;yle de&#287;i&#351;tirmi&#351;tim.
Sub ekleme()
For t = [a65536].End(3).Row To 1 Step -1
If Cells(t, 1).Value = "" Then
MsgBox "A S&#252;tununda Bo&#351; H&#252;creler Var !!!!"
Exit Sub
End If
If Cells(t, 1) <> Cells(t + 1, 1) Then
Rows(t + 1 & ":" & t + 3).Insert
End If
Next
End Sub
&#350;imdi neden tersten ba&#351;lad&#305;&#287;&#305;n&#305; anlad&#305;m amma &#351;u for d&#246;ng&#252;s&#252;ndeki .End(3).Row nedemek yani terim olarak.Sa&#231;ma bir soru ise kusura bakmay&#305;n.2 sorum da ben bu kodlar&#305; kullanma amac&#305;m belli ben diyorumki a s&#252;tundaki de&#287;er de&#287;i&#351;ince 3 bo&#351;luk ver ama bo&#351;luklar&#305; verme amac&#305; altlar&#305;na toplam alabilmek.Tabi ben bunu elle yap&#305;yorum.Biraz u&#287;ra&#351;t&#305;m ama beceremedim.Sn.Hamitcan&#305;n Kodlar&#305;n&#305; biraz de&#287;i&#351;tirdim ama yanl&#305;&#351; nerde hatal&#305;y&#305;m biraz yard&#305;mc&#305; olurmusunuz.
Sub ekle()
atoplam = 0
For t = [a65536].End(3).Row To 1 Step -1
If Cells(t, 1).Value = "" Then
MsgBox "A S&#252;tununda Bo&#351; H&#252;creler var"
Exit Sub
End If
If Cells(t, 1) = Cells(t + 1, 1) Then
atoplam = atoplam + Cells(t, 2)
End If
If Cells(t, 1) <> Cells(t + 1, 1) Then
Rows(t + 1 & ":" & t + 1).Insert
Cells(t + 1, 3) = atoplam
atoplam = 0
End If
Next
End Sub
&#350;imdiden Te&#351;ekk&#252;r ederim.
 
Katılım
25 Mart 2005
Mesajlar
66
Sn.Necdet Yesertener bu arada verdi&#287;iniz kod &#231;al&#305;&#351;mad&#305; hata verdi.run time error 424 object required yazd&#305;.son verdi&#287;iniz kod
Sub ekle()
Range("A1:A" & [A65536].End(3).Row).SpecialCells(xlCellTypeBlanks).Entire Row.Delete
For i = [A65536].End(3).Row To 2 Step -1
If Cells(i, "A") <> Cells(i + 1, "A") Then
Rows(i + 1 & ":" & i + 3).Insert
End If
Next i
End Sub
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,428
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba Sayın gcanlar2012,

End(3).Row Son satırı bulmak için kullanılır.

Belli bir sütunda (diyelim A sütununda) son satıra (A65536) gidin ve End + Yukarı Ok tuşuna basın (önce End, sonra yukarı ok tuşu) hareketli nokta (cursor) o satırın en son dolu hücresine gider. Bunun makro karşılığı :

[A65536].end(3).row dur.

Verdiğim örnekte boş satır olmadığı zaman kod hata veriyor, bunu bende sonradan farkettim ve düzelttim, ayrıca biraz daha parametrik olması açısından araya eklenecek boş satır sayısını parametre ile belirlemek istedim.

Kod:
Sub ekle()
    Adet = Application.InputBox("Kaç Satır Eklemek İstiyorsunuz", _
        "Satır Adedi Mesajı", 3, , , , , 1)
On Error GoTo Devam
    Range("A1:A" & [A65536].End(3).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Devam:
    For i = [A65536].End(3).Row To 2 Step -1
        If Cells(i, "A") <> Cells(i + 1, "A") Then
           Rows(i + 1 & ":" & i + Adet).Insert
        End If
    Next i
Toplam = 0
Genel_Toplam = 0
For i = 2 To [A65536].End(3).Row
    If Cells(i, "A") = "" Then
        Cells(i, "A") = "Toplam " & Cells(i - 1, "A")
        Cells(i, "B") = Toplam
        Range(Cells(i, "A"), Cells(i, "B")).Font.Bold = True
        Toplam = 0
        i = i + Adet - 1
    Else
        Toplam = Toplam + Cells(i, "B")
        Genel_Toplam = Genel_Toplam + Cells(i, "B")
    End If
 
Next i
        Cells(i, "A") = "Toplam " & Cells(i - 1, "A")
        Cells(i, "B") = Toplam
        i = i + 1
        Cells(i, "A") = "Genel Toplam"
        Cells(i, "B") = Genel_Toplam
 
        Range(Cells(i - 1, "A"), Cells(i, "B")).Font.Bold = True
 
End Sub
 
Son düzenleme:

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,428
Excel Vers. ve Dili
Ofis 365 Türkçe
Say&#305;n gcanlar2012, dosyay&#305; ve kodlar&#305; biraz &#246;nce yeniledim, tekrar indirip &#246;yle inceleyiniz
 
Katılım
25 Mart 2005
Mesajlar
66
Sn.Necdet Yesertener ilk yolladığınızda genel toplam hatası vardı herhalde,teşekkür ederim.Anladığım kadarıyla önce boş satırları siliyorsunuz ve benim girdiğim sayı kadar satır ekliyorsunuz.Toplam içinse başlık satırı varmış gibi değerlendirip döngüyü 2 den başlatıp 65536 ya kadar 1 er ara ile bu sefer boş hücreleri kontrol ediyorsunuz.boş olana kadar değerleri topluyorsunuz.sonra ilk boşluğa toplam yazısına bir üsteki değeri ekleyip başlık yapıyoruz .Buraya kadar doğrumuyum.
Yada Zahmet olmazsa bu kodların yanına küçük bir açıklama rica etsem sizden başka soru sormıyacam söz.Gerçekten eğer bu kodları çözemezsem yani anlamazsam uyku uyuyamam.Şimdiden teşekkür ederim.
Çok özür dilerim edit yapıyorum.Birde mükerrer çalışmayı engellesek.yani 2 gere butona tıklarsam bir uyarı tarzında bir şey.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,428
Excel Vers. ve Dili
Ofis 365 Türkçe
Say&#305;n gcanlar, bence siz olay&#305; &#231;&#246;zm&#252;&#351;s&#252;n&#252;z. &#220;st &#252;ste &#231;al&#305;&#351;t&#305;rma olay&#305;n&#305; ben size b&#305;rak&#305;yorum.

Sizce nas&#305;l bir mant&#305;k y&#252;r&#252;tmeli?
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,428
Excel Vers. ve Dili
Ofis 365 Türkçe
Ses seda çıkmadı, iki kere çalışmayı önleyen şeklini ekliyorum dosyaya
 
Katılım
25 Mart 2005
Mesajlar
66
Sn.Necdet Yesertener merhabalar,&#214;ncelikle yard&#305;mlar&#305;n&#305;z i&#231;in te&#351;ekk&#252;r ederim.
Cevap yazamad&#305;&#287;&#305;m i&#231;in kusura bakmay&#305;n.Mesai bitince vba y&#305; b&#305;rak&#305;p ka&#231;t&#305;m valla.&#350;imdi sizinde dedi&#287;iniz gibi kendim yapmaya &#231;al&#305;&#351;t&#305;m.Dedimki toplam&#305; ald&#305;&#287;&#305; yere bir de&#287;i&#351;ken koyay&#305;m at&#305;yorum kont bu de&#287;i&#351;kene bir de&#287;er verip ilk a&#231;&#305;l&#305;&#351;ta kontrol edeyim dedim ama olmad&#305;.Bu arada sizin yazm&#305;&#351; oldu&#287;unuz kodlarda adet sorulan inputbox ta bo&#351; b&#305;rak&#305;nca ve iptal(cancel) t&#305;klay&#305;nca hata veriyordu.Nacizane ufak bir de&#287;i&#351;iklik yapt&#305;m kodlar a&#351;a&#287;&#305;da.Ama kontrol olay&#305;n&#305; yapamad&#305;m.&#351;imdi sizin son yollad&#305;&#287;&#305;n&#305;z &#246;rne&#287;i yeni indirdim bak&#305;cam.Tekrar te&#351;ekk&#252;rler.Cevab&#305;n ge&#231;ikmesi i&#231;in &#246;z&#252;r.
birde sizin yad&#305;&#287;&#305;n&#305;z form&#252;l&#252; anlamak ad&#305;na ver seferinde i d&#246;ng&#252;z&#252;n&#252;n de&#287;eri ve toplam&#305;n de&#287;erini sayfada bir yere yazd&#305;rd&#305;m.&#199;al&#305;&#351;ma mant&#305;&#287;&#305;n&#305; &#231;&#246;zmek i&#231;in.
Sub ekle()
adet = Application.InputBox("Ka&#231; Sat&#305;r Eklemek &#304;stiyorsunuz", "L&#252;tfen")
If adet = False Or adet = "" Then
MsgBox "sat&#305;r eklenemedi", vbInformation, "&#220;zg&#252;n&#252;m"
Exit Sub
End If
On Error GoTo Devam
Range("A1:A" & [a65536].End(3).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Devam:
For i = [a65536].End(3).Row To 2 Step -1
If Cells(i, "A") <> Cells(i + 1, "A") Then
Rows(i + 1 & ":" & i + adet).Insert
End If
Next i
toplam = 0
Genel_Toplam = 0

For i = 2 To [a65536].End(3).Row
If Cells(i, "A") = "" Then
Cells(i, "A") = "Toplam " & Cells(i - 1, "A")
Cells(i, "B") = toplam
Range(Cells(i, "A"), Cells(i, "B")).Font.Bold = True
toplam = 0
i = i + adet - 1
Cells(i - 1, "j") = i
Cells(i - 1, "k") = toplam
Else
toplam = toplam + Cells(i, "B")
Genel_Toplam = Genel_Toplam + Cells(i, "B")
Cells(i - 1, "l") = i
Cells(i - 1, "m") = toplam
End If

Next i
Cells(i - 1, "n") = i
Cells(i - 1, "o") = toplam
Cells(i, "A") = "Toplam " & Cells(i - 1, "A")
Cells(i, "B") = toplam
i = i + 1
Cells(i, "A") = "Genel Toplam"
Cells(i, "B") = Genel_Toplam
Range(Cells(i - 1, "A"), Cells(i, "B")).Font.Bold = True

End Sub
 
Üst