< návrat zpět

MS Excel


Téma: Úprava SVYHLEDAT rss

Zaslal/a 31.1.2016 21:03

Zdravím,

poprosil bych o radu:

mám databázi (cca 300 000 řádků). V jednom sloupci jsou řekněme jména. Problém je, že ty jména jsou často doplněna o další znaky. Lze například s funkcí SVYHLEDAT vypsat jména správně, pokud vím, která se tam mají vyskytovat? Pracuji v excelu 2010.

Děkuji

Příloha: png29750_excel.png (15kB, staženo 17x)
29750_excel.png
Zaslat odpověď >

Strana:  1 2   další »
#029753
avatar
Moc nerozumím, čeho chcete dosáhnout. Obrázek ukazuje to, co je Excelu vlastní. Pokud jsem pochopil správně, chtěl byste převádět špatně zapsané údaje do standardní podoby.
První možnost je při ručním vstupu, kde mohou pomoci automatické opravy (Soubor / Možnosti / Kontrola mluvnice a pravopisu). Další možnosti už je nutno řešit programově. Když si např. vytvoříte seznam "špatně/správně", můžete se pomocí něj zbavit běžných překlepů i dodatečně.citovat
#029754
elninoslov
Urobil som už 2 verzie makra, ktoré odstráni viacpísmenné preklepy, ale obe verzie nepochopiteľne narážajú na nelogickú chybu. Ak sfunkčním toto, potom mám v pláne porovnávať správne mená hľadaním v "pochybnom" mene, od najdlhšieho správneho (kvôli nájdeniu najskôr "Jana" až potom "Jan").
Zatiaľ som nevymyslel metódu na opravu "Petrer". Možno na to budú odborníci niečo vedieť, lebo mňa napadlo, len porovnať počet zhodných písmen so správnymi menami. Ale to ešte neriešim...

Ale k tej nepochopiteľnej chybe. Nemôžem počítať viac ako do 32767 5
stačí keď dám
Dim odkial as Long
odkial = 32767 + 1

a dostanem chybu OverFlow 9
Čo je toto za sprostosť ?citovat
icon #029756
eLCHa
@elninoslov
tohle už jsme tu spolu řešili ;)

Řekněte - v tom kódu máte opravdu číslo 32 767 nebo jak to máte přesně.

Pokud to tam máte tak jako v příspěvku, přetypujte
odkial = 32767& + 1
odkial = 32767 + 1&
odkial = 32767 + 1#
odkial = CLng(32767) + 1
citovat
icon #029757
eLCHa
@ligidy

Možná elninoslov vymyslí nějaký způsob, který pomůže. Ale jediný správný způsob je zadávat data správně a kontrolovat už při zadávání. Pokud to nelze, udělejte si seznam pravděpodobných chyb - resp. správných jmen a když nenajde, je to chyba - něco, co navrhl vovka (myslím Když si např. vytvoříte seznam, v žádném případě kontrola pravopisu) - ale ty opravujte ručně.

Jak například rozlišit mezi českým Petr a slovenským Peter, když v databázi máte třeba Petdr.

Automatické věci jsou fajn, ale všeho s mírou a je třeba dávat veliký pozor.citovat
icon #029758
eLCHa
@elninoslov
Našel jsem to
http://wall.cz/index.php?m=topic&id=25393citovat
#029759
avatar
Kdysi jsem na přání řešil příklad s automatickým odstraněním jednoznakového překlepu v zadaném literálu (proti seznamu správných zápisů). Odstranění duplicitních sousedních znaků si umím také představit, i když tam pozor na jména jako je Otto, Anna apod.
S kontrolou pravopisu mám velmi dobré zkušenosti a aktivně ji využívám; nevím, proč ji elCHa odmítá.
Musím ale konstatovat, že právě jména jsou velmi problematický materiál pro automatickou nápravu. Již zmíněný Petr/Peter/Pete a kdovíjak ještě je dobrým příkladem špatného zdroje správných podob jména.
Manipulace se znakovými řetězci patří k mým oblíbeným úlohám. U jmen bych ale zůstal u zjištění, že takové jméno ještě neznám. Na uživateli by bylo, jestli jméno opraví, nebo ho naopak přidá do seznamu známých jmen. Tím by jméno "legalizoval" a příště už by prošlo jako známé. Napsat odpovídající proceduru pro naznačený postup by nebylo zas tak obtížné.citovat
icon #029760
eLCHa
@vovka
S kontrolou pravopisu mám velmi dobré zkušenosti a aktivně ji využívám; nevím, proč ji elCHa odmítá.

Jen uvažuji nahlas

Jak zajistíte, aby to fungovalo pouze pro konkrétní soubor.
Když to dokážete, jak zajistíte, aby to fungovalo pouze pro konkrétní oblast - v křestním může být Petrov chyba, v příjmení správně.

edit
A to pomíjím údržbucitovat
#029763
avatar
Jak zajistit, aby to fungovalo jen pro daný sešit - to bych uměl; seznam literálů pro automatické opravy není problém měnit pomocí VBA. Aby to fungovalo jen pro danou oblast na listu - to opravdu neumím (a ani jsem se o to nepokusil). Pravda je navíc to, že jména jsou opravdu špatný materiál pro každý automat - to už jsem napsal dřív.
Proto v případě jmen zůstávám u druhé poloviny své odpovědi, tj. u legalizační procedury pro použitá jména. Tu jsem již také za sebe doporučil.citovat
icon #029764
eLCHa
@vovka
Když tak kecáme

seznam literálů pro automatické opravy není problém měnit pomocí VBA

Ne, že bych nevěřil, že to u sebe nedokážete ošéfovat. Počítám, že máte na mysli - při startu souboru nahrát - pří zavření odstranit.
OK - 2 otázky.
1) když už to slovo v databázi je a má jinou náhradu - jak to řešíte.
2) nekorektní uzavření - tedy nedojde k Before_Close. Jak při příštím spuštění poznáte, která slova chcete a která nechcete - jestli mi teda rozumíte...

Tohle je pro mně velmi problematická činnost.citovat
#029767
elninoslov
@ eLCHa:
Sub pok()
Dim odkial As Long
odkial = 32767 + 1
End Sub

To je celé. Nič viac. Hodí to Overflow... Musel sa nejak záhadne poškodiť u mňa Excel, to predsa nemôže byť logicky vysvetliteľné...

EDIT: odkial = CLng(32767) + 1 prejde OK
Ako po tom očúrať toto ?
Sub pok2()
Dim m(), r As Long
With Worksheets("Hárok1")
r = .Cells(Rows.Count, 5).End(xlUp).Row - 1 'napr. r=300000
'ReDim m(1 To r, 1 To 1) 'Je jedno či tam je Redim alebo nie.
m = .Cells(2, 5).Resize(r).Value
'm(32768)=chyba
End With
End Sub

Sákriš, to sú mi veci...

EDIT2: Vprvom príklade pomôže:
odkial = CLng(32768)
V druhom príklade mám chybu, preto to nejde. Uvádzam samostatne, aby bolo viditeľné o čom hovorím. Chýba tam index poľa:
m(32768, 1)=chyba
Příloha: zip29767_overflow.zip (10kB, staženo 16x)
citovat

Strana:  1 2   další »

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