| | Post: 2 | Registrato il: 23/09/2015
| Città: PERUGIA | Età: 42 | Utente Junior | 2007 | | OFFLINE | |
|
23/09/2015 12:25 | |
Ciao a tutti, sono nuova, ma ho un vecchio problema in quanto ho già cercato sul forum cose simili ma niente da fare...
Ho una stringa mista di numeri e lettere fatta così:
es. 150x40x950
che viene generata da un altro programma
Devo moltiplicare quei tre numeri ma la posizione delle "x" nella stringa varia a seconda dei casi
es2: 1000x300x10
Avete idee?
Grazie mille
Ciao [Modificato da Gattanera11 23/09/2015 12:25] |
|
| | Post: 1.022 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
23/09/2015 13:11 | |
Ciao Gattanera
In verità non ho capito bene il tuo quesito
Tu vorresti, avendo la stringa 150x40x950 moltiplicare i soli numeri tra di loro?
Puoi allegare un file di esempio (con la maggior casistica possibile dei dati) inserendo manualmente, per qualcuno di questi, il risultato desiderato?
Alfredo |
| | Post: 2.113 | Registrato il: 03/04/2013
| Utente Veteran | Excel 2000 - 2013 | | OFFLINE | |
|
23/09/2015 13:24 | |
Buon pomeriggio, Gattanera; la mia proposta non è molto professionale, ma, in attesa di soluzioni più valide ... Ho inserito in Cella "A1": - 150x40x950 Ho inserito in Cella "A2": - 1000x300x10 ho selezionato le Celle "A1" e "A2" Utilizzando la Funzione "Testo in colonne" con discriminante "x" ho ottenuto: in Cella "A1" - 150 in Cella "B1" - 40 in Cella "C1" - 950 in Cella "A2" - 1000 in Cella "B2" - 300 in Cella "C2" - 10 A questo punto, in cella "D1" ho inserito: ottenendo, come risultato: - 5.700.000,00 Analogamente, in cella "D2" ho inserito: ottenendo, come risultato: - 3.000.000,00 A disposizione. Buon Lavoro e buona serata. Giuseppe
Windows XP - Excel 2000
Windows 10 - Excel 2013 |
| | Post: 1.886 | Registrato il: 27/09/2010
| Città: FIRENZE | Età: 61 | Utente Veteran | Excel 2010 | | OFFLINE | |
|
23/09/2015 13:29 | |
estrarre da stringa i numeri separati da x e moltiplicarli Ciao Alfredo, ciao Giuseppe,
vado solo dietro l'esempio, stringhe con tre numeri e due x
In A2 la stringa, in B2
=DESTRA(A2;LUNGHEZZA(A2)-LUNGHEZZA(SINISTRA(A2;RICERCA("x";A2;RICERCA("x";A2;1)+1))))*STRINGA.ESTRAI(A2;RICERCA("x";A2)+1;LUNGHEZZA(SINISTRA(A2;RICERCA("x";A2;RICERCA("x";A2;1)+1)))-RICERCA("x";A2)-1)*SINISTRA(A2;RICERCA("x";A2;1)-1)
Se ci riesco allego un esempio; spero che le stringhe non contengano spazi finali.
Fosse il caso, stessa formula ma con gli A2 "trattati" da ANNULLA.SPAZI
=DESTRA(ANNULLA.SPAZI(A2);LUNGHEZZA(ANNULLA.SPAZI(A2))-LUNGHEZZA(SINISTRA(ANNULLA.SPAZI(A2);RICERCA("x";ANNULLA.SPAZI(A2);RICERCA("x";ANNULLA.SPAZI(A2);1)+1))))*STRINGA.ESTRAI(ANNULLA.SPAZI(A2);RICERCA("x";ANNULLA.SPAZI(A2))+1;LUNGHEZZA(SINISTRA(ANNULLA.SPAZI(A2);RICERCA("x";ANNULLA.SPAZI(A2);RICERCA("x";ANNULLA.SPAZI(A2);1)+1)))-RICERCA("x";ANNULLA.SPAZI(A2))-1)*SINISTRA(ANNULLA.SPAZI(A2);RICERCA("x";ANNULLA.SPAZI(A2);1)-1)
Alfredo e Giuseppe sanno sicuramente risolvere questo problema tramite qualche trappola in VBA.
Saluti
[Modificato da (Canapone) 23/09/2015 14:11]
|
| | Post: 1.023 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
23/09/2015 15:59 | |
Ciao Gattanera
Solo per il gusto di dire la mia (in VBA) e raccogliere l'invito di Canapone che saluto insieme a Giuseppe.
Function MoltiplicaValori(str, n, sepChar)
Dim prod As Long
Dim i As Integer
Dim x As Variant
prod = 1
x = Split(str, sepChar)
If n > 0 And n - 1 <= UBound(x) Then
For i = 0 To n - 1
prod = prod * x(i)
Next i
MoltiplicaValori = prod
Else
MoltiplicaValori = ""
End If
End Function
Ti allego il file.
P.S. La funzione gira correttamente solo con ttre elementi; ora cerco di correggerla [Modificato da alfrimpa 23/09/2015 16:05]
Alfredo |
| | Post: 1.024 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
23/09/2015 16:27 | |
Ciao Gattanera
Ho modificato il codice; ora la funzione opera correttamente quali che siano i numeri da moltiplicare
Ti riallego il file corretto.
Function MoltiplicaValori(str, sepChar)
Dim prod As Long
Dim i As Integer
Dim j As Integer
Dim x As Variant
Dim n As Long
n = 1
For j = 1 To Len(str)
If Mid(str, j, 1) = "x" Then
n = n + 1
End If
Next j
prod = 1
x = Split(str, sepChar)
If n > 0 And n - 1 <= UBound(x) Then
For i = 0 To n - 1
prod = prod * x(i)
Next i
MoltiplicaValori = prod
Else
MoltiplicaValori = ""
End If
End Function
Alfredo |
| | Post: 173 | Registrato il: 21/04/2015
| Città: LOIRI PORTO SAN PAOLO | Età: 41 | Utente Junior | 2010 | | OFFLINE | |
|
23/09/2015 16:36 | |
Potresti anche usare una soluzione del genere:
In un modulo inserisci questo:
Option Explicit
Function MOLT(cella, car)
Dim a, b, c As Integer
a = InStr(cella, car)
c = Len(cella)
b = InStr(Mid(cella, a + 1, c), car) + a
MOLT = Left(cella, a - 1) * Mid(cella, a + 1, b - a - 1) * Right(cella, c - b)
End Function
A questo punto, ponendo che la tua stringa si trovi nella cella "B3", in una qualsiasi cella potrai scrivere:
Dove B3 é la cella in cui si trova la stringa
e "x" é il carattere separatore.
Funziona in sostanza come una formula Excel, che puoi traslare o copia-incollare.
Ti allego un file d'esempio con la Function già inserita.
Saluti.
Guy. [Modificato da guybruhs82 23/09/2015 16:37] Windows 7 - Office 2010 |
| | Post: 1.928 | Registrato il: 27/07/2010
| Utente Veteran | | | ONLINE |
|
23/09/2015 16:56 | |
Questa semplice UDF permette di valutare stringhe con le quattro operazioni:
Function Opera(ByRef rng As Range) As Double
Dim sSUT As String
sSUT = Replace(Replace(UCase(rng.Text), "X", "*"), "\", "/")
Opera = Evaluate(sSUT)
End Function
| A | B | C | 1 | 150x40x950 | =Opera(A1) | 5700000 |
2 | 1+2x3 | =Opera(A2) | 7 |
3 | 2*(3+4) | =Opera(A3) | 14 |
4 | 3*4/2 | =Opera(A4) | 6 |
Bye!
scossa
scossa's web site
___
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
| | Post: 174 | Registrato il: 21/04/2015
| Città: LOIRI PORTO SAN PAOLO | Età: 41 | Utente Junior | 2010 | | OFFLINE | |
|
23/09/2015 17:13 | |
Chiedo scusa ad alfrimpa (che approfitto per salutare), non avevo visto che aveva già postato una soluzione con una function (Che per inciso, non avendo il limite dei moltiplicatori, é migliore della mia).
Molto bella la soluzione di alfrimpa e anche quella di scossa. Sostituire le "x" con "*", FANTASTICO!. Non ci avevo minimamente pensato.
Windows 7 - Office 2010 |
| | Post: 1.025 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
23/09/2015 18:21 | |
Grande Scossa.
Complimenti! La semplicità delle tue soluzioni è veramente incredibile.
Alfredo |
| | Post: 1.929 | Registrato il: 27/07/2010
| Utente Veteran | | | ONLINE |
|
23/09/2015 19:59 | |
@Alfredo: grazie
Bye!
scossa
scossa's web site
___
Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
| | Post: 2 | Registrato il: 23/09/2015
| Città: PERUGIA | Età: 42 | Utente Junior | 2007 | | OFFLINE | |
|
24/09/2015 10:05 | |
Ciao a tutti.
Come dicevo ieri sono nuova e non ho nemmeno troppa esperienza di forum sui quali ero abbastanza scettica a causa di precedenti esperienze sfortunate...
Mi sono dovuta ricredere!!!
Siete fantastici, in men che non si dica avete risolto il mio problema, grazie davvero a tutti!!!
Spero che prima o poi potrò anch'io essere utile a qualcuno (di certo non a voi siete troppo ma troppo avanti)
Grazie ancora a presto!!! |
| | Post: 1.027 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
24/09/2015 10:25 | |
Ciao Gattanera
Grazie a Te del riscontro (non è poi così scontato).
Potresti dire, per curiosità, quale soluzione hai adottato? [Modificato da alfrimpa 24/09/2015 10:25]
Alfredo |
| | Post: 3 | Registrato il: 23/09/2015
| Città: PERUGIA | Età: 42 | Utente Junior | 2007 | | OFFLINE | |
|
24/09/2015 11:30 | |
Per semplice inesperienza ho usato la soluzione di Canapone (che è validissima e che davvero devo ringraziare tanto come tutti voi) visto che sono poco pratica ad utilizzare le macro.
Rompo le scatole ancora però......
Ho questa casistica diversa dalla precedente:
Ø50*80
La formula che devo utilizzare (0.785)*(50^2)*80 non è molto diversa visto che c'è una costante e devo solo elevare alla seconda il primo membro, ma il problema è che nel mio essere scarsa non so adattare la formula perchè:
1. La stringa inizia per un simbolo (Ø)
2. Non riesco ad escludere la parte di formula che includeva l'ultima parte dopo la seconda "x"
Scusate davvero ma necessito ancora di voi!!!!!
Helpppp!!!!!!!!!!!!!!! [Modificato da Gattanera11 24/09/2015 11:38] |
| | Post: 1.028 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
24/09/2015 11:46 | |
Ciao Gattanera
Partendo dal tuo esempio Ø50*80 (in A1) in B1 ho scritto
ed in C1
=0,785*SINISTRA(B1;2)^2*DESTRA(B1;2)
ed ho avuto come risultato 157.000 è corretto?
Comunque con un solo esempio non si può dire molto di più; ci dovresti dire la tua casistica di esempi per poterti suggerire una soluzione più "universale" (es. i numeri possono essere costituiti da cifre in numero variabile es. Ø350*820 o Ø5*8765 e così via?) [Modificato da alfrimpa 24/09/2015 11:53]
Alfredo |
| | Post: 4 | Registrato il: 23/09/2015
| Città: PERUGIA | Età: 42 | Utente Junior | 2007 | | OFFLINE | |
|
24/09/2015 11:56 | |
Il risultato è giustissimo ma dovrebbe essere indipendente dal numero di cifre prima e dopo la "x" e contenuto in un'unica cella.
Ad esempio
Ø8x5
Ø200x600
Ø40x80
Ø4x50
Ø50x2
Scusate se non ho ben specificato |
| | Post: 1.029 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
24/09/2015 12:01 | |
Gattanera manca un'ultima informazione.
A prescindere dal simbolo iniziale, i gruppi di cifre sono sempre due (come nei tuoi esempi) o possono essere di più? [Modificato da alfrimpa 24/09/2015 12:02]
Alfredo |
| | Post: 5 | Registrato il: 23/09/2015
| Città: PERUGIA | Età: 42 | Utente Junior | 2007 | | OFFLINE | |
|
24/09/2015 12:03 | |
Si certo sono sempre due come nell'esempio. |
| | Post: 1.030 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
24/09/2015 12:05 | |
Meno male così è più facile
Alfredo |
| | Post: 1.031 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
24/09/2015 12:23 | |
Ciao Gattanera
Io preferisco il VBA (con le formule non ho molto feeling); comunque prova questa supponendo che la stringa da trattare sia in A5
=0,785*STRINGA.ESTRAI(A5;2;TROVA("x";A5)-2)^2*STRINGA.ESTRAI(A5;TROVA("x";A5)+1;50)
nel caso di Ø8x5 la formula restituisce 251,2
nel caso di Ø200x600 il risultato è 18.840.000
E' corretto? [Modificato da alfrimpa 24/09/2015 12:25]
Alfredo |
| | Post: 6 | Registrato il: 23/09/2015
| Città: PERUGIA | Età: 42 | Utente Junior | 2007 | | OFFLINE | |
|
24/09/2015 12:26 | |
|
| | Post: 1.033 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Veteran | Excel 365 | | OFFLINE |
|
24/09/2015 12:43 | |
Grazie a Te nuovamente del riscontro.
Solo un consiglio: cerca di capire come funzionano le funzioni utilizzate nella formula cioè STRINGA.ESTRAI() e TROVA() documentandoti sulla guida in linea di Excel, su Internet o su qualche buon libro su Excel.
Lo so che è scocciante (oltre che pesante) studiare ma solo così, a mio avviso, potrai trarre realmente beneficio fino in fondo dall'aiuto datoti.
Alla prossima.
Alfredo |
|
|