Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

estrazione numeri da stringa vba

Ultimo Aggiornamento: 06/03/2018 08:11
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

Ragazzi buongiorno, intanto grazie per le risposte. Le ho appena provate e funzionano alla grande. Che dire siete FENOMENALI!!!
Grazie infinite [SM=x423028] [SM=x423028] [SM=x423047] [SM=x423047] [SM=x423047]
Vota: 15MediaObject5,00112 1
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 18:51. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com