• DİKKAT

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

Makro Yardımı hk.

  • Konbuyu başlatan Konbuyu başlatan Lecay
  • Başlangıç tarihi Başlangıç tarihi
Katılım
3 Ekim 2011
Mesajlar
89
Excel Vers. ve Dili
Excel 2013 ENG
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

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
 
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.
 
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.
 
Ö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
 
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.
 
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

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

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
 
#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?
 
#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?
 
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?
 
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
 
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:
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
 
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
 
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
 
Geri
Üst