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.
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!!!
Rozklad podľa podmienok
-
- nováček
- Příspěvky: 32
- Registrován: květen 12
- Pohlaví:
- Stav:
Offline
Rozklad podľa podmienok
- Přílohy
-
- rozkladanie.xlsx
- (86.6 KiB) Staženo 31 x
-
- Level 4.5
- Příspěvky: 1544
- Registrován: březen 11
- Bydliště: Drsná Vysočina :D
- Pohlaví:
- Stav:
Offline
Re: Rozklad podľa podmienok
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áš.
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
-
- nováček
- Příspěvky: 32
- Registrován: květen 12
- Pohlaví:
- Stav:
Offline
Re: Rozklad podľa podmienok
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
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á.
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
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
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů