< návrat zpět

MS Excel


Téma: Roztřídění databáze rss

Zaslal/a 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

Zaslat odpověď >

#017666
avatar
ja som to zacal riesit ale nejak nechapu ako zistim co je 26dni a 21dni ... ked to ma 20 25 19 21 atd. pocet riadkoucitovat
#017670
avatar
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
#017677
avatar
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 Sub
citovat
#017750
avatar
Palooo: Děkuji!citovat

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