< návrat zpět
MS Excel
Téma: Roztřídění databáze
Zaslal/a Miroslav8514 3.2.2014 20:07
Dobrý den,
chci vás zkušené borce požádat o pomoc.
Jde mi o roztřídění dlouhého seznamu dat tím způsobem, že celý seznam potřebuji rozsekat na bloky dat mezi třetími pátky v každém měsící. Tyto jednotlivé bloky poté zkopírovat do příslušných listů. Konkrétně mezi třetími pátky v měsíci je 21, nebo 26 pracovních dní -> tudíž budou 2 různé bloky dat které chci kopírovat do listů 21 nebo 26 dní.
Problém je v tom, že data budou každý den stahována z internetu, takže nelze použít pevné odkazování na konkrétní buňky jelikož se celý seznam bude díky importu nových dat posouvat směrem dolů. Je tedy nutné nějakým způsobem vyhodnotit sloupec M-> kde se nachází shody (1), kolik kalendářních dní je mezi jednotlivými shodami a na základě počtu kalendářních dní bloky mezi shodami rozkopírovat do listů.
Jakmile dosáhnu rozkopírování, tak v každém listu budu mít tabulky se stejným počtem řádků (21 nebo 26) a s tím už budu moci sám mechanicky dále pracovat (počítat min/max...).
V přiloženém excelu jsou napsány další informace, snad to bude srozumitelné :-) Napadá vás jakým způsobem toto vyřešit?
PS: "List1" obsahuje vzorce pro download dat, nebude vám fungovat - je potřeba soft XLQ. Data ve formě čísel jsem umístil do listu "data"
http://ulozto.cz/xVanQf2G/ukazka-xlsx
Děkuji
Palooo(4.2.2014 16:21)#017666 ja som to zacal riesit ale nejak nechapu ako zistim co je 26dni a 21dni ... ked to ma 20 25 19 21 atd. pocet riadkou
citovat
Miroslav8514(4.2.2014 17:41)#017670 Palo,
počet dní lze zjistit počtem pracovních dní mezi datumy třetích pátků ve sloupci L.
Konkrétně v tabulce např. vzorcem: =NETWORKDAYS(L16;L34) výsledkem bude 21 - to znamená, že tento blok mezi 16 a 34 řádkem zkopírovat na list pro 21 dní.
citovat
Palooo(5.2.2014 9:22)#017677 ten subor co ste dali ako testovaci je moc velky tak tu len hodim makro ktore to podla toho suboru roztriedi do sheetov
upozornujem nekontroluje co sa uz v tom sheete nachadza ... len to postupne po riadkou doplna do sheetov
Sub aStart()
Dim a1 As Integer
Dim a2 As Integer
Dim aDate(1) As Integer
With Sheets("data")
For x = 7 To .Cells(7, 1).End(xlDown).Row
If .Cells(x, 13) = "1" Then
y = y + 1
If y = 1 Then aDate(0) = x Else aDate(1) = x
If y = 2 Then
Z = Application.WorksheetFunction.NetworkDays(.Cells(aDate(0), 12), .Cells(aDate(1), 12))
Select Case Z
Case -21
x1 = Sheets("21 dní").Cells(Rows.Count, 1).End(xlUp).Row + 2
.Range(.Cells(aDate(0), 1), .Cells(aDate(1), 13)).Copy Destination:=Sheets("21 dní").Cells(x1, 1)
Case -26
x1 = Sheets("26 dní").Cells(Rows.Count, 1).End(xlUp).Row + 2
.Range(.Cells(aDate(0), 1), .Cells(aDate(1), 13)).Copy Destination:=Sheets("26 dní").Cells(x1, 1)
End Select
End If
If y = 2 Then aDate(0) = aDate(1): y = 1
End If
Next
End With
End Subcitovat
Miroslav8514(7.2.2014 19:07)#017750