Makro Yardımı hk.

Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Arkadaşlar merhaba,

Dosyada "REQUEST" sayfasında bir matematik kurulu. Buradaki verileri makro ile "RESULT" sayfası K'dan N'ye kadar olan bölümdeki gibi yazdırmak istiyorum.

Kısaca talebime değinmek gerekirse; makro önce "REQUEST" sayfası J sütunundaki satırlardan yola çıkarak tek tek "A sütunu Order'daki B sütunu Item'daki ve K sütunu Truck ID'deki verileri RESULT sayfasındaki A-B ve D sütunlarına yazacak; L sütunundaki toplam miktarı da J sütununda gördüğü miktar kadar eşit bir şekilde bölecek.

Eğer J sütunundaki değer "0" ise A sütunu Order'daki B sütunu Item'daki M sütunu remaining CS'deki ve Q sütunu +1'deki verileri yazacak.

Daha önce bu kadar şarta bağlı makro yazmadığım için oldukça zorlandım. Yardım edebilirseniz çok sevinirim.
 

Ekli dosyalar

Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Arkadaşlar yardım edebilecek kimse yok mu ?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
L sütunundaki toplam miktarı da J sütununda gördüğü miktar kadar eşit bir şekilde bölecek.
Eğer J sütunundaki değer "0" ise A sütunu Order'daki B sütunu Item'daki M sütunu remaining CS'deki ve Q sütunu +1'deki verileri yazacak.

1. İzah etmeye çalıştığınız yer RESULT sayfası C sütunu sanırım. Teyit ediniz lütfen
2.
Result sayfanızda ilk iki satırı yukarıdaki açıklamanızla örtüştüremedim. Açıklarmısınız
 
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
L sütunundaki toplam miktarı da J sütununda gördüğü miktar kadar eşit bir şekilde bölecek.
Eğer J sütunundaki değer "0" ise A sütunu Order'daki B sütunu Item'daki M sütunu remaining CS'deki ve Q sütunu +1'deki verileri yazacak.

1. İzah etmeye çalıştığınız yer RESULT sayfası C sütunu sanırım. Teyit ediniz lütfen
2.
Result sayfanızda ilk iki satırı yukarıdaki açıklamanızla örtüştüremedim. Açıklarmısınız
1- - Evet Result C sütununa eşit bir şekilde bölecek. Örnek vermek gerekirse; result sayfasında 8 numaralı satırda J8 3 katı gösteriyor. L8'de 3 katın toplamının 1800 olduğunu. Buna göre result sayfasında bu siparişi alt alta 3 satırda 600 600 600 görmeliyim. E8'deki toplam miktara ulaşmam içinde M sütunu miktarı 57 olan bir satır daha yazmam gerektiğini gösteriyor.

2- - Imm daha detaylı şöyle söyleyebilirim. Result J'ye bakarak Order Item ve Truck ID'yi kaç satır çoğaltacağımı buluyorum. L'ye görede Order Quantity'lerini parçalıyorum. E sütunundaki toplam miktardan kalan birşey olursa onu da M'de görüyorum ve onu da Order Item Remaining CS ve +1 sütunlarındaki değerleri ile tek satırda yazmaya çalışıyorum.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Aşağı
CoffeeScript:
Sub ResultYaz()
Dim Veri, Liste(), Son As Long, Adet As Long, i As Long, Say As Long, x As Byte
    Son = Worksheets("REQUEST").Range("A" & Rows.Count).End(3).Row
    Veri = Worksheets("REQUEST").Range("A3:Q" & Son).Value
    Adet = WorksheetFunction.Sum(Worksheets("REQUEST").Range("J3:J" & Son))
    Adet = Adet + WorksheetFunction.CountIf(Worksheets("REQUEST").Range("J3:J" & Son), 0)
    Adet = Adet + WorksheetFunction.CountIf(Worksheets("REQUEST").Range("M3:M" & Son), ">" & 0)
    ReDim Liste(1 To Adet, 1 To 4)
    For i = LBound(Veri, 1) To UBound(Veri, 1)
        For x = 1 To WorksheetFunction.Max(1, Veri(i, 10))
            Say = Say + 1
            Liste(Say, 1) = Veri(i, 1)
            Liste(Say, 2) = Veri(i, 2)
            Liste(Say, 3) = Veri(i, 12) / WorksheetFunction.Max(1, Veri(i, 10))
            Liste(Say, 4) = Veri(i, 11)
        Next x
        If Veri(i, 13) > 0 Then
            Say = Say + 1
            Liste(Say, 1) = Veri(i, 1)
            Liste(Say, 2) = Veri(i, 2)
            Liste(Say, 3) = Veri(i, 13)
            Liste(Say, 4) = Veri(i, 17)
        End If
    Next i
    Worksheets("RESULT").Range("A2:D" & Rows.Count).Clear
    Worksheets("RESULT").Range("A2").Resize(Say, 4) = Liste
End Sub
daki kodu bir modüle ekleyin ve istediğiniz sayfada bir butona aktararak çalıştırabilirsiniz.
 
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Ömer bey, süper oldu tam istediğim gibi çalışıyor ama 1 satırı atladı kod. Neden olabilir ?

Aşağıdaki siparişte kırmızı ile vurguladığım satırı yazmadan diğer satıra geçiş yaptı.

231743
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Dosyanız hesaplama seçeneği Manuel konumdaydı. Onu otomatiğe alın. Dosyanızı kapatıp açın. Tekrar deneyin.
Bende de aynı hata vardı. Kodları hiç değiştirmedim, şu anda hata gözükmüyor.
 
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Dosyanız hesaplama seçeneği Manuel konumdaydı. Onu otomatiğe alın. Dosyanızı kapatıp açın. Tekrar deneyin.
Bende de aynı hata vardı. Kodları hiç değiştirmedim, şu anda hata gözükmüyor.
Direk uyguladım fakat değişmedi. Kontrol edebilir misiniz ?
 

Ekli dosyalar

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Gönderdiğiniz dosyayı açtım çalıştırdım. Direkt ekran görüntüsü ve dosyanız (gönderdiğiniz haline hiç dokunmadan) ekte.
231770
 

Ekli dosyalar

Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Gönderdiğiniz dosyayı açtım çalıştırdım. Direkt ekran görüntüsü ve dosyanız (gönderdiğiniz haline hiç dokunmadan) ekte.
Ekli dosyayı görüntüle 231770
Evet Ömer bey orada problem yok zaten. 97523254 nolu siparişi çift satır alt alta yazması gerekirken sadece tek satır olarak yazıyor. Halbuki değeri 0 olan ve Truck ID'si 5 olan 1 satır daha var (kırmızı ile vurguladığım satır) onu yazmıyor.

231778
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
#1 nolu mesajınızda şöyle demiştiniz.
L sütunundaki toplam miktarı da J sütununda gördüğü miktar kadar eşit bir şekilde bölecek.
Eğer J sütunundaki değer "0" ise A sütunu Order'daki B sütunu Item'daki M sütunu remaining CS'deki ve Q sütunu +1'deki verileri yazacak.


Bahsettiğiniz satır REQUEST sayfası A9:Q9 satırı değil mi?
L9 hücresinde 144, J9 hücresinde 1 yazıyor. Bu sebeple C sütununa 144 yazıyorum. Yanlış mı?
J9 hücresindeki değer SIFIR değil, M9 Remaining CS SIFIR. Bu durmda neden yeni bir satır yazıyoruz? Kalan birşey yok ki?
 
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
#1 nolu mesajınızda şöyle demiştiniz.
L sütunundaki toplam miktarı da J sütununda gördüğü miktar kadar eşit bir şekilde bölecek.
Eğer J sütunundaki değer "0" ise A sütunu Order'daki B sütunu Item'daki M sütunu remaining CS'deki ve Q sütunu +1'deki verileri yazacak.


Bahsettiğiniz satır REQUEST sayfası A9:Q9 satırı değil mi?
L9 hücresinde 144, J9 hücresinde 1 yazıyor. Bu sebeple C sütununa 144 yazıyorum. Yanlış mı?
J9 hücresindeki değer SIFIR değil, M9 Remaining CS SIFIR. Bu durmda neden yeni bir satır yazıyoruz? Kalan birşey yok ki?
Ya aslında haklısınız evet. Ben 0 olanları ikinci bir makro ile sildiririm diye düşünüyordum. Kodun atladığı bir yer varsa onu da yakalayayım istediğim için sormak istemiştim size. Bu arada J9'daki sıfırlarda gereksiz. J9'a da sıfırdan büyük olanları yazıp kalanlara bakabilir mi ? Yoksa düşündüğüm gibi yeni bir makro ile sıfırları sildirmek mi daha kolay olur?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Ben ilk verdiğiniz önermeler ve ilk dosyanızda paylaştığınız manuel çözümü örtüştürerek bir kod yazdım.

Ben bir şeyler anlıyorum ama yanlış anlamış olmaktan çekiniyorum.

1. J sütununda Sıfır yazan satırlar listeye asla dahil olmayacak
2. J sütununda sıfırdan büyük olanları pay ettikten sonra varsa kalan miktar için M sütununda değer varsa bunun için de listeye 1 satır daha ilave edilecek.

Eğer bunlar yanlışsa, siz ne istediğinizi tekrar düşünüp açıklayabilir misiniz?
 
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Ben ilk verdiğiniz önermeler ve ilk dosyanızda paylaştığınız manuel çözümü örtüştürerek bir kod yazdım.

Ben bir şeyler anlıyorum ama yanlış anlamış olmaktan çekiniyorum.

1. J sütununda Sıfır yazan satırlar listeye asla dahil olmayacak
2. J sütununda sıfırdan büyük olanları pay ettikten sonra varsa kalan miktar için M sütununda değer varsa bunun için de listeye 1 satır daha ilave edilecek.

Eğer bunlar yanlışsa, siz ne istediğinizi tekrar düşünüp açıklayabilir misiniz?
Her ikisi de doğru aynen belirttiğiniz gibi
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
J sütunda sıfır yazıp, M sütunda kalan miktar sıfırdan büyükse ne olacak?
Ben bunları da listeleyecek şekilde düzenledim. İnceleyin.
C++:
Sub ResultYaz()
Dim Veri, Liste(), Son As Long, Adet As Long, i As Long, Say As Long, x As Byte
    Son = Worksheets("REQUEST").Range("A" & Rows.Count).End(3).Row
    Veri = Worksheets("REQUEST").Range("A3:Q" & Son).Value
    Adet = WorksheetFunction.Sum(Worksheets("REQUEST").Range("J3:J" & Son))
    'Adet = Adet + WorksheetFunction.CountIf(Worksheets("REQUEST").Range("J3:J" & Son), 0)
    Adet = Adet + WorksheetFunction.CountIf(Worksheets("REQUEST").Range("M3:M" & Son), ">" & 0)
    ReDim Liste(1 To Adet, 1 To 4)
    For i = LBound(Veri, 1) To UBound(Veri, 1)
        For x = 1 To Veri(i, 10)
            Say = Say + 1
            Liste(Say, 1) = Veri(i, 1)
            Liste(Say, 2) = Veri(i, 2)
            Liste(Say, 3) = Veri(i, 12) / Veri(i, 10)
            Liste(Say, 4) = Veri(i, 11)
        Next x
        If Veri(i, 13) > 0 Then
            Say = Say + 1
            Liste(Say, 1) = Veri(i, 1)
            Liste(Say, 2) = Veri(i, 2)
            Liste(Say, 3) = Veri(i, 13)
            Liste(Say, 4) = Veri(i, 17)
        End If
    Next i
    Worksheets("RESULT").Range("A2:D" & Rows.Count).Clear
    Worksheets("RESULT").Range("A2").Resize(Say, 4) = Liste
End Sub
 
Son düzenleme:
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
J sütunda sıfır yazıp, M sütunda kalan miktar sıfırdan büyükse ne olacak?
Ben bunları da listeleyecek şekilde düzenledim. İnceleyin.
C++:
Sub ResultYaz()
Dim Veri, Liste(), Son As Long, Adet As Long, i As Long, Say As Long, x As Byte
    Son = Worksheets("REQUEST").Range("A" & Rows.Count).End(3).Row
    Veri = Worksheets("REQUEST").Range("A3:Q" & Son).Value
    Adet = WorksheetFunction.Sum(Worksheets("REQUEST").Range("J3:J" & Son))
    'Adet = Adet + WorksheetFunction.CountIf(Worksheets("REQUEST").Range("J3:J" & Son), 0)
    Adet = Adet + WorksheetFunction.CountIf(Worksheets("REQUEST").Range("M3:M" & Son), ">" & 0)
    ReDim Liste(1 To Adet, 1 To 4)
    For i = LBound(Veri, 1) To UBound(Veri, 1)
        For x = 1 To Veri(i, 10)
            Say = Say + 1
            Liste(Say, 1) = Veri(i, 1)
            Liste(Say, 2) = Veri(i, 2)
            Liste(Say, 3) = Veri(i, 12) / Veri(i, 10)
            Liste(Say, 4) = Veri(i, 11)
        Next x
        If Veri(i, 13) > 0 Then
            Say = Say + 1
            Liste(Say, 1) = Veri(i, 1)
            Liste(Say, 2) = Veri(i, 2)
            Liste(Say, 3) = Veri(i, 13)
            Liste(Say, 4) = Veri(i, 17)
        End If
    Next i
    Worksheets("RESULT").Range("A2:D" & Rows.Count).Clear
    Worksheets("RESULT").Range("A2").Resize(Say, 4) = Liste
End Sub
Gayet güzel oldu Ömer bey teşekkürler.

Yanlız öngöremediğim birşey ile karşılaştım. 0'dan büyük olanları pay ederken yazdırdığım Truck ID aynı olunca sistemimde hata aldım. Bu rakama aşağıda belirttiğim şekilde +1 ilave etmek mümkün mü ?

231789
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Koddaki For döngüsünde aşağıdaki kısımda +x-1 yazmanız yeterli oalcaktır.
For x = 1 To Veri(i, 10)
Say = Say + 1
Liste(Say, 1) = Veri(i, 1)
Liste(Say, 2) = Veri(i, 2)
Liste(Say, 3) = Veri(i, 12) / Veri(i, 10)
Liste(Say, 4) = Veri(i, 11) + x - 1
Next x
 
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
Altın Üyelik Bitiş Tarihi
30-01-2024
Koddaki For döngüsünde aşağıdaki kısımda +x-1 yazmanız yeterli oalcaktır.
For x = 1 To Veri(i, 10)
Say = Say + 1
Liste(Say, 1) = Veri(i, 1)
Liste(Say, 2) = Veri(i, 2)
Liste(Say, 3) = Veri(i, 12) / Veri(i, 10)
Liste(Say, 4) = Veri(i, 11) + x - 1
Next x
Ömer bey gerçekten çok teşekkür ederim size. Yordum sizi. Şuanda tam istediğim gibi oldu.
Yordum sizi. Tekrar teşekkürler
 
Üst