| | Post: 1 | Registrato il: 05/03/2018
| Città: BASSANO DEL GRAPPA | Età: 38 | Utente Junior | 2010 | | OFFLINE | |
|
05/03/2018 12:01 | |
Buongiorno a tutti, premesso che con le macro non so manco dove mettere le mani, dovrei iniziare a studiarli perchè iniziano a chiedermene parecchi.
Ho una serie di colonne impostate in questa maniera:
Col A Col B
123x456 478x587
Vorrei sapere come estrarre la prima parte della stringa (123) e copiarla su una colonna e l'ultima parte (456) su un'altra colonna
Grazie 1000 in anticipo |
|
| | Post: 1.830 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
05/03/2018 13:25 | |
Ciao
in A1 la stringa intera:
le due formule:
=SINISTRA(A1;TROVA("x";A1)-1)
=STRINGA.ESTRAI(A1;TROVA("x";A1)+1;TROVA(" ";A1)-TROVA("x";A1)-1)
saluti
[Modificato da dodo47 05/03/2018 13:26] Domenico
Win 10 - Excel 2016 |
| | Post: 1 | Registrato il: 05/03/2018
| Città: BASSANO DEL GRAPPA | Età: 38 | Utente Junior | 2010 | | OFFLINE | |
|
05/03/2018 13:33 | |
dodo47 grazie per la risposta. Forse mi sono spiegato male io.
Vorrei che fosse fatto in VBA, l'ho proposta con le formule, ma chi dovrà metterci mano, non ha dimestichezza con excel. |
| | Post: 1.543 | Registrato il: 10/10/2013
| Città: VICENZA | Età: 69 | Utente Veteran | 365 | | OFFLINE |
|
05/03/2018 13:43 | |
ciao
i numeri sono sempre 3 a sinistra
e tre a destra o possono cambiare ?
nb
se non conoscono Excel avranno difficoltà
a variare il vba
le formule sono più assimilabili |
| | Post: 2 | Registrato il: 05/03/2018
| Città: BASSANO DEL GRAPPA | Età: 38 | Utente Junior | 2010 | | OFFLINE | |
|
05/03/2018 13:49 | |
Ciao, i numeri possono variare. Lo so che con le formule andrebbero meglio, ma vogliono complicarmi la vita...
Grazie 1000 in anticipo |
| | Post: 3.658 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
05/03/2018 15:26 | |
Ciao Timetravel
Avendo le stringhe in colonna A questa potrebbe essere una macro
vb Sub prova()
Dim i As Long
Dim ur As Long
Dim lr As Long
ur = Cells(Rows.Count, "a").End(xlUp).Row
For i = 1 To ur
lr = Cells(Rows.Count, "d").End(xlUp).Row
Cells(lr + 1, "d").Value = Left(Range("a" & i), 3)
Cells(lr + 1, "e").Value = Right(Range("a" & i), 3)
Next i
End Sub
Ma se tu non sai niente di VBA........
Alfredo |
| | Post: 1.831 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
05/03/2018 17:10 | |
Ciao timetravel86
non avevo visto le due colonne, pensavo fosse un'una stringa pertanto la mia seconda formula è errata.
Assodato che i numeri prima e dopo la x possono essere più o meno di tre, ti chiedo:
1) la macro deve calcolare il dato su tutte e due le colonne ?
2) possono non esserci numeri prima o dopo la x ?
3) la x è sempre presente ?
4) i risultati (4) vanno nelle colonne affianco? C-D-E-F o che altro?
In attesa, saluti
[Modificato da dodo47 05/03/2018 17:21] Domenico
Win 10 - Excel 2016 |
| | Post: 3 | Registrato il: 05/03/2018
| Città: BASSANO DEL GRAPPA | Età: 38 | Utente Junior | 2010 | | OFFLINE | |
|
05/03/2018 17:30 | |
Ciao Dodo tranquillo nessun problema.
in realtà la macro dovrebbe fare il compito della funzione testo in colonne. Ho cercato nel forum esempi simili, ma non ne sono venuto a capo.
Nel dubbio ti ho allegato il file di esempio.
Grazie 1000 in anticipo
|
| | Post: 2.061 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
05/03/2018 18:02 | |
ciao
intanto ne approfitto per salutare Domenico
la sub() in questione o Macro in base al tuo esempio e pressappoco questa
Option Explicit
Sub Testi_In_colonne()
Dim sSplit() As String
Dim i As Long, K As Long
Dim Ncol As Long
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, 2) <> "" Then
Ncol = 7
sSplit = Split(Lcase(Cells(i, 2)), "x")
For K = LBound(sSplit) To UBound(sSplit)
Cells(i, Ncol) = sSplit(K)
Ncol = Ncol + 1
Next K
End If
If Cells(i, 3) <> "" Then
Ncol = 11
sSplit = Split(Lcase(Cells(i, 3)), "x")
For K = LBound(sSplit) To UBound(sSplit)
Cells(i, Ncol) = sSplit(K)
Ncol = Ncol + 1
Next K
End If
Next i
End Sub
da inserire nel modulo del foglio
ho inserito Lcase() se vengono scritte x in Miuscolo [Modificato da locatevaresino 05/03/2018 18:07] Ciao da locate
excel 2007 / 13 |
| | Post: 1.832 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
05/03/2018 18:37 | |
Ciao
'mbè visto che ci ho perso tempo...
Saluti
Option Compare Text
Sub Estrai()
Dim ur As Long, i As Long, estratti1 As Variant, estratti2 As Variant
ur = Range("A" & Rows.Count).End(xlUp).Row
Range("G2:M" & ur).ClearContents
For i = 2 To ur
If i = 22 Then Stop
estratti1 = Split(Cells(i, 2), "x")
estratti2 = Split(Cells(i, 3), "x")
On Error Resume Next
Cells(i, 7) = CDbl(Replace(estratti1(0), ".", ","))
Cells(i, 8) = CDbl(Replace(estratti1(1), ".", ","))
Cells(i, 9) = CDbl(Replace(estratti1(2), ".", ","))
Cells(i, 11) = CDbl(Replace(estratti2(0), ".", ","))
Cells(i, 12) = CDbl(Replace(estratti2(1), ".", ","))
Cells(i, 13) = CDbl(Replace(estratti2(2), ".", ","))
Next i
End Sub
[Modificato da dodo47 05/03/2018 18:41] Domenico
Win 10 - Excel 2016 |
| | Post: 2.063 | Registrato il: 21/03/2008
| Città: LOCATE VARESINO | Età: 76 | Utente Veteran | 2007 / 13 | | OFFLINE | |
|
06/03/2018 00:10 | |
ciao
tanto che aspettiamo risposte, propongo anche una UDF
da inserire in un modulo standar
Option Explicit
Function EstraiVal(cella As Range, Nval As Long) As Double
Dim Vcella() As String
Vcella = Split(LCase(cella), "x")
EstraiVal = Vcella(Nval - 1)
End Function
utilizzo
=SE.ERRORE(estraival($B2;1);"")
dove la funzione estraival( vuole la cella ; il valore da estrarre, se primo 1,sec 2,terzo 3 )
Se.ERRORE( per gestire eventuali errori , tipo celle vuote o valori mancanti )
Ciao da locate
excel 2007 / 13 |
| | Post: 5 | Registrato il: 05/03/2018
| Città: BASSANO DEL GRAPPA | Età: 38 | Utente Junior | 2010 | | OFFLINE | |
|
06/03/2018 08:11 | |
|
|
|