Stránka 1 z 1

excel 2007 kontrola emailové adresy

Napsal: 27 kvě 2010 10:42
od marino
Zdravím, můžete mi poradit funkci na kontrolu emailové adresy? Ve sloupci mám cca 25000 adres, některé buňky obsahují 2 adresy, v jiných chybí např. tečka před doménou nebo je v nich mezera, diakritika apod. Lze to řešit nějakým jednoduchým vzorcem?

Díky!

Re: excel 2007 kontrola emailové adresy

Napsal: 27 kvě 2010 11:47
od navstevnik
Moc te nepotesim, jednoduchy vzorec na to neexistuje. Je nutno se zahloubat do oblasti regularnich vyrazu. Nejake uvodni info je zde: http://excelplus.net/news.php?readmore=7. Do teto oblasti jsem jen nahledl, takze odpoved nebude hned (moznaze nekdo se tim uz zabyval a proptne odpovi).
Priloz jako pomoc sesit obsahujici par desitek fiktivnich emailovych adres vcetne problemovych.

Re: excel 2007 kontrola emailové adresy

Napsal: 27 kvě 2010 14:36
od marino
určitě to projedu, pokud ne, budu se muset spokojit s tím, že to vyplivne emilový klient jako nedoručitelné.
Díky za rychlou odpověď. :satisfied:

Re: excel 2007 kontrola emailové adresy

Napsal: 30 kvě 2010 13:48
od navstevnik
Pro zacatek lze pouzit pro castecne vyhledani i Automaticky filtr - vlastni a podminky.
Napr.:

Kód: Vybrat vše

 obsahuje   @*@           nebo     neobsahuje   @

 obsahuje (vloz mezeru)   nebo     obsahuje     ,

apod

Re: excel 2007 kontrola emailové adresy

Napsal: 30 kvě 2010 14:22
od melior
Regularni vyrazy v klasickych VBA (tedy v makrech) nejdou (nebo aspon ne jednoduse), da se to ale obejit pomoci VBScript objektu. Ten take podporuje regularni vyrazy.
http://msdn.microsoft.com/en-us/library/ms974570.aspx
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

V excelu muzes v Makru pouzit objekt VB Script napr. pomoci Late Bindingu:
http://msdn.microsoft.com/en-us/library ... 10%29.aspx

makro by pak vypadalo nejak takto.

Kód: Vybrat vše

''vytvori objekt, ktery je zdedeny z VBScriptu - regularni vyraz
Set objReg=CreateObject("vbscript.regexp")
'' nastaveni vzoru pro emailovou adresu. vyznam jednotlivych vyrazu najdes na odkazech vyse
objReg.Pattern="[a-zA-Z0-9]+@[a-zA-Z0-9]+"


kontrolu pak provadis pomoci metody Test:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

takze napr bys mel emailovou adresu v bunce A1

Kód: Vybrat vše

Dim emailaddr As String
Dim hResult As Boolean
emailaddr = A1.Text()

hResult = objReg.Test(emailaddr)


Pokud se objReg.Pattern (tedy regularnim vyrazem popsany "spravny tvar emailu") shoduje s textem v bunce A1, vysledkem *hResult je TRUE. Jestlize je obsah bunky jiny (tedy v tomto pripade emailova adresa obsahuje mezery, nebo jine nepovolene znaky, nebo chybi zavinace apod, pak je FALSE.

Re: excel 2007 kontrola emailové adresy  Vyřešeno

Napsal: 31 kvě 2010 17:05
od navstevnik
Navazuji na odpoved od melior:
vyhledavaci vzor podle http://www.zezula.net/cz/prog/regularni_vyrazy.html pokryva 99% vyskytu adres:

Kód: Vybrat vše

^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$


Procedura pro kontrolu (v edotru VBA vloz do modulu1, uprav adresu kontrolovaneho bloku adres):

Kód: Vybrat vše

Option Explicit

Sub TestEMailAddr()
  Dim TBlk As Range, TCll As Range
  Dim RegEx As Object
  Set RegEx = CreateObject("VBScript.RegExp")
  RegEx.Pattern = "^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$"
  Set TBlk = Worksheets("list1").Range("a2:a10")
  For Each TCll In TBlk.Cells
    If RegEx.Test(TCll.Value) = False Then TCll.Offset(0, 1).Value = "chyba"
  Next TCll
  Set RegEx = Nothing
  Set TBlk = Nothing
  Set TCll = Nothing
End Sub

Re: excel 2007 kontrola emailové adresy

Napsal: 01 čer 2010 10:42
od marino
Všem moc děkuju! asi to budu muset předat ajtáků, protže VBA je pro mě španělsko... :)
Díky!