"Daniela I." ha scritto:
Ciao Dani.
Potresti provare con la formattazione condizionale applicata a tutto il
range da analizzare, con la formula: =LUNGHEZZA(A1*1)=9 assegnando un colore
che preferisci che viene visualizzato quando la cella contiene un numero con
9 cifre.
Per quanto riguarda Excel, vedi di usarlo un po' di più.:-))
Eliano
"eliano" ha scritto:
leggi "help regex" di oggi.
Alt+F11 e da menu inserisci codice
in Modulo1 incolla
Public Function SuperCerca(strWhere As Variant, strWith As String) As
Boolean
Dim regexp As Object
Set regexp = CreateObject("VBScript.RegExp")
regexp.Global = True
regexp.IgnoreCase = True
regexp.Pattern = strWith
SuperCerca = regexp.Test(strWhere)
Set regexp = Nothing
End Function
quindi se i tuoi valori sono in colonna A
seleziona la colonna A
da menu:
formato :: formattazione condizionale
[la formula č]
=supercerca(A1;"[0-9]{9}")
[formato :: bordo] rosso
.f
http://www.prodomosua.eu
"fernando cinquegrani" ha scritto:
> "Daniela I." <Dani...@discussions.microsoft.com> ha scritto nel messaggio
> news:32B553FE-9CB3-4E44...@microsoft.com...
> > Ciao Eliano.
> > Ho provato la formula da te suggerita. Il problema è che le celle che si
> > trovano da A1:A500 contengono all'interno sia testo che numeri tutti
> > diversi.
> > Come faccio a dirgli che deve considerare solo i NUMERI che hanno una
> > lunghezza 9?
> > Scusa se mi sono spiegata uno schifo... EXCEL non ho proprio voglia di
> > usarlo di più,io sono una webdesigner, sono OBBLIGATA!!!!
>
> leggi "help regex" di oggi.
> Alt+F11 e da menu inserisci codice
> in Modulo1 incolla
>
> Public Function SuperCerca(strWhere As Variant, strWith As String) As
> Boolean
> Dim regexp As Object
> Set regexp = CreateObject("VBScript.RegExp")
> regexp.Global = True
> regexp.IgnoreCase = True
> regexp.Pattern = strWith
> SuperCerca = regexp.Test(strWhere)
> Set regexp = Nothing
> End Function
>
> quindi se i tuoi valori sono in colonna A
> seleziona la colonna A
> da menu:
> formato :: formattazione condizionale
> [la formula è]
"Daniela I." ha scritto:
> Ciao Eliano.
> Ho provato la formula da te suggerita. Il problema è che le celle che si
> trovano da A1:A500 contengono all'interno sia testo che numeri tutti diversi.
> Come faccio a dirgli che deve considerare solo i NUMERI che hanno una
> lunghezza 9?
> Scusa se mi sono spiegata uno schifo... EXCEL non ho proprio voglia di
> usarlo di più,io sono una webdesigner, sono OBBLIGATA!!!!
Ciao Dani.
Non credo che tu abbia provato la formula della formattazione condizionale
applicata a tutto il range A1:A500; sul mio excel 2000 colora le celle
contenenti numeri di 9 caratteri e lascia inalterate TUTTE le altre celle
anche se contengono stringhe alfanumeriche lunghe 9.
Per quanto riguarda l'uso di excel credo che come webdesigner ti possa
essere comunque utile, solo che devi fare un minimo di fatica per imparare ad
usarlo.
Per quanto riguarda la formattazione condizionale, prova a seguire queste
semplici istruzioni:
seleziona il range A1:A500
-->Formato-->Formattazione condizionale-->La formula è: =LUNGHEZZA(A1*1)=9
-->Formato-->Motivo (scegli il colore)
Scrivi numeri o stringhe di varia lunghezza nel range A1:A500 e dovresti
vedere l'evidenziazione di tutti i NUMERI lunghi 9 digit.
Vedo che anche fernando (ciao) ti ha dato una soluzione che leggerò più
tardi, per cui se non funziona la mia soluzione, la sua funzionerà
siocuramente.
Facci sapere
Eliano
"Daniela I." ha scritto:
"eliano" ha scritto:
Rileggendo il post e più che altro illuminato dalla soluzione di fernando
(ariciao) ho capito che stavi cercando di individuare, all'interno di una
stringa di lunghezza enne un eventuale valore numerico lungo 9 digit, per
cui, scusa e come non detto).
Eliano
"eliano" ha scritto:
>
>
leggi 'help regex' di ieri :-).
in Modulo1 avevamo
Public Function SuperCerca(strWhere As Variant, strWith As String) As
Boolean
Dim regexp As Object
Set regexp = CreateObject("VBScript.RegExp")
regexp.Global = True
regexp.IgnoreCase = True
regexp.Pattern = strWith
SuperCerca = regexp.Test(strWhere)
Set regexp = Nothing
End Function
aggiungiamo
Public Function SuperSostituisci(strWhere As Variant, strWhat As String,
strWith As String) As String
Dim regexp As Object
Set regexp = CreateObject("VBScript.RegExp")
regexp.Global = True
regexp.IgnoreCase = True
regexp.Pattern = strWhat
SuperSostituisci = regexp.Replace(strWhere, strWith)
Set regexp = Nothing
End Function
ora in B1 inseriamo
=SE(supercerca(A1;"[0-9]{9}");supersostituisci(A1;".*([0-9]{9}).*";"$1");"")
attenzione: se il numero è di 10 cifre avremo 2 gruppi da 9,
se il numero è di 11 cifre avremo 3 gruppi da 9, ...
la formula si limita ad individuarne uno solo.
.f
fernando cinquegrani
Microsoft MVP
http://www.prodomosua.eu
"Daniela I." ha scritto:
> Ti ringrazio Eliano ma ho già risolto con la formula di Fernando.
> Approfitto per chiedervi un ulteriore approfondimento.
> Volendo estrarre dalla cella quel numero di 9 cifre riscrivendolo alla
> colonna accanto... si può fare?
> Grazie ancora
> --
Ciao Daniela.
Al ritorno dalle ferie sembra che si scatenino i "bassi istinti" del CDA,
dei Clienti e dei Fornitori, per cui solo stamani ho letto il tuo post.
Anche se dovresti aver risolto con le UDF di fernando (ciao), ti propongo
una mia artigianale che, oltre a colorare la cella contenente la stringa con
almeno un numero di 9 cifre, scrive sulle colonne adiacenti tutti i numeri di
9 cifre che si trovano nella stringa.
Prova in un Modulo, esempio Modulo1:
Sub provasplit()
Dim CL As Range
Dim RNG As Range
Dim B() As String
Dim I As Long
Dim L As Long
Dim test As String
Dim X As Long
Set RNG = Range("a1:a100") ' <----- da variare
L = 9 ' <----- da variare
Range("B1:Z100") = "" ' <----- da variare
For Each CL In RNG
CL.Interior.ColorIndex = xlNone
X = 0
B = Split(CL, " ")
For I = LBound(B) To UBound(B)
If B(I) = "" Then Exit Sub
test = B(I)
If IsNumeric(test) Then
If Len(test) = L Then
X = X + 1
Cells(CL.Row, CL.Column + X) = B(I)
CL.Interior.ColorIndex = 4
End If
End If
Next
Next
End Sub
La prova è stata fatta considerando un solo blank di separazione fra le
varie componenti della stringa, come avevi specificato nel tuo primo post;
inoltre la routine può essere modificata per utilizzarla, con un evento
Change, al momento dell'immissione o della variazione dei dati; vedi:
A B
C
ASDFKK 1234567890 QAZWSX
ASDFKK 123456789 QAZWSX 123456789
ASDFKK 1234567890 QAZWSX
ASDFKK 123456789 QAZWSX 987654321 123456789 987654321
ASDFKK 123456789 QAZWSX 123456789
Il colore non si vede, ma c'è ed è di un bel verde bottiglia, tipo acqua
minerale non gassata, così Mauro non avrà nulla da eccepire, spero.:-))
Eliano
"eliano" ha scritto:
Ariciao Daniela.
E questa è la medesima routine che può essere utilizzata nell'immissione dei
dati; trattandosi di un evento Change, va inserita nel modulo del foglio che
ti interessa, ad esempio Foglio1:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim B() As String
Dim R As Long
Dim C As Long
Dim I As Long
Dim L As Long
Dim test As String
Dim X As Long
If Target.Column <> 1 Then Exit Sub
L = 9 ' <----- da variare
R = Target.Row
C = Target.Column
Range(Cells(R, C + 1), Cells(R, C + 20)) = ""
Target.Interior.ColorIndex = xlNone
X = 0
B = Split(Target, " ")
For I = LBound(B) To UBound(B)
If B(I) = "" Then Exit Sub
test = B(I)
If IsNumeric(test) Then
If Len(test) = L Then
X = X + 1
Cells(R, C + X) = B(I)
Target.Interior.ColorIndex = 4
End If
End If
Next
End Sub