---
avast! Antivirus: In partenza messaggio pulito.
Virus Database (VPS): 080429-0, 29/04/2008
Controllato il: 29/04/2008 22.11.01
avast! - copyright (c) 1988-2008 ALWIL Software.
http://www.avast.com
ciao
************************
"Gianni" <gio...@libero.it> wrote in message
news:jhLRj.298906$%k.40...@twister2.libero.it...
> Buonasera a tutti!
> Nella colonna A1 inserisco una serie di righe (copia-incolla da un file
> PDF).
> Es.:
> 121 - CAMPODIMARTE 70.641 13.681 3.064 1.738 23.836 112.960
> 122 - PORTA 155.809 23.843 4.574 1.523 13.840 199.589
> 123 - MARTE Z.V. 155.809 23.843 4.574 1.523 13.840 199.589
> Dovrei estrarre nelle colonne B1;B2;B3;B4;B5 le (sempre) 5 serie di
> caratteri numerici (separate dagli spazi) che si trovano dopo le lettere
> (es. CAMPODIMARTE), e logicamente, trasformarle in testo.
> Un enorme grazie a chi vorrà aiutarmi.
Per chiarificare la tua domanda,
utilizzando i tuoi dati, potresti
indicare i risultati voluti nelle
celle B1:B5?
Hai indicato dei dati in una sola
cella, ma i realita' ci sono dati in
molte celle?
Inoltre, i dati numerici saranno
sempre disposti in 5 celle?
---
Regards.
Norman
http://office.microsoft.com/it-it/excel/HA011549011040.aspx
************************************************
"Norman Jones" <norma...@wherforartthou.com> wrote in message
news:uiyyVhjq...@TK2MSFTNGP03.phx.gbl...
http://office.microsoft.com/it-it/excel/HA011549011040.aspx
=============
Ti ringrazio per la tua gentilezza,
ma sapevo gia' di questo articolo.
Secondo le esigenze di Gianni,
intendevo suggerire una soluzione
automatizzato, forse utilizzando le
Regular Expression.
Grazie ancora.
---
Regards.
Norman
Cosi' pensavo di fare un primo passaggio per dividere in una colonna i primi
valori numerici (text to columns) e poi porre nella seconda colonna tutto il
resto
A B
121 CAMPODIMARTE 70.641 13.681 3.064 1.738 23.836 112.960
122 PORTA 155.809 23.843 4.574 1.523 13.840 199.589
123 MARTE Z.V. 155.809 23.843 4.574 1.523 13.840 199.589
Poi cercare nella colonna B la posizione del primo numero
=CONFRONTA(TRUE;VAL.NUMERO(1*STRINGA.ESTRAI(B1;RIGA($1:$99),1)),0)=MATCH(TRUE;ISNUMBER(1*MID(B1;ROW($1:$99);1));FALSE)
Importante È necessario immettere questa formula come matrice premendo
CTRL+MAIUSC+INVIO.Avendo la posizione del primo numero poi puo' giocare con
le funzioni STRINGA.ESTRAI / MID e li portare tutta la parte "numerica" in
una colonna e rifare la (text tu columns) dal menu data selezionando come
carattere separatore lo SpazioUn po' contorto ...
***********************
"Norman Jones" <norma...@wherforartthou.com> wrote in message
news:ORQstsjq...@TK2MSFTNGP04.phx.gbl...
=============
Volevo postare a Gianni e mi sono accodato a te, scusa.
Ho provato a tradurre con formule in inglese (avendo installato excel in
lingua) pero' la soluzione mi è venuta in + passaggi (sempre non usando VB)
[...]
=============
Per quanto riguarda l'articolo
segnalato da te, avresti potuto
ottenere le formule senza
traduzione:
Extracting numbers from alphanumeric strings
http://office.microsoft.com/en-us/excel/HA011549011033.aspx
A proposito, per tradurre le funzione
di Excel, io utilizzo il componente
aggiuntivo:
TranslateIt di KeepITcool:
Multilingual Formula Translator Addin
http://members.chello.nl/jvolk/keepitcool/addins.html
---
Regards.
Norman
---
avast! Antivirus: In partenza messaggio pulito.
Virus Database (VPS): 080430-0, 30/04/2008
Controllato il: 30/04/2008 9.27.53
A1, B1, B2, etc non sono né righe né colonne, sono celle.
"le (sempre) 5 serie di caratteri numerici" sono in effetti sempre sei.
"e logicamente, trasformarle in testo"
Logicamente...?
Ciò premesso la seguente routine scrive in
TargetRange => Right => Down
i sei numeri che si trovano in coda alle stringhe
in SourceRange => Down.
========================================
Sub Sheet2_Button2_Click()
Dim SourceRange As Range, TargetRange As Range, SplitArr
Dim i, j As Integer, k As Integer, n As Integer
Dim S As String, SS As String, RS As Integer
Set SourceRange = [Sheet2!A1]
Set TargetRange = [Sheet2!H1]
RS = TargetRange.Column - SourceRange.Column + 1
If Not IsEmpty(SourceRange(2, 1)) Then
Set SourceRange = SourceRange.Resize _
(SourceRange.End(xlDown).Row - SourceRange.Row + 1)
End If
For Each i In SourceRange
k = 0: S = ""
For j = Len(i) To 1 Step -1
k = k + 1
S = S & Mid(i, Len(i) - k + 1, 1)
Next
SplitArr = Split(S, " ")
For n = 0 To 5
S = SplitArr(n)
k = 0
For j = 1 To Len(S)
k = k + 1
SS = SS & Mid(S, Len(S) - k + 1, 1)
Next
i(1, 5 - n + RS) = SS
SS = ""
Next
Next
End Sub
====================================
Bruno
[...]
> Ciò premesso la seguente routine scrive in
> TargetRange => Right => Down
> i sei numeri che si trovano in coda alle stringhe
> in SourceRange => Down.
> Sub Sheet2_Button2_Click()
[...]
Ovvero:
==================================
Sub Sheet2_Button2_Click()
Dim SourceRange As Range, TargetRange As Range
Dim i, j As Integer, k As Integer, n As Integer
Dim S As String, SS As String, RS As Integer, SplitArr
Set SourceRange = [Sheet2!A1]
Set TargetRange = [Sheet2!H1]
RS = TargetRange.Column - SourceRange.Column + 1
If Not IsEmpty(SourceRange(2, 1)) Then
Set SourceRange = SourceRange.Resize _
(SourceRange.End(xlDown).Row - SourceRange.Row + 1)
End If
For Each i In SourceRange
k = 0: S = ""
For j = Len(i) To 1 Step -1
k = k + 1
S = S & Mid(i, Len(i) - k + 1, 1)
Next
SplitArr = Split(S, " ")
For n = 0 To 5
S = SplitArr(n)
For j = 1 To Len(S)
SS = SS & Mid(S, Len(S) - j + 1, 1)
Next
i(1, 5 - n + RS) = SS
SS = ""
Next
Next
End Sub
======================================
Bruno
> Ovvero:
> ==================================
> Sub Sheet2_Button2_Click()
[...]
Compri due al prezzo di uno!
======================================
Sub Sheet2_Button3_Click()
Dim SourceRange As Range, TargetRange As Range, i
Dim S As String, RS As Integer, j As Integer, k As Integer
Set SourceRange = [Sheet2!A1]
Set TargetRange = [Sheet2!H1]
RS = TargetRange.Column - SourceRange.Column + 2
If Not IsEmpty(SourceRange(2, 1)) Then
Set SourceRange = SourceRange.Resize _
(SourceRange.End(xlDown).Row - SourceRange.Row + 1)
End If
For Each i In SourceRange
j = Len(i) + 1
k = 0: S = ""
Do Until Not IsNumeric(Mid(i, j - 1, 1))
k = k + 1
S = Mid(i, 1, j - 1)
j = InStrRev(S, " ")
i(1, RS - k + 5) = Mid(S, j + 1)
Loop
Next
End Sub
========================================
Bruno
---
avast! Antivirus: In partenza messaggio pulito.
Virus Database (VPS): 080430-1, 30/04/2008
Controllato il: 30/04/2008 20.11.11
> Sarebbe perfetto se estraesse ad esempio 99.999 e non 99,999
> Ho provato con la formattazione celle ma non ho risolto.
> Comunque grazie e complimenti per aver capito il mio problema nonostante
> la mia esposizione poco tecnica!
> Ciao
> Gianni
Viene estratto del testo cosě come č contenuto nella stringa
originale, allineato a sinistra
Selezionando il formato testo lo vedi chiaramente.
Bruno
danghiu
"Norman Jones" <norma...@wherforartthou.com> wrote in message
news:uNGPkBkq...@TK2MSFTNGP03.phx.gbl...
> Ciao Claudio,
>
> =============
> Volevo postare a Gianni e mi sono accodato a te, scusa.
> Ho provato a tradurre con formule in inglese (avendo installato excel in
> lingua) pero' la soluzione mi č venuta in + passaggi (sempre non usando
Ho risolto aggiungendo alla riga di codice " i(1, RS - k + 5) = Mid(S, j +
1)" * 1
Grazie nuovamente
Gianni
---
avast! Antivirus: In partenza messaggio pulito.
Virus Database (VPS): 080501-0, 01/05/2008
Controllato il: 01/05/2008 10.52.36
"Gianni" ha scritto:
>
> "Bruno Campanini" <B...@gmail.com> ha scritto nel messaggio
> news:uhrJb8uq...@TK2MSFTNGP03.phx.gbl...
> > "Gianni" wrote in message
> > news:cC2Sj.68205$FR.2...@twister1.libero.it...
> >
> >> Sarebbe perfetto se estraesse ad esempio 99.999 e non 99,999
> >> Ho provato con la formattazione celle ma non ho risolto.
> >> Comunque grazie e complimenti per aver capito il mio problema nonostante
> >> la mia esposizione poco tecnica!
> >> Ciao
> >> Gianni
> >
> > Viene estratto del testo così come è contenuto nella stringa
> > originale, allineato a sinistra
> > Selezionando il formato testo lo vedi chiaramente.
> >
> > Bruno
>
>
> Ho risolto aggiungendo alla riga di codice " i(1, RS - k + 5) = Mid(S, j +
> 1)" * 1
> Grazie nuovamente
>
Ciao Gianni.
Della serie l'importante è partecipare :-), prova:
Public Sub estraisolonumeri()
Dim CL As Range
Dim RNG As Range
Dim B() As String
Dim I As Long
Dim Cap As Long
Dim P As Long
Dim test As String
Dim X As Long
Sheets("Foglio1").Select
Range("B1:Z100") = "" ' <----- da variare
Cap = 5
Set RNG = Range("a1:a100") ' <----- da variare
For Each CL In RNG
X = 0
B = Split(CL, " ")
For I = LBound(B) To UBound(B)
If B(I) = "" Then Exit Sub
test = B(I)
If I <> 0 Then
If IsNumeric(test) Then
X = X + 1
Cells(CL.Row, CL.Column + X) = B(I)
End If
End If
Next
Next
End Sub
Saluti a tutti, in particolare a Bruno.
Eliano
[...]
End Sub
>
> Saluti a tutti, in particolare a Bruno.
> Eliano
Contraccambio i saluti Eliano.
Ben risentito e buon 1° maggio, buon mese di maggio, giugno
etc. fino a dicembre. Poi a Natale rinnoviamo il plafond auguri
per l'anno prossimo.
Ciao
Bruno
"Bruno Campanini" ha scritto:
Grazie
Eliano
"Gianni" ha scritto:
> Buonasera a tutti!
> Nella colonna A1 inserisco una serie di righe (copia-incolla da un file
> PDF).
> Es.:
> 121 - CAMPODIMARTE 70.641 13.681 3.064 1.738 23.836 112.960
> 122 - PORTA 155.809 23.843 4.574 1.523 13.840 199.589
> 123 - MARTE Z.V. 155.809 23.843 4.574 1.523 13.840 199.589
> Dovrei estrarre nelle colonne B1;B2;B3;B4;B5 le (sempre) 5 serie di
> caratteri numerici (separate dagli spazi) che si trovano dopo le lettere
> (es. CAMPODIMARTE), e logicamente, trasformarle in testo.
> Un enorme grazie a chi vorrà aiutarmi.
> Gianni
>
Sub chiama()
prova Range("a1:a10"), Range("b1:g10")
End Sub
Sub prova(rngIn As Excel.Range, rngOut As Excel.Range)
Dim Arr(), Arr2()
Dim V, V1
Dim L As Long, L1 As Long, C As Long
If rngIn.Columns.Count > 1 Then Exit Sub
If rngOut.Columns.Count < 2 Then Exit Sub
If rngIn.Rows.Count = rngOut.Rows.Count Then
C = rngOut.Columns.Count
Arr = rngIn
L = UBound(Arr)
ReDim Arr2(1 To L, 1 To C)
L = 0
For Each V In Arr
L = L + 1
V1 = Split(V, " ")
If UBound(V1) > C Then
For L1 = 1 To C
Arr2(L, L1) = CLng(V1(UBound(V1) - C + L1))
Next
End If
Next
rngOut = Arr2
End If
End Sub
ciao
r
Gianni
---
avast! Antivirus: In partenza messaggio pulito.
Virus Database (VPS): 080501-0, 01/05/2008
Controllato il: 02/05/2008 10.03.48
> Nella colonna A1 inserisco una serie di righe (copia-incolla da un file
> PDF).
> Es.:
> 121 - CAMPODIMARTE 70.641 13.681 3.064 1.738 23.836 112.960
> 122 - PORTA 155.809 23.843 4.574 1.523 13.840 199.589
> 123 - MARTE Z.V. 155.809 23.843 4.574 1.523 13.840 199.589
> Dovrei estrarre nelle colonne B1;B2;B3;B4;B5 le (sempre) 5 serie di
> caratteri numerici (separate dagli spazi) che si trovano dopo le lettere
> (es. CAMPODIMARTE), e logicamente, trasformarle in testo.
Ciao Gianni.
Un modo (non certo il migliore ma solo un modo):
[B1] =STRINGA.ESTRAI($A1;1;TROVA("@";SOSTITUISCI($A1;"
";"@";LUNGHEZZA($A1)-LUNGHEZZA(SOSTITUISCI($A1;" ";""))-5))-1)
[C1:H1]
=VALORE(STRINGA.ESTRAI(SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(STRINGA.ESTRAI($A1;LUNGHEZZA($B1)+1;LUNGHEZZA($A1));".";"")&"
";" ";"<";{1;2;3;4;5;6});"
";">";{1;2;3;4;5;6});TROVA("<";SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(STRINGA.ESTRAI($A1;LUNGHEZZA($B1)+1;LUNGHEZZA($A1));".";"")&"
";" ";"<";{1;2;3;4;5;6});"
";">";{1;2;3;4;5;6}))+1;TROVA(">";SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(STRINGA.ESTRAI($A1;LUNGHEZZA($B1)+1;LUNGHEZZA($A1));".";"")&"
";" ";"<";{1;2;3;4;5;6});"
";">";{1;2;3;4;5;6}))-TROVA("<";SOSTITUISCI(SOSTITUISCI(SOSTITUISCI(STRINGA.ESTRAI($A1;LUNGHEZZA($B1)+1;LUNGHEZZA($A1));".";"")&"
";" ";"<";{1;2;3;4;5;6});" ";">";{1;2;3;4;5;6}))-1))
--
Maurizio Borrelli [Microsoft MVP Office System]
http://www.riolab.org/