Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomáš Jarý:1. února 12:24

Mám text ze kterého potřebuji vytáhnout věk - Příklad <p><span style="font-family: courier new, courier; font-size: 12pt;">Roměr: 8,5 cm × 12,5 cm × 8,5 cm</span></p>
<p><span style="font-family: courier new, courier; font-size: 12pt;">Vhodné pro děti od 18 měsíců.<br /></span></p>
Někdy je to psané v letech, jednou zase v měsících. Potřebuji vytáhnout pouze číselná data, s tím, že hlavní kritérium pro vyhledávání je Vhodné pro děti od .. max dvě pole vpravo. Ideální scénář by byl, kdyby to rovnou dokázalo formátovat do let nebo měsíců.

Zkusil jsem: Přes funkci Najít, přidával další jako Chyba, Zprava, Se, IF atp. Nicméně stále mi hází chybu Hodnota, nebo Nazev.

Chci docílit: Vytáhnout z buňky A číselné údaje do buňky B, tak, aby je to dokázalo rovnou sečíst pod stejnou hodnotou (pokud je jeden údaj v letech a někde uveden v měsících). Základ je vytáhnout číselná data s omezením po zvoleném textu Vhodné pro děti - následně max 3 zprava, pouze číselný údaj.

 
Odpovědět
1. února 12:24
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2. února 8:34

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 :)

 
Nahoru Odpovědět
2. února 8:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2. února 8:51

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

 
Nahoru Odpovědět
2. února 8:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2. února 9:06

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

 
Nahoru Odpovědět
2. února 9:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.