filtrare coloana alfabet non latin

Închis
Dadi
Mesaje: 1
Membru din: Vin Noi 25, 2016 10:49 pm

filtrare coloana alfabet non latin

Mesaj de Dadi » Vin Noi 25, 2016 11:00 pm

Salut, as avea nevoie de un macro astfel incat sa pot filtra automat intr-un fisier excel de n linii pe o anumita coloana toate inregistrarile care nu contin alfabet latin.

Multumesc,

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: filtrare coloana alfabet non latin

Mesaj de IPP » Sâm Noi 26, 2016 9:43 am

Buna ziua

Cred ca exista destul de multe neclaritati in enuntul problemei dvs. si lipsa unui fisier exemplu nu ajuta deloc.

La ce va ganditi cand spuneti "alfabet latin"? Pentru ca este sensul initial, restrans (de alfabet folosit in Roma antica, cu majuscule si fara semne de punctuatie reale) si altul, larg, care inseamna si minuscule, semne de punctuatie si diacritice specifice diverselor limbi europene. Si atunci alfabetul acesta devine sensibil mai extins (vedeti Alfabetul latin)

Si nu stiu sa existe vreun set de caractere disponibil in editorul macro care sa permita scrierea directa a tuturor acelor diacritice (adica poate se poate alege un font care stie diacritice frantuzesti dar acela sigur nu va sti (toate) cele romanesti si invers). De exemplu, fontul by default din editorul macro Excel, nu stie dintre diacriticile romanesti decat â si î.

Apoi, n acela (numarul de randuri al listei) poate deveni foarte important de stiut atunci cand am vorbi de un macro de filtrare directa pentru cazul in care se va folosi o filtrare in modul autofilter. Ori asta ar insemna ca macro sa faca testarile necesare si sa incarce intr-un array rezultatele dorite pentru a aplica apoi filtrarea doar pe anumite valori. Si daca rezultatul ar fi de ordinul miilor (ca sa nu spun zeci de mii) de elemente individuale filtrate ma indoiesc ca limitele interne si practice ale editorului macro ar permite asa ceva.

Astfel, eu as incerca sa merg pe o solutie bazata pe o coloana suplimentara unde sa existe o UDF care sa returneze "Da"/"Nu" si pe baza acelor rezultate sa se faca filtrarea dorita ulterior.

In fisierul atasat aveti un exemplu de UDF care poate functiona aplicat atat unei celule (vedeti de ex. in C2 si D2) cat si mai multora (vedeti de ex. E2)
Functia LatinChr va returna rezultatul "Da" pentru situatia in care toate caracterele testate in celula/celulele de referinta, se regasesc in stringul model* si "Nu" daca exista cel putin un caracter care nu se gaseste intre cele agreate.
*stringul model il gasiti definit in variabila refLatin. Daca veti incerca in editorul macro sa puneti si alte caractere si in locul lor veti vedea altceva, inseamna ca fontul nu perimite acele caractere si ne intoarcem la ceea ce am spus mai sus sau trebuie gasita o abordare total diferita fata de cea propusa de mine

Am folosit urmatorul cod

Cod: Selectaţi tot

Public Function LatinChr(myRng As Range)

'IPP - 26.11.2016

Dim c As Range

Dim refLatin As String
 refLatin = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ÂÎ"

For Each c In myRng
 For i = 1 To Len(c)
  If InStr(refLatin, UCase(Mid(c, i, 1))) = 0 Then
   LatinChr = "Nu"
   Exit Function
  End If
 Next i
Next c

LatinChr = "Da"

End Function
IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”