Condividi:        

[EXCEL] Macro per conversione dati

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] Macro per conversione dati

Postdi RPD » 09/04/09 22:55

Problema: ho un foglio di nome "Archivio" con dati che vanno da C4 a AZ5003. Devo associare a due CommandButton di nome "Converti 7" e "Converti 11" due macro sostanzialmente identiche che convertano i valori contenuti nelle 5000 righe in questione rispettivamente secondo i multipli di 7 e 11.
Esempio1:
Riga 5003: ai valori da C:AZ si sottrae 7*0=0 (ovvero i valori restano inalterati)
Riga 5002: ai valori da C:AZ si sottrae 7*1=7
Riga 5001: ai valori da C:AZ si sottrae 7*2=14 ... e così via risalendo fino alla riga 4.
Esempio2:
Riga 5003: ai valori da C:AZ si sottrae 11*0=0 (ovvero i valori restano inalterati)
Riga 5002: ai valori da C:AZ si sottrae 11*1=11
Riga 5001: ai valori da C:AZ si sottrae 11*2=22 ... e così via risalendo fino alla riga 4.

Cosa importante da considerare è che i valori convertiti siano poi "ricondotti" nell'intervallo 1-90. Esempio:
Valore in C5002 = 5 ---> "Converti 7" [5-7=-2(+90)] ---> 88
Valore in C5003 = 22 ---> "Converti 11" [22-22=0(+90)] ---> 90
Utilizzando le formule di Excel risolvevo solitamente questo passaggio con
Codice: Seleziona tutto
=SE(RESTO(C5003;90)=0;90;RESTO(C5003;90))

Spero di aver esposto il problema in modo sufficientemente chiaro, intanto grazie a tutti
RPD
Utente Junior
 
Post: 35
Iscritto il: 21/12/08 16:53

Sponsor
 

Re: [EXCEL] Macro per conversione dati

Postdi Anthony47 » 10/04/09 15:47

Vista la quantita' di celle da lavorare, io lo farei su un foglio di appoggio (dello stesso file), in cui calcoli i nuovi dati con formule (una sola formula che copi in largo e in lungo); le formule sono 20-100 volte piu' veloci del vba.
Eventualmente aggiungi una macro associata al pulsante che:
-imposta in una cella il delta che vuoi calcolare (avendo mappato quella cella nelle formule)
-copia/incolla-valori dal foglio di appoggio al foglio principale.

Ti basta lo spunto?
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Macro per conversione dati

Postdi RPD » 10/04/09 21:57

Anthony47 ha scritto:Vista la quantita' di celle da lavorare, io lo farei su un foglio di appoggio (dello stesso file), in cui calcoli i nuovi dati con formule (una sola formula che copi in largo e in lungo); le formule sono 20-100 volte piu' veloci del vba.
Eventualmente aggiungi una macro associata al pulsante che:
-imposta in una cella il delta che vuoi calcolare (avendo mappato quella cella nelle formule)
-copia/incolla-valori dal foglio di appoggio al foglio principale.

Ti basta lo spunto?
Ciao.


Grazie Anthony,
proverò a seguire il tuo spunto, solo puoi spiegare meglio cosa intendi quando dici:
"-imposta in una cella il delta che vuoi calcolare (avendo mappato quella cella nelle formule)"?
Grazie
RPD
Utente Junior
 
Post: 35
Iscritto il: 21/12/08 16:53

Re: [EXCEL] Macro per conversione dati

Postdi Anthony47 » 11/04/09 02:05

Intendo dire che non farai direttamente =A2-7*1 (ad esempio) ma =A2-AZ1*1.
Con un pulsante metti 7 in AZ1, con l' altro metti 11 e ottieni il risultato cercato sempre con le stesse formule.

Ha senso? Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Macro per conversione dati

Postdi RPD » 12/04/09 16:59

Grazie Anthony,
il tuo suggerimento ha certamente senso.
Ci sarebbero poi due altre cose che vorrei chiedere, così semplici che non mi pare meritino un nuovo topic...
Una riguarda la funzione CONFRONTA: per trovare la prima ricorrenza di un numero in una qualsiasi tra 10, 15 o 20 colonne adiacenti occorre necessariamente trovare il MIN tra altrettante funzioni Confronta oppure si può abbreviare in qualche modo la cosa utilizzando sempre una sola cella ovvero senza ricorrere a ingombranti colonne d'appoggio?
La seconda riguarda la funzione MIN: come posso fare perché mi operi all'interno di matrici restituendo il minumo valore numerico ignorando eventuali valori di errore presenti? Perché ogni volta che nell'intervallo incontra un valore di errore mi restituisce #N/D invece di trovare il minimo tra gli altri numeri presenti. Premetto che quando mi è possibile (ovvero quando ho pochi argomenti) aggiro la cosa con
Codice: Seleziona tutto
MIN(SE(VAL.ERRORE(fx);0;fx);SE(VAL.ERRORE(fy);0;fy);...)
ma quando mi ritrovo 10 e più argomenti questo metodo diventa impraticabile. Potrei ricorrere ad altre vie?
Grazie mille
RPD
Utente Junior
 
Post: 35
Iscritto il: 21/12/08 16:53

Re: [EXCEL] Macro per conversione dati

Postdi Anthony47 » 13/04/09 02:17

Per la prima domanda, sara' l' ora tarda ma non mi viene in mente un metodo che consente di risparmiare l' uso di N "celle" intermedie (non e' necessario l' uso di "colonne" di appoggio); in ognuna delle celle intermedie calcolerai tramite CONFRONTA la prima posizione del dato cercato in ogni colonna; poi calcoli il minimo tra questi valori.
Potresti pero' vedere se quanto fatto da Statix su questa discussione puo' avere una utilita' anche per te: viewtopic.php?f=26&t=79600

Per il calcolo di MIN su un intervallo che contenga anche delle celle in errore, usa una formula del tipo
Codice: Seleziona tutto
=MIN(SE(VAL.ERRORE(B1:C100);VERO;B1:C100))
(da congermare con Contr-Maiusc-Enter)
Questa lavora sul range B1:C100, adatta al bisogno.

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

Re: [EXCEL] Macro per conversione dati

Postdi RPD » 13/04/09 23:00

Della serie: "anche i migliori si arrendono"! Anthony pensavo che dover usare 20 celle con altrettanti singoli Confronta per trovare il Minimo di un numero in 20 colonne adiacenti fosse una pacchianata dovuta alla mia inadeguata conoscenza delle potenzialità Excel ma se persino tu mi dici che non esistono vie più agili significa proprio che non esiste rimedio! Cercando di raggirare il problema, data la seguente colonna dalla ratio facilmente intuibile:
0
0
0
4
0
6
0
0
9
0
0
0
0
14

Come posso calcolare il numero massimo di zeri compresi tra i valori interi positivi nella colonna (nella fattispecie: 4)? A me sono venuti in mente un paio di modi, hanno tutti però il difetto che applicati a colonne lunghe migliaia di celle rendono il ricalcolo troppo lento. Suggerimenti?
Grazie
RPD
Utente Junior
 
Post: 35
Iscritto il: 21/12/08 16:53

Re: [EXCEL] Macro per conversione dati

Postdi Anthony47 » 13/04/09 23:35

Io veramente avevo detto " sara' l' ora tarda ma non mi viene in mente un metodo che consente di risparmiare etc etc" :D
Oggi, in ora piu' ragionevole, puoi provare
Codice: Seleziona tutto
=MIN(SE(A2:J100=K1;RIF.RIGA(A2:J100)))
Da confermare con Contr-Maiusc-Enter
Dovrebbe rendere la prima riga (in valore assoluto) in cui si trova il valore impostato in K2, crcandolo in A2:J100; se il risultato e' 0 il valore e' assente.

Per il nuovo quesito, se i dati sono da A1 in giu', metti in B1 la formula
Codice: Seleziona tutto
=se(A1=0;1;0)
In B2
Codice: Seleziona tutto
=se(e(B2=0;B2<>"");B1+1;0)
e poi copi verso il basso.
Infine da qualche parte
Codice: Seleziona tutto
=max(B:B)


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

Re: [EXCEL] Macro per conversione dati

Postdi RPD » 14/04/09 14:20

Grazie Anthony,
con i tuoi consigli riesco ad alleggerire i miei fogli di calcolo sempre troooppo pesanti!
Approfitto allora per chiederti un'ultima (forse :D) domanda riguardo al foglio su cui sto lavorando... Ho queste due righe di codice che copiano l'intervallo fisso AG3:AN4007 e ne incollano i valori nella prima cella vuota di AQ:
Codice: Seleziona tutto
    Range("AG3:AN4007").Copy
    Range("AQ65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues

Vorrei raffinare questa semplice istruzione affinché dell'intervallo AG3:AN4007 copi solo le righe con valori in AI inferiori ad uno da me impostato in K4 per poi incollare (solo quelle) nella prima cella vuota di AQ. Ovviamente nel caso in cui nessuna riga dell'intervallo soddisfi il criterio l'istruzione non dovrebbe copiare né incollare nulla. E' possibile chiedere alla macro di fare ciò?
Grazie
RPD
Utente Junior
 
Post: 35
Iscritto il: 21/12/08 16:53

Re: [EXCEL] Macro per conversione dati

Postdi Anthony47 » 14/04/09 18:24

La cosa piu' semplice che mi viene in mente e' di applicare un filtro alla colonna AI, filtrando prima della Copy; poi copi il Range, elimini il filtro (piu' correttamente: si sceglie Mostra tutto), si incolla nella prima cella libera di AQ.
Le istruzioni su come Filtrare le puoi registrare mentre esegui: selezione colonna AI, Menu /Dati /Filtro /Filtro automatico; filtra scegliendo "Personalizza" e poi "Inferiore a" 555.
Nel codice sostituirai poi il valore 555 con Range("K4").value
Anche il codice per "Mostra tutto" lo registri e non ha bisogno di adattamenti.

Se con queste linee guida non risolvi posta ancora.
Ciao.

Edit: per copiare userai l' istruzione
Codice: Seleziona tutto
Range("AG3:AN4007").SpecialCells(xlCellTypeVisible).Copy

Ri-ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Macro per conversione dati

Postdi RPD » 14/04/09 20:51

Anthony mi dà errore se nella riga della macro registrata
Codice: Seleziona tutto
Selection.AutoFilter Field:=1, Criteria1:="<=555", Operator:=xlAnd

sostituisco 555 con Range("K4").value. Ovvero:
Codice: Seleziona tutto
Selection.AutoFilter Field:=1, Criteria1:="<=Range("K4").value", Operator:=xlAnd

Devo modificare virgolette o parentesi?
Grazie
RPD
Utente Junior
 
Post: 35
Iscritto il: 21/12/08 16:53

Re: [EXCEL] Macro per conversione dati

Postdi Anthony47 » 14/04/09 23:42

Devi usare Criteria1:="<=" & Range("K4").value

Un' altra cosa: se il filtro ti restituisce nessuna linea, la .Copy va in errore; devi gestirlo con On Error, tipo:
Codice: Seleziona tutto
On Error Goto Skippa
Range("AG3:AN4007").SpecialCells(xlCellTypeVisible).Copy
Range("AQ65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Skippa:
'TOGLI IL FILTRO AUTOMATICO
'Resto della macro

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


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Macro per conversione dati":


Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti