Stránka 1 z 1

Rozklad podľa podmienok

Napsal: 14 lis 2013 10:12
od mirek443_za
Zdravím všetkých.

Chcel by som poprosiť o pomoc s funkciou, ktorá mi rozloží čísla v stlpci E podľa kritéria v stlpci i.

Trápim sa stým už asi týždeň a asi moje schopnosti vo VBA nato nestačia. :shock:
Problémy mi robí veľký počet podmienok, ktoré by mohli nastať.

Pre lepšiu ukážku prikladám prílohu.


Za akúkoľvek pomoc pekne ďakujem!!!

Re: Rozklad podľa podmienok

Napsal: 15 lis 2013 20:36
od cmuch
Tady je část kódu.
Je zde řešeno pokud je rovno nebo větší.
Když je menší je tam zatím jen text.
Potřeboval bych udělat příklad třeba na prvních 10 údajích.

Vyzkoušej a uvidíš, třeba už doděláš.

Kód: Vybrat vše

Sub RozlozeniCisel()
 
 Dim origSh As Object, nwSh As Object
 Dim radek As Long, EmptyRowNwSh As Long
 Dim kolikrat As Integer, opakuj As Integer
 Dim zbytek As Integer
 
 Application.ScreenUpdating = False

 Set origSh = ActiveSheet

 Set nwSh = Worksheets.Add

 origSh.Select

 For radek = 1 To Cells(Rows.Count, 1).End(xlUp).Row
   
  If Cells(radek, 5) = Cells(radek, 9) Then
 
    EmptyRowNwSh = nwSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
   
    nwSh.Rows(EmptyRowNwSh).Value = Rows(radek).Value
   
  ElseIf Cells(radek, 5) > Cells(radek, 9) Then
 
    kolikrat = Int(Cells(radek, 5) / Cells(radek, 9))

    For opakuj = kolikrat To 1 Step -1

      EmptyRowNwSh = nwSh.Cells(Rows.Count, 1).End(xlUp).Row + 1

      nwSh.Rows(EmptyRowNwSh).Value = Rows(radek).Value
      nwSh.Cells(EmptyRowNwSh, 5) = Cells(radek, 9)

      zbytek = Cells(radek, 5) - (kolikrat * Cells(radek, 9))
     
      If opakuj = 1 And zbytek > 0 Then
        nwSh.Rows(EmptyRowNwSh + 1).Value = Rows(radek).Value
        nwSh.Cells(EmptyRowNwSh + 1, 5) = zbytek
      End If
    Next opakuj
   
    ElseIf Cells(radek, 5) < Cells(radek, 9) Then
   
      EmptyRowNwSh = nwSh.Cells(Rows.Count, 1).End(xlUp).Row + 1

      nwSh.Rows(EmptyRowNwSh).Value = Rows(radek).Value
      nwSh.Cells(EmptyRowNwSh, 5) = "zatim nevim"
     
  End If
 Next radek
 
 Application.ScreenUpdating = True
End Sub

Re: Rozklad podľa podmienok

Napsal: 18 lis 2013 10:59
od mirek443_za
Ahoj

Skúšal som len nieje to akosi ono.

Možno som to zle alebo nedostatočne vysvetlil, preto prikladam celkový rozklad z predošlého príkladu, snáť bude ľahšie prísť na ten princíp

:bigups:

V princípe by to malo fungovať tak, že platí pre všetky riadky s rovnakým materiálom (stĺpec H):

1.Ak je hodnota > ako norma do vozíka (stĺpec I) tak sa riadok rozdelí na počet riadkov násobku + riadok zvyšok,
všetky ostatné hodnoty sú z tohto riadku.

2.Pokračuje sa zvyškom z danej palety, ak za ním nasleduje ešte paleta s rovnakým materiálom inak sa skočí na ďaľší materiál.

3. Ak sa pokračuje, tak za riadok so zvyškom sa vloží ďaľší riadok s hodnotou norma-zvyšok, všetky ostatné hodnoty
v riadku sú z riadka za vloženým riadkom, ks v tomto riadku za vloženým riadkom sa znížia o kusy vo vloženom riadku.

čiže za zvyšok vložiť riadok a tam hodnota = norma - zvyšok ostatné hodnoty su z zvyšok.offset(2,0)
kusy v zvyšok.offset(2,0) sa znížia o zvyšok.offset(0,1)

vzdy zvyšok + riadok za ním ak je rovnaký materiál musí byť norma

4. a takto sa pokračuje až kým sa za zvyškom nenachádza ďaľšia paleta s tým istým materiálom a ks < norma.

5. ak sú kusy v poslednom riadku materiálu = norme tak zvyšok odpadá.