< návrat zpět

MS Excel


Téma: počet dnů mezi dvěma daty rss

Zaslal/a 18.8.2014 10:10

v buňce B1 mám datum ve tvaru "14.4. - 18.4.2014" a potřeboval bych spočítat počet dnů mezi těmito daty. Vytvořil jsem tyto pomocné funkce

Function Cil(datumC)
Dim delkaRetezce As Long
Dim poZnak As Byte
delkaRetezce = Len(datumC)
poZnak = InStr(1, datumC, "-")
Kserazeni = Replace(Right(datumC, delkaRetezce - poZnak), " ", "")
Cil = Trim(Kserazeni)
End Function

Function Start(datumC)
Dim delkaRetezce As Long
Dim poZnak As Byte
delkaRetezce = Len(datumC)
poZnak = InStr(1, datumC, "-")
Kserazeni = Left(datumC, poZnak - 1)
rok = Right(datumC, 4)
Start = Trim(Kserazeni) & rok
End Function



a zkoušel jsem použít Cil - Start v makru VBA


Sub prepoctiCv()

Cil = Cil(Sheets("list1").Range("B1"))
Start = Start(Sheets("list1").Range("B1"))
vysledek As Long
vysledek = Cil.Value - Start.Value
Debug.Print vysledek

End Sub

, ale tam to zaboha nefunguje. Přitom pokud zapíšu do buňky vzorec =Cil(B1) - Start(B1) tak to funguje. Můžete mi s tím někdo pomoct.

Zaslat odpověď >

#021188
avatar
skuste to konvertnut na date a potom to odpocitavat

napr.
dim vysledek as Date

vysledek = CDate(Cil.Value) - CDate(Start.Value)citovat
#021189
avatar
Máš tam problémy s datovými typy.

U funkcí bych definoval, co která vrací, tedy: Function Cil(datumC As String) As Date
Function Start(datumC As String) As Date
Navíc některé proměnné nemáš definované vůbec (Kserazeni, rok).

V proceduře prepoctiCv pak nemáš definované proměnné Cil a Start, navíc používáš stejné názvy jako u funkcí, to bych nedělal. Výsledek lze spočítat v jednom řádku...

Sub prepoctiCv()
Dim vysledek As Long
vysledek = Cil(Sheets("List1").Range("B1").Value) - Start(Sheets("List1").Range("B1").Value)
Debug.Print vysledek
End Sub
P.citovat
#021191
avatar
Můžete mi prosím předělat ten kod aby to fungovalo? Zkusil jsem použít vaše rady ale nejde to.citovat
#021192
avatar
alebo klasicky "=B3-C3"

napriklad takto:
Příloha: zip21192_test.zip (11kB, staženo 29x)
citovat
#021193
avatar
Když uděláš přesně to, co jsem napsal, tak to fungovat bude, zkoušel jsem to.
Jen si ještě nejsem jistý, zda víš, co dělá příkaz "Debug.Print vysledek" ;-). Google ti to případně prozradí, my nevíme, co přesně s tím výsledkem chceš dělat, takže nemůžeme ani více poradit...
P.citovat
#021194
Opičák
Rozdíl jde samozřejmě i vzorcem, ale trochu nepřehledným i když v podstatě jednoduchým.
Příloha: zip21194_rozdil-dnu-datum-txt.zip (7kB, staženo 29x)
citovat
#021195
Opičák
tvoje upravené funkce - oranžové bunky
Příloha: zip21195_rozdil-dnu-datum-txt2.zip (14kB, staženo 30x)
citovat
#021196
avatar

Opičák napsal/a:

Rozdíl jde samozřejmě i vzorcem, ale trochu nepřehledným i když v podstatě jednoduchým.Příloha: 21194_rozdil-dnu-datum-txt.zip


No vymyslel som jednoduchší. 10
=IFERROR(TRIM(RIGHT(A2;LEN(A2)-FIND("-";A2)))-TRIM(LEFT(A2;FIND("-";A2)-1)&RIGHT(A2;4));"")citovat
#021197
avatar
aha, vy ste to potrebovali len v jednej bunke tak potom napriklad takto:

Public Function aCucajRok(ByVal aDate As String) As Date
aValue = Split(aDate, "-")
aCucajRok = CDate(aValue(0)) - CDate(aValue(1))
End Function
Příloha: zip21197_test.zip (12kB, staženo 28x)
citovat
#021203
avatar
Všem díky za pomoc a nejvíce Opičákovi za "21195_rozdil-dnu-datum-txt2.zip" to je to co jsem potřeboval, ikdyž moc nerozumím tomuto řádku:
Cil = Split(Cil, ".")(2) & "/" & Split(Cil, ".")(1) & "/" & Split(Cil, ".")(0)

,ale celkově to dělá přesně co jsem chtěl a po menší úpravě a dotvoření makra to počítá jak má.
Ještě jednou moc dík všem.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