< návrat zpět

MS Excel


Téma: třídění rss

Zaslal/a 30.11.2014 20:15

Dobrý večer, potřeboval bych poradit, vytvořil jsem makro na třídění, ale ještě to není ono lidi jak se mi kopírujou tak se mi stane že jsou tam dvakrát.
Jedná se mi o to mám tabulku s lidmi a potřebuju je nakopírovat do skupin a hodnota musí být takovou jakou navolím (100, 200, 300, atd.) . K úplné dokonalosti by to bylo že navolím i do skupiny počet osob (min jsou 3 a max 7). Děkuji za rady.

Příloha: zip22593_pokus-vyber.zip (37kB, staženo 19x)
Zaslat odpověď >

Strana:  1 2   další »
#022596
€Ł мσşqμΐτσ
nechápu moc co potřebuješ. píšeš, že chceš jednotky po 100;200;300... ale v tabulce nemas nic takového. podle čeho volíš který člověk do které skupiny. Makro se mi nechctelo krokovat je moc dlouhé 5
Popíš trochu víc svůj požadavek a dáme to dohromady 1citovat
#022597
avatar
To který člověk bude v jaké skupině je jedno, ale součet těch čísel u lidí musí dávat buď 100, 200 nebo třista a ve skupině musí být min 3 lidi a maximálně 7 a nesmí se opakovat, každý člověk musí být pouze jednou. Pokud to málo vysvětluji tak jedině udělám příklad ručně a pošlu sem jako přílohu.citovat
icon #022598
eLCHa
Jen technická
Pokud je výběr 100 + 2 a
pokud je Adolf AAA (60) + Matěj BBB (40)
Adolfa vyřazujete nebo může být další skupina Adolf AAA (60) + Milan DDD (40)citovat
#022600
avatar
Nerozumím otázce výběr 100 + 2

Adolfa AAA (60) vyřazuju - každá osoba pouze jednou ve skupině a v celkovém počtu.citovat
icon #022601
eLCHa
100 + 2 => součet = 100, počet = 2
ve skupině pouze jedenkrát, to je jasné, ale může být ve více skupinách?

Protože se málokdy vyskytne zadání, ne kterém se dá potrénovat volání procedury "sama sebe", tak jsem potrénoval.
Vyhledá to všechny možné kombinace a z nich už si potom sám můžete vyselektovat, které chcete.

Option Explicit

Sub subStart()
Dim sResult() As String
ReDim sResult(1 To 1)

Call subFindCombinations(sResult, Range("C1:C15"), 100)

'v tuto chvíli máte v proměnné (poli) sResult všechny možné kombinace vyhovující bez ohledu na jejich počet
'můžete tedy projet toto pole, vybrat si ty kombinace, které chcete a dále s nimi pracovat (například pokud tam je 1 středník - máte dva prvky)
End Sub

Private Sub subFindCombinations(ByRef sResult() As String, ByVal rRange As Range, ByVal iSum As Long, Optional sPreItems As String = vbNullString, Optional iFromRow As Long = 0)
Dim vVals As Variant
If rRange.Rows.Count = 1 Then
ReDim vVals(1 To 1)
vVals(1) = rRange.Value
Else
vVals = Application.Transpose(rRange.Value)
End If

Dim i As Long
For i = 1 To rRange.Rows.Count
If vVals(i) = iSum Then
Call subAddItem(sResult, sPreItems & ";" & iFromRow + i)
ElseIf vVals(i) < iSum Then
If i < rRange.Rows.Count Then
Call subFindCombinations(sResult, Range(rRange.Cells(i + 1), rRange.Cells(rRange.Rows.Count)), iSum - rRange.Cells(i).Value, sPreItems & ";" & iFromRow + i, iFromRow + i)
End If
End If
Next i

Set rRange = Nothing
End Sub

Private Sub subAddItem(ByRef sResult() As String, ByVal sValue As String)
If Not sResult(1) = vbNullString Then
ReDim Preserve sResult(1 To UBound(sResult) + 1)
End If

If sValue Like ";*" Then
sValue = Mid(sValue, 2)
End If
sResult(UBound(sResult)) = sValue
End Sub
citovat
#022602
avatar
ve skupině pouze jedenkrát, to je jasné, ale může být ve více skupinách?

Pouze v jedné skupiněcitovat
#022604
avatar
Nevím proč, kde dělám chybu, ale nic mi to nedělácitovat
#022608
avatar
Počet skupin je 6. To je konstantní počet? Musí být naplněny všechny skupiny tj.6? Nebo může být počet skupin různý podle zadání minimálního počtu lidí ve skupině, nebo podle jednotek na skupinu?
Uvádíš 6 skupin a minimálně 3 lidi ve skupině, přičemž se člověk nesmí opakovat (3*6=18) a máš 15 lidí?!
Co když navolíš jiný počet jednotek, třeba 200, celkový 600, kolik má být skupin?
I když bude počet lidí pravděpodobně různý, co když v tom Formu navolíš hodnoty, kterým nepůjde vyhovět?
Nějací lidi zůstanou. Všechny tyto podmínky bys mněl mít ujasněné, než začneš psát nějaké makro. Myslím, že bys mněl vybrat jeden parametr z předdefinované nabídky a ostatní odvodit.

Nebo jak píše ELCHA:
Vyhledá to všechny možné kombinace a z nich už si potom sám můžete vyselektovat, které chcete.
citovat
#022612
avatar
Podmínka je 3 až 7 lidí ve skupině, a jednotky 100, 200, 300, 400, 500, 600.

Skupin je jedno kolik bude.
Počet lidí se také může měnit, ale nesmí se opakovat ani ve skupině a ani v celku. Vždy jen jednou.citovat
#022619
avatar
No to je to o čem píšu.
Když zadáš 100 jednotek a min 3 lidi, dostaneš max 3 skupiny, další nepřidělíš.
Když zadáš 600 jednotek, tak máš v jedné skupině všech 15 lidí, ne max 7.
Když zadáš 400 jednotek, tak vytvoříš jednu skupinu na 400 jednotek a zbudou ti lidi s 200 jednotkami, které už nikam nepřidělíš.
Musíš být konkrétnější.citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje