Tüm Versiyonu Göster : ne yapmam gerek üçüncü sayfa için
mustafakayiran
03-02-2005, 12:36
selam
umarım bana yardımcı olursunuz şimdiden teşekkürler
sorunum 1.sayfa 100 kişilik bir listem var ve bu listede adı soyadı ve maaşı yazılı bu listeyi 2.sayfaya 25 er kişilik liste halinde beş satır bırakarak nasıl makro yardımıyla aktarabilirim? birtürlü yapamadım (25+25) iki sayfa yazdırabiliyorum fakat üçünçü 25 kişilik yazdırmayı yapamıyorum okadar uğraştım ikinci 25 - 100 e kadar devam ediyor.
lütfen bana bir kod örneği yazın yada örnek bir çalışma. Butona bastığımda 25 kişiyi alt alta yazacak 5 satır boşluk bırakacak 25 kişi yazdıracak sonra 5 satır bırakacak 25 kişi yazdıracak.
iyi çalışmalar
danersin
03-02-2005, 12:56
Kod yazmayı denediğinize göre aşağıdaki kodu uyarlayabilirsiniz.
Kod içinde açıklama mevcut.
Sub dene()
i = 1 '100 lük sayfada sayaç
j = 1 '25'lik sayfada sayaç
Do While Cells(i, 1) <> "" '100 lük sayfada ilk sütun dolu olduğu müddetçe
Worksheets("25liksayfa").Cells(j, 1) = Cells(i, 1)
If j / 25 = Int(j / 25) Then j = j + 4 'buradaki 4'ü değiştirerek kaç satır bırakacağınızı ayarlayın, mantık 25'in tam katlarına geldiğinde 4 satır atla
j = j + 1
i = i + 1
Loop
End Sub
j / 25 = Int(j / 25) => j mod 25 = 0
da olabilir.
danersin
03-02-2005, 15:04
Zaten bugün Levent beyde ortada gözükmedi, sorulara kod yazmaktan hiç modla uğraşacak modda değilim :hiho: eskiden (qbasic'te) modmu vardı..
Mustafa bey Alpen bey haklı , amaç aynı olsada siz daha iyisine alışın baştan.
Levent Menteşoğlu
03-02-2005, 15:08
Zaten bugün Levent beyde ortada gözükmedi
Haklısınız,şu saate kadar kar yağışı nedeniyle fabrikada elektrik kesikti,şimdi geldi ancak girebildim.
mustafakayiran
03-02-2005, 16:14
ewet o şekildede olabilir ama benim yazdığım kod şu şekilde ve ben bunu geliştirmek istiyorum döngü yapmaya çalışıyorum ama nafile kontrol ekliyorum olmuyor ayrıca özür dilerim ilk sorduğum soruda tam anlatamadım;
sub deneme1 ()
Dim ilksatir, sonsatir, kontrol, ilksatir1, sonsatir2, ikincisayfa, ilksat, sira, adi, soyadi, maasi
adi = sayfa2_3
soyadi = sayfa2_4
maasi = sayfa2_5
ilksatir1 = 10
sonsatir2 = 200
ilksat = 10
ikincisayfa = 40
ilksatir = 10
sonsatir = 130
kontrol1 = 1
For satir = ilksatir1 To sonsatir2
If Sheets("sayfa2").Cells(satir, 2) = "" Then 'sayfa2 de kimse kalmadıysa bitir
GoTo son ' sona git
End If
If kontrol = 1 Then ' kontrol 1e eşitise ilk 25 kişiyi sırala
If ilksatir >= ilksat + 25 Then '25 kişi sıralandı
ilksatir = ikincisayfa ' 25 kişi sırandı ve ikinci 25 kişi sıralamak icin 40cı satırdan başla
kontrol = 2 'sayfayı kontrol et
End If
End If
Sheets("sayfa1").Cells(ilksatir, 2) = sira
sira = sira + 1
Sheets("sayfa1").Cells(ilksatir, 3) = Sheets("sayfa2").Cells(satir, adi)
Sheets("sayfa1").Cells(ilksatir, 4) = Sheets("sayfa2").Cells(satir, soyadi)
Sheets("sayfa1").Cells(ilksatir, 6) = Sheets("sayfa2").Cells(satir, maasi)
End If
ilksatir1 = ilksatir1 + 1 'her satırı 1 arttırarak yaz
If ilksatir1 = sonsatir2 Then 'ilk satır eşitse son son satıra kişileri 1 arttır ve yaz
sayfa2 = sayfa2 + 1
Goto son
End if
Next
son:
End Sub
yardımlarınız için teşekkür ederim
yukarıdaki kod benim çoğu çalışmamda bana çok yardımcı oluyor ve geliştirmek istiyorum.
iyi çalışmalar
danersin
03-02-2005, 16:25
Ãu anda tam çıkıyordum işten ama kodunuza şöyle bir göz attımda,
VBE editörünüzde Options'tan require variable declaration özelliğini açıp
sayfa başlarınıza "Option Explicit" koymanız lazım değişkenlerinizi kontrol etmek için...
Birbiri ile uymayan bir sürü değişken var..
For satir = ilksatir1 To sonsatir2
ilksatir1 ne?
sonsatir2 ne?
yukarıda ilksatir ve sonsatir'ı belirtmişsiniz...
mustafakayiran
03-02-2005, 17:30
okk haklısın değiştirdim bu şekilde olması gerekiyordu
umarım bu sorunum en kısa zamanda çözülür
Levent Menteşoğlu
03-02-2005, 17:31
Yazdığınız kodda for....next döngüsünde next yerine "next satir" şeklinde yazmalıydınız. Döngüler için aşağıdaki linki inceleyiniz. Ayrıca bir dosya eklerseniz kodunuzda ne yapmak istediğiniz daha iyi anlaşılacaktır.
http://www.excel.web.tr/viewtopic.php?t=1902
Ayrıca "MAKRO DERSANESİ" başlığı altında diğer bilgileride inceleyiniz.
mustafakayiran
03-02-2005, 17:33
sayın leventm ilginize teşekküre derim söylediginiz gibi eksiklikleri tamamladım tekrar kontrol ederseniz sevinirim
Levent Menteşoğlu
03-02-2005, 17:45
"next" satırını "next satir" olarak değiştirin.
Akşam daha detaylı bir inceleme yapabilirim. Ãu an çıkmam gerekiyor.
Levent Menteşoğlu
03-02-2005, 22:41
Yazdığınız kodlarda bazı değişiklikler yaptım. Bu şekilde deneyiniz. Kodların uygulaması içinde ekteki dosyayı inceleyebilirsiniz.
[vb:1:8b95c3f978]Sub deneme1()
Dim ilksatir, sonsatir, kontrol, ilksatir1, sonsatir2, ikincisayfa, ilksat, sira, adi, soyadi, maasi
adi = 3
soyadi = 4
maasi = 5
ilksatir1 = 10
sonsatir2 = 200
ilksat = 10
ikincisayfa = 40
ilksatir = 10
sonsatir = 130
kontrol = 1
sira = 0
For satir = ilksatir1 To sonsatir2
If Sheets("sayfa2").Cells(satir, 2) = "" Then 'sayfa2 de kimse kalmadıysa bitir
GoTo son ' sona git
End If
If satir - 10 >= 25 * kontrol Then '25 kişi sıralandı
kontrol = kontrol + 1
ilksatir = ilksatir + 5 ' 25 kişi sırandı ve ikinci 25 kişi sıralamak icin 40cı satırdan başla
End If
Sheets("sayfa1").Cells(ilksatir, 2) = sira
sira = sira + 1
Sheets("sayfa1").Cells(ilksatir, 3) = Sheets("sayfa2").Cells(satir, adi)
Sheets("sayfa1").Cells(ilksatir, 4) = Sheets("sayfa2").Cells(satir, soyadi)
Sheets("sayfa1").Cells(ilksatir, 6) = Sheets("sayfa2").Cells(satir, maasi)
ilksatir = ilksatir + 1 'her satırı 1 arttırarak yaz
Next satir
son:
End Sub
[/vb:1:8b95c3f978]
danersin
03-02-2005, 23:09
Açık söyliyim bu şekilde çözmek beni baya uğraştırdı, Levent beyin yolladığı dosya olmasaydı anlayamayacaktım.. Diğer arkadaşlarada faydası olur diye dilimin döndüğünce açıklamalı bir örnekte ben yolluyorum, bu kodları aynen Levent beyin dosyasına yapıştırarak kullanabilirsiniz. Ben yine dayanamadım biraz daha fazla değiştirdim kod mantığınızı..
Sub deneme1()
Dim ilksatir, sonsatir, kaynaksatbas, kaynaksatson, ikincisayfa, ilksat, sira, adi, soyadi, maasi, satir
Dim bolum1, bolum2, bolum3, bolum4
adi = 3
soyadi = 4
maasi = 5
kaynaksatbas = 10
kaynaksatson = 200
'HER SAYFANIN HANGİ SATIRDAN İTİBAREN YAZMAYA BAÃLAYACAÃINI BU BÃ?LÜM DEÃİÃKENLERİ İLE KONTROL ETTİM
'BU ÃEKİLDE TEK TEK VERMEK YERİNE BİR DEÃİÃKEN BELİRLEYİP Ã?RNEÃİN "BÃ?LÜM=10"
'BUNU KOD İÇİNDE 4 IF İLE YAZDIÃIM YERDE IF KOÃULUNU SAÃLADIÃI ZAMAN BÃ?LÜM=BÃ?LÜM+30
'ÃEKLİNDE ARTTIRARAK YAPABİLİRDİK
bolum1 = 10
bolum2 = 40
bolum3 = 70
bolum4 = 100
ilksatir = 10
sonsatir = 130 'İLK SATIRIN DEÃERİ KOD İÇİNDE bolum4+25'ten BÜYÜK OLDUÃUNDA MAKRO ZATEN SONA GİDECEÃİNDEN BU DEÃİÃKENE GEREK YOK
sira = 0
'KAYNAK SAYFADAKİ DEÃERLERDE SATIR ATLAMA OLMUYORSA DO-LOOP DÃ?NGÜSÜ KULLANMAK FOR DÃ?NGÜSÜNDEN DAHA PRATİK OLACAKTIR.
'SATIR ATLAMA OLDUÃUNU VARSAYARAK FOR DÃ?NGÜSÜNE DOKUNMUYORUM
For satir = kaynaksatbas To kaynaksatson
If Sheets("sayfa2").Cells(satir, 2) = "" Then 'sayfa2 de kimse kalmadıysa bitir
GoTo son ' sona git
End If
'SİZİN KONTROL DEÃİÃKENİ İLE YAPMAYA ÇALIÃTIÃINIZ İÃLEM İÇİN 4 AYRI IF KULLANDIM, SADECE EÃİT İSE ilksatir'in DEÃERİNİ
'DEÃİÃTİRİYOR, >= KULLANIRSAM DÃ?NGÜ HER GELDİÃİNDE AYNI SAYIYA EÃİTLER VE HEP AYNI SATIRA YAZAR
If ilksatir = bolum1 + 25 Then ilksatir = bolum2
If ilksatir = bolum2 + 25 Then ilksatir = bolum3
If ilksatir = bolum3 + 25 Then ilksatir = bolum4
If ilksatir = bolum4 + 25 Then GoTo son
'EÃER NETİCELERİ FARKLI SAYFALARA YAZDIRMAK İSTİYORSAK Sheets("sayfa1") YERİNE SHEETS(3) GİBİ
'SAYFA İNDİS NUMARALARINDAN FAYDALANABİLİRİZ VE bolum DEÃİÃKENİMİZ HER ARTTIÃINDA
'SAYFAMIZINDA İNDİS NUMARASINI BİR ARTTIRIRIZ.
Sheets("sayfa1").Cells(ilksatir, 2) = sira
sira = sira + 1
Sheets("sayfa1").Cells(ilksatir, 3) = Sheets("sayfa2").Cells(satir, adi)
Sheets("sayfa1").Cells(ilksatir, 4) = Sheets("sayfa2").Cells(satir, soyadi)
Sheets("sayfa1").Cells(ilksatir, 6) = Sheets("sayfa2").Cells(satir, maasi)
'End If
ilksatir = ilksatir + 1 'her satırı 1 arttırarak yaz
'ARAYA BAÃKA KOD YAZILMAYACAKSA BURADAKİ İF BLOÃUNA GEREK YOK, ZATEN KAYNAKSATBAS VE KAYNAKSATSON
'DEÃERLERİNİ DÃ?NGÜ İÇİNDE HİÇ DEÃİÃTİRMEDİÃİMİZDEN ONLAR DÃ?NGÜ BİTTİÃİNDEDE İLK ATADIÃIMIZ DEÃERLER
'OLAN 10 VE 200 OLARAK KALACAK
If kaynaksatbas = kaynaksatson Then
GoTo son
End If
Next satir
son:
End Sub
mustafakayiran
04-02-2005, 08:01
günaydın,
ofise girdigim ilk an internete bağlanıp sorduğum sorunun cevaplanıp cevaplanmadığını öğrenmekti ve baktım ki sevgili arkadaşlarım çok ilgili davranmış ve bana yardımcı olmuşlar. herkese ayrı ayrı teşekkür ederim özellikle sayın leventm size çünkü sanki bir evödevi gibi algıladınız gerçekten teşekkür ederim bu sorunumu hallettiginiz için. Sizede teşekkürü bir borç bilirim sayın ersin bey.
iyi çalışmalar ve hayatınızda mutluluklar dilerim
vBulletin v3.7.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.