Condividi:        

[Excel] Macro per copiare solo valori

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 copiare solo valori

Postdi flavio73 » 25/06/06 14:33

Ciao, come faccio a registrare una macro "condizionale", cioè una macro che esegua diverse operazioni a seconda delle condizioni del foglio?
Mi spiego con un esempio:
il primo passo della macro deve ordinare una colonna di dati rispetto ad un'altra colonna piena di numeri casuali (mi serve per mescolare random dei dati) ma il numero di dati da mescolare varia di volta in volta.
Se la macro memorizza tutta la colonna mi mescola anche le celle vuote e si creano degli spazi tra i dati!
Insomma, è possibile dire alla macro copia solo n valori (dove n è il numero di celle non vuote di una colonna)?
Grazie, spero di essermi fatto capire! ;)

*** Metti titoli più significativi la prossima volta
flavio73
Utente Junior
 
Post: 24
Iscritto il: 25/06/06 14:16
Località: Torino

Sponsor
 

Re: macro condizionali

Postdi Alexsandra » 26/06/06 19:57

deve ordinare una colonna di dati rispetto ad un'altra colonna piena di numeri casuali (mi serve per mescolare random dei dati) ma il numero di dati da mescolare varia di volta in volta.
fin quì non c'è problema
Se la macro memorizza tutta la colonna mi mescola anche le celle vuote e si creano degli spazi tra i dati!
questo passaggio me lo dovresti spiegare meglio. A occhio posso pensare che la generazione random non sia proprio il massimo
Perchè hai celle vuote? le celle restano vuote a seguito della generazione random? oppure è una conseguenza di quello che stai facendo con il tuo programma?
Codice: Seleziona tutto
Sub celle_vuote()
Range("A:A").SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End Sub
Così cancelli le celle vuote della colonna A
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi flavio73 » 26/06/06 21:39

Grazie per il suggerimento, ora funziona! Procedo come facevo prima e alla fine faccio eliminare alla macro le celle vuote. In effetti è un sistema che ho ideato io per mescolare (randomizzare) una colonna di dati: la affianco ad una colonna di numeri casuali e la riordino secondo la sua sequenza. Se esistesse un comando "shuffle" in excel che fosse in grado di mescolare i dati in una serie sarebbe tutto più comodo...
Ancora grazie. :)
flavio73
Utente Junior
 
Post: 24
Iscritto il: 25/06/06 14:16
Località: Torino

Postdi Alexsandra » 26/06/06 23:46

flavio73 ha scritto:Se esistesse un comando "shuffle" in excel che fosse in grado di mescolare i dati in una serie sarebbe tutto più comodo...
Ancora grazie. :)
Cosa intendi ? spiegami meglio
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi flavio73 » 27/06/06 14:00

Intendo un unico comando come per esempio shuffle(A1:A100) che prenda il contenuto delle celle selezionate e lo mescoli in modo casuale (mi serve per effettuare un test statistico). Per farlo io affianco la colonna A coi dati da mischiare alla colonna B (in cui ogni cella genera un numero casuale) e poi dò il comando ordina in modo crescente la colonna A secondo il criterio della colonna B. Sembra un po' macchinoso ma non trovo altre soluzioni.
Vista la disponibilità chiedo ancora una cosa.
Siccome ho delle formule che puntano i dati delle mie colonne -es. correlazione(A1:A100;B1:B100)- quando la macro elimina le celle vuote la formula si modifica di conseguenza -es. correlazione (A1:A100;B1:B94)- e non funziona più. Questo succede (come mi rendo conto sia giusto) anche spostando le celle. Esiste un comando che "congeli" la formula, vale a dire qualunque eliminazione o spostamento di cella la formula rimane comunque uguale? Grazie :roll:
flavio73
Utente Junior
 
Post: 24
Iscritto il: 25/06/06 14:16
Località: Torino

Postdi Alexsandra » 27/06/06 14:39

flavio73 ha scritto:Intendo un unico comando come per esempio shuffle(A1:A100) che prenda il contenuto delle celle selezionate e lo mescoli in modo casuale (mi serve per effettuare un test statistico). Per farlo io affianco la colonna A coi dati da mischiare alla colonna B (in cui ogni cella genera un numero casuale) e poi dò il comando ordina in modo crescente la colonna A secondo il criterio della colonna B. Sembra un po' macchinoso ma non trovo altre soluzioni.
Codice: Seleziona tutto
Sub Ordina()
Range("A1:B100").Select
 Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
 OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
 DataOption1:=xlSortNormal
End Sub
copia questo codice e l'ordinamento viene eseguito in base alla colonna B
Siccome ho delle formule che puntano i dati delle mie colonne -es. correlazione(A1:A100;B1:B100)- quando la macro elimina le celle vuote la formula si modifica di conseguenza -es. correlazione (A1:A100;B1:B94)- e non funziona più. Questo succede (come mi rendo conto sia giusto) anche spostando le celle. Esiste un comando che "congeli" la formula, vale a dire qualunque eliminazione o spostamento di cella la formula rimane comunque uguale? Grazie :roll:
Puoi usare il valore assoluto nelle formule ($A$1:$A$100)
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi flavio73 » 27/06/06 15:35

Ho già provato. Se scrivi in B1 =MEDIA($A$1:$A$100) e poi elimini per esempio quattro celle da A1 a A4 la formula si trasforma lo stesso in =MEDIA($A$1:$A$96) :cry:
flavio73
Utente Junior
 
Post: 24
Iscritto il: 25/06/06 14:16
Località: Torino

Postdi Alexsandra » 27/06/06 17:03

flavio73 ha scritto:Ho già provato. Se scrivi in B1 =MEDIA($A$1:$A$100) e poi elimini per esempio quattro celle da A1 a A4 la formula si trasforma lo stesso in =MEDIA($A$1:$A$96) :cry:
se ti serve la media dell'intervallo A1:A100 e con la macro di prima cancelliamo le celle vuote,dopo aver fatto questo devi scorre con un ciclo tutte le celle dalla 1 alla 100 e inserire la formula da VBA.
Non capisco però il contesto se prima togli quelle vuote non fai prima a copiarci sopra la formula.
Dovresti chiarire il contesto in cui usi quella macro,se è più conveniente cancellare le celle vuote (perchè sono vuote?) e poi ricopiare la formula oppure inserire seubito la formula.
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 27/06/06 23:05

Nella formula =MEDIA($A$1:$A$100) e' normale che se togli N righe (tra 1 e 100) la formula si ridimensiona; si dice "indirizzamento assoluto" perche' se si riposiziona la formula l' indirizzo rimane lo stesso.
Se si vuole puntare su un range di dimensione fissa, suggerisco l' uso di SCARTO, uno dei miei preferiti; ad esempio =MEDIA(SCARTO(A1;0;0;100;1)) esegue la media delle 100 celle sotto A1.

SCARTO ti rende una cella o un range, la funzione la scegli come vuoi.

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

Postdi flavio73 » 28/06/06 14:54

Fantastica questa formula SCARTO! Non la conoscevo. Inizialmente avevo risolto il problema come mi ha suggerito Alexsandra (facendo ripristinare la formula ogni volta da VBA) ma ora è tutto più comodo (e la macro è + snella...)
Grazie per le rapidissime risposte! :)
flavio73
Utente Junior
 
Post: 24
Iscritto il: 25/06/06 14:16
Località: Torino


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Macro per copiare solo valori":


Chi c’è in linea

Visitano il forum: marcoc e 57 ospiti