Diskuze: Excel - Funkce - pokročilé
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
google = excel najit text roky
=ROK(datum), kde datum = 05.07.10, vysledek =2010
=NAJÍT("18 měsíců";"Vhodné pro děti od 18 měsíců";1), vysledek je pozice znaku v textu (takze pres if pozice>0 bys zjistil, zda to naslo ci ne)
=DATEVALUE("1.1.2008") vrátí hodnotu 39448 --- https://support.microsoft.com/cs-cz/office/funkce-datumhodn-df8b07d4-7761-4a93-bc33-b7471bbff252
google = excel extrakce data z textu
google = excel prevod data z textu
google = excel najit datum v textu a prevest na datum
20210101 - =DATUMHODN(ZLEVA(A1;4)&"/"&ČÁST(A1;5;2)&"/"&ZPRAVA(A1;2))
http://info.spsnome.cz/Excel/Funkce-Textove
=HODNOTA("2500 Kč") --- 2500
Mno, ja ted nevim, jake dalsi funkce ma, ale napada mne zkusit pouzit nejakou
alternativu z VYHLEDAT
kdyz vyhledat("mesicu")==true ? preved na cislo text (=HODNOTA), orezani (=ČÁST(A1;5;2)), kde pozici ziskas pres POSvyhledat, tusim
klidne nejaky komplikovanejsi kdyz
kdyz(podminka1, prevod1(), kdyz(podminka2, prevod2(), "chyba"))
A nechces pouzit radeji visual basic (makro) v excelu nebo neco, co ma pokrocilejsi funkce? Treba, pokud to mas v databazi, tak ta ma more funkci, ktere delaji primo tohle.
google = vba extract date from text
"2018/10/10 Random Texts".
Function FnDateExtract(fnFile, fnTab, fnRow, fnColumn) As Date
Dim RawExtract As String
With Workbooks(fnFile).Worksheets(fnTab)
RawExtract = Left(CStr(.Cells(fnRow, fnColumn).Text), 10) - vezmi zleva 10 znaku
FnDateExtract = CDate(Format(RawExtract, "yyyy/mm/dd")) - a preved je na datum-text
End With
End Function
---
Function ExtractDatesFromString(inputText As String) As String
Dim regex As Object
Dim matches As Object
Dim match As Object
Set regex = CreateObject("VBScript.RegExp")
regex.Global = True
regex.IgnoreCase = True
regex.Pattern = "\b(?:0?[1-9]|[12][0-9]|3[01])[-\/.](0?[1-9]|1[0-2])[-\/.](?:\d{2}|\d{4})\b" ' regularni vyraz, text, ktery hledas
Set matches = regex.Execute(inputText)
Dim result As String
For Each match In matches
result = result & match & vbCrLf
Next match
ExtractDatesFromString = result
End Function
Ten reg. vyraz neni problem sestavit. Jedna se o poradi znaku. Ale s excelem to tak neumim, tak bych s tim musel experimentovat.
string = "nahodny text 17 mesicu dalsi nahodny text"
vzorec = "[0-9]+ mesicu" ' kde 0-9 je cislo, + opakovani znaku 1-nekonecno krat (cili 1, 2 a vice cifer)
vzorec = "[0-9]{1,2} mesicu" ' kde 0-9 je cislo, + opakovani znaku 1-2 krat
' pouzivaji slovo pattern, anglicky to znamena treba vzor pro vysivani, v tomhle pripade jde spis o jakousi strukturu vyhledavaneho textu, znaky, ktere se maji v textu najit
value = match(vzorec, string)
if value=="" nenalezeno
else return prevod(value)
vzorec = "[0-9]+ let"
value = match(vzorec, string)
if value=="" nenalezeno
else return prevod(value)
Takhle nejak si myslim, ze to funguje. Pokud najde shodu se vzorcem, mel by vratit primo nalezeny text (nebo vraci pole). A muzes to ruzne ozavorkovat, vytahnout treba jen to cislo
vzorec = "([0-9]+) let"
' a tady to mozna bude treba napsat nejak takto
nalezy = match(vzorec, string)
if existuje(nalezy[1]) return "nenalezeno"
else return prevod(nalezy[2])
' nalezy[0] mozna vraci puvodni text a pokud neco najde, objevi se to v nalezy[1], nalezy[2]... Delka zalezi na poctu kulatych zavorek
' cili:
' nalezy[0] = "nahodny text 17 let dalsi nahodny text"
' nalezy[1] = "17 let"
' nalezy[2] = "17"
' nebo:
' nalezy[0] = "17 let"
' nalezy[1] = "17"
Jak rikam, musel bych s tim experimentovat, tak 2h nez bych nasel ten spravny
vyraz a programovy kod pro vba excel.
A jeste je tam treba udelat prevod string-datum. A pridat kod, ktery projde cely
sloupec, pac ta funkce prevadi jen 1 bunku. (asi dalsich 5-10 radku kodu).
A pak staci kliknout v excelu na spustit makro, vyberes si toto a cele se to
prepocita a vygeneruje novy sloupec
google = vba extract date from text
Ha, mozna se to da ten reg. vyraz da pouzit primo ve VYHLEDAT.
https://www.consultdmw.com/…om-text.html
Ha, ale, cim dal roluji v tom clanku, tak stejne prechazi na VBA A nakonec ty ostatni datumy
nedoresil
Jinak, jeho vzorec je "/??/"
tipuji, ze to hleda text neco jako
"a/b/c", cili, zleva a zprava ma lomitko. Ty prave musis vyhledavat konkretni
text, "cislo let", "cislo rok", "cislo mesic", "cislo mesicu" a to mozna jeste s
diakritikou, bez a s moznosti nejakych preklepu
google = vba Extracting date from a string with pattern
https://stackoverflow.com/…-and-exclude
A jeste mozna k tem paternum. Nekdy jde pouzit text, nektere znaky maji jiny vyznam. Kdyz si nebudes jisty, pouzij znak v hranate zavorce.
text = "18 měsíců"
"18 měsíců" = hledat muzes cely text
"[1][8][ ][m][ě][s][í][c][ů]" = hledat muzes cely text, nektere nebo vsechny znaky ozavorkovat
"[0-9][0-9] měsíců" = hledat dve cislo a text (00-99)
(ja zrovna reg. vyrazy pouzivam, tak vim, ze pismenka a cisla nejsou problemove znaky)
"[0123456789][0123456789] měsíců" = hledat dve cisla a text (00-99) (muzes vypsat konkretni znaky)
"[abc][ef] měsíců" = hledat dve pismena a text (ae, af, be, bf, ce,cf - hleda to vsechny kombinace)
"[0-9]{1,2} měsíců" = hledat jedno az dve cislo a text (0-9, 00-99)
"[0-9]+ měsíců" = hledat jedno az nekonecno cisel a text (0-9, 00-99, 000-999, ...)
"([1-9]|[1-9][0-9]) měsíců" = hledat jedno nebo dve konkretni kombinace cisel a text (1-9 nebo 1-99)
Slo by to omezit az na kalendarni datum bez prechodneho roku, ale byl by to slozity vyraz. Tebe zajimaji stejne max 2 cislice nebo 1-n cislic, ktere jsou za sebou
Zobrazeno 4 zpráv z 4.