Condividi:        

[Excel] Creazione di una somma su un elenco personalizzato

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Creazione di una somma su un elenco personalizzato

Postdi ferrox82 » 03/10/07 18:35

ciao a tutti, vorrei confrontarmi con voi sul seguente problema:

ho un elenco di codici alfanumerici e numeri, posto in un'unica colonna, diciamo la colonna A. Vorrei far corrispondere a ciascun codice un determinato valore, ad esempio al codice PA01 assegnare il valore 3 e scriverlo nella cella alla destra nella stessa riga, cioè nella colonna B.
Alla fine otterrò in colonna B una serie di valori corrispondenti ai singoli codici e nella prima cella vuota in fondo alla colonna B vorrei fare la somma di tali valori.

il primo problema è che nella colonna A ho sia i codici che mi interessano che dei numeri, a me interessa solo convertire i codici in numeri nella colonna a finco, quindi vorrei saltare i numeri presenti nella colonna A

il secondo problema è che vorrei ripetere il processo più volte, cioè cambiare di volta in volta l'elenco in colonna A, il quale può avere lunghezze diverse, ripetendo in ogni caso le operazioni riportate in precedenza.

Per ora ho creato più istruzioni di tipo if per assegnare un valore in corrispondenza di un certo codice, ma poi nn riesco a gestire il cambio di riga e soprattutto la presenza dei numeri in colonna A.
Grazie in anticipo per l'attenzione, ciao!
:roll:
ferrox82
Utente Junior
 
Post: 21
Iscritto il: 16/07/07 16:10

Sponsor
 

Postdi Anthony47 » 03/10/07 19:25

Non ho capito se la conversione Codice/valore e' fatto con un algoritmo, e quale, o se sono valori arbitrari, o se ....
D' altra parte non avendo postato il codice gia' realizzato non posso nemmeno provare a fare un reverse engineering per capire cio'.

Mi fermo pertanto a informazioni generiche.
Per il problema 2, devi farti un loop del tipo "esegui da riga n a riga ultima"; ad esempio, per eseguire dalla prima all' ultima:
Codice: Seleziona tutto
For I=1 to Range("A65536").End(xlup).Row
'qui le tue istruzioni da ripetere su ogni riga, usando "offset" per
'   puntare alla riga corrente. Oppure usare Range("A1").offset(I,0).Select
'   per selezionare Axx e basare tutti gli indirizzamenti su Activecell
'
Next I


Per il problema 1, inserisci un test per verificare se il valore corrente in A e' un numero o no:
Codice: Seleziona tutto
If IsNumeric(Range("A1").offset(I).Value) Then GoTo Skippa
'
' qui le istruzioni se il valore NON E' un numero
'
Skippa:
'continuano le istruzioni


Ho messo "uno" dopo "due" per farti vedere un uso di OFFSET per puntare alla riga corrente.

Se con questi suggerimenti non risolvi, posta ancora.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi ferrox82 » 04/10/07 12:55

ciao, ho cercato di inserire le tue proposte ma ho dei problemi a fare la somma dei valori e il cambio di riga, per ora ho questo codice:

Sub macro1()
Set ac = Application.ActiveCell
somma = 0
For I = 1 To Range("A65536").End(xlUp).Row
Range("A1").Offset(I, 0).Select
If IsNumeric(Range("a1").Offset(I).Value) Then GoTo skippa
If ac = PA01 Then Set ac.Value = 5
If ac = AD01 Then Set ac.Value = 3
If ac = PA09 Then Set ac.Value = 1
somma = somma + ac.Value
skippa:
Next I
Range("a65536").Select
ActiveCell.Value = somma
End Sub

il codice è errato ma se nn altro da un'idea di quello che vorrei fare, e cioè prendere solo i valori alfanumerici della colonna A, tradurli in un numero che può essere 1, 3 o 5 a seconda del codice alfanumerico contenuto nella cella e infine farne la somma, che ho posto nell'ultima riga perchè l'elenco in colonna A avrà di volta in volta lunghezza diversa.
Grazie di nuovo per l'aiuto
ferrox82
Utente Junior
 
Post: 21
Iscritto il: 16/07/07 16:10

Postdi Anthony47 » 04/10/07 19:12

Ciao.
Una versione funzionante della macro potrebbe essere questa:
Codice: Seleziona tutto
Sub macro2()
somma = 0
For I = 1 To Range("A65536").End(xlUp).Row
Range("A1").Offset(I, 0).Select
If IsNumeric(Range("a1").Offset(I).Value) Then GoTo skippa
If ActiveCell.Value = "PA01" Then ActiveCell.Offset(0, 1).Value = 5
If ActiveCell.Value = "AD01" Then ActiveCell.Offset(0, 1).Value = 3
If ActiveCell.Value = "PA09" Then ActiveCell.Offset(0, 1).Value = 1
somma = somma + ActiveCell.Offset(0, 1).Value
skippa:
Next I
Range("a65536").Select     '<<<< VEDI Commento
ActiveCell.Value = somma
End Sub


Personalmente non metterei il risultato in A65536; lo metterei invece su B1, usando la formula =SOMMA(B2:B65536) e poi con Finestra /Blocca riquadri ce l' avrei sempre in vista.
Certamente non lo metterei in coda a Col. A per evitare di alterare il riconoscimento dell' ultima riga.

Se posso dare un SUGGERIMENTO, comunque io questo lavoro non lo farei con una macro, ma:
-mi faccio una tabella (es in col M-N) con Col M i codici (es PA01) e col N i relativi valore (es 5)
-in B2 uso la fomula =SE(VAL.ERRORE(CERCA.VERT(A2;M:N;1;0));"";CERCA.VERT(A2;M:N;2;0))
-copio B2 verso il basso almeno per la lunghezza presunta di dati in ingresso (col. A)
-Calcolo il totale in B1 sempre con =SOMMA(B2:B65536)

Ovviamente la tabella puoi anche farla in altro foglio, variando poi i parametri della formula del CERCA.VERT.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Creazione di una somma su un elenco personalizzato":


Chi c’è in linea

Visitano il forum: Nessuno e 29 ospiti