Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Big Problem

Ultimo Aggiornamento: 24/09/2015 12:43
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 [SM=x423024]
[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

Small solution!
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:
 =$A1*$B1*$C1 

ottenendo, come risultato:
-    5.700.000,00

Analogamente, in cella "D2" ho inserito:
 =$A2*$B2*$C2 

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:

=MOLT(B3;"x")


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



ABC
1150x40x950=Opera(A1)5700000
21+2x3=Opera(A2)7
32*(3+4)=Opera(A3)14
43*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.

[SM=x423028] [SM=x423028] [SM=x423028]
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 [SM=g27817]

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

Grazie ragazzi
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!!! [SM=x423065] [SM=x423065] [SM=x423065]
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ò...... [SM=x423023] [SM=x423054]

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!!!!!!!!!!!!!!! [SM=x423023] [SM=x423047]
[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

=STRINGA.ESTRAI(A1;2;50)


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 [SM=x423047] [SM=x423047]
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 [SM=g27828]

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

Perfetto ti ringrazio infinitamente sei stato gentilissimo!!!!


[SM=x423065] [SM=x423065] [SM=x423065]
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
Vota: 15MediaObject3,33322 2
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 09:58. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com