Rozklad podľa podmienok

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

mirek443_za
nováček
Příspěvky: 32
Registrován: květen 12
Pohlaví: Muž
Stav:
Offline

Rozklad podľa podmienok

Příspěvekod mirek443_za » 14 lis 2013 10:12

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!!!
Přílohy
rozkladanie.xlsx
(86.6 KiB) Staženo 31 x

Reklama
cmuch
Level 4.5
Level 4.5
Příspěvky: 1544
Registrován: březen 11
Bydliště: Drsná Vysočina :D
Pohlaví: Muž
Stav:
Offline

Re: Rozklad podľa podmienok

Příspěvekod cmuch » 15 lis 2013 20:36

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

mirek443_za
nováček
Příspěvky: 32
Registrován: květen 12
Pohlaví: Muž
Stav:
Offline

Re: Rozklad podľa podmienok

Příspěvekod mirek443_za » 18 lis 2013 10:59

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á.
Přílohy
rozkladanie-príklad.xlsm
(42.69 KiB) Staženo 13 x


Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů