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

MACRO PER COMBINAZIONI DI OPERAZIONI TRA COLONNE

Ultimo Aggiornamento: 04/08/2015 10:50
Post: 1
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
31/07/2015 11:58

Ciao a tutti!
Sono nuova di questo forum ma ho visto che tra tutti i forum per VBA che ho visitato qua per ogni post vengono sempre proposte soluzioni veloci e giuste.

Ho questo problema:
ho una serie di dati in colonne che sono dalla 2 alla 62 (B:BK) e per ogni colonna quasi piú di 400 righe (dalla 6 in giú) Devo fare una semplice operazione tra dati della stessa riga tra 3 colonne diverse alla volta che é 2*X-Y-Z(per esempio 2*B6-C6-D6) ma devo considerare tutte le combinazioni possibili tra le righe delle varie colonne (2*B6-E6-C6,2*B6-N6-C6, 2*B6-S6-X6).Una volta finito con tutte le righe della colonna B farlo con C: 2*C6-B6-D6, 2*C6-F6-Y6, etc etc
..e cosi via per tutte le righe e colonne.
I risultati devono essere ordinati perché poi dovró fare la media e la deviazione standard della colonna delle combinazioni. Avro come risultato una serie di colonne del tipo:

2*B6-C6-D6 | 2*B6-N6-C6 | 2*B6-S6-X6 | 2*C6-B6-D6 | 2*C6-F6-Y6
2*B7-C7-D7 | 2*B7-N7-C7 | 2*B7-S7-X7 | 2*C7-B7-D7 | 2*C7-F7-Y7
2*B8-C8-D8 | 2*B8-N8-C8 | 2*B8-S8-X8 | 2*C8-B8-D8 | 2*C8-F8-Y8
.......................... | ....................... | ....................... | ........................ | ......................

Ogni volta sbaglio sempre qualcosa nei cicli non riesco a venirne fuori con una soluzione.Sono 2 giorni che ci sono sopra e sono abbastanza disperata...potete gentilmente aiutarmi con il listato che tramite un button mi risolve questa combinazione di operazioni?

Grazie in anticipo [SM=g27823]
Post: 2.649
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 13:26

Perchè non alleghi il codice + alcune righe in esempio (quando rispondi c'è il tasto allega)
Metti anche il risultato che desideri, perchè con le sigle che hai scritto non capisco.
>>>e cosi via per tutte le righe e colonne.

Per le righe OK, per le colonne???
EX 2*B6-C6-D6
Credo che la prossima sia 2*B6-C6-E6 (sai quante combinazioni ci sono tra 61 colonne)
Oppure le colonne sono determinate/prefissate?
Excel 2013
Post: 1
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
31/07/2015 16:28

Grazie mille per la risposta.


Si scusa hai ragione.
In allegato trovi Screen 2 quello che vedo e Screen 1 quello che mi servirebbe. Non serve una successione ben precisa, la prossima potrebbe essere anche

2*B6-T6-X6
2*B7-T7-X7
2*B8-T8-X8
.................

Il mio problema é appunto scrivere un codice che mi dá tutte queste combinazioni.

Successivamente per ognuna di quelle colonne trovate dovrei calcolare media e dev.standard.

Ah l'operazione 2*X-Y-Z puo avvenire solo sulla stessa riga (non si puó avere 2*B6-C7-E8 per esempio..)!!

Riesci ad aiutarmi? :)

Isabella
[Modificato da isa.b89 31/07/2015 16:31]
Post: 2
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
31/07/2015 17:09

Ah io per ora ho provato questo codice, ma non sono sicura sull'output. Inoltre dovrei trovare tutte le combinazioni possibili ma non credo con questo funzioni.

Private Sub CommandButton1_Click()
riga = 6: colonna = 2
Do Until riga = 98
Do While colonna <> 64
Cells(riga, colonna).Value = 2 * Cells(riga, colonna).Value - Cells(riga, colonna + 1).Value - Cells(riga, colonna + 2)
colonna = colonna + 1
Loop
riga = riga + 1: colonna = 2
Loop

End Sub
[Modificato da isa.b89 31/07/2015 17:09]
Post: 2.653
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 17:36

Si, immaginavo che le operazioni vanno fatte sulla stessa riga.
Meglio se spostavi un file, non delle foto?

Se vero quanto penso, che devi fare ogni combinazione possibile. EX per lettere colonna
B-C-D, B-C-E,B-C-F ecc ecc sino a B-C-BJ1 e dopo
B-D-E, B-D-F,B-D-G ecc ecc sino a B-D-BJ1 e dopo
B-E-F, B-E-G,B-E-H ecc ecc sino a B-E-BJ1 ecc ecc sino ad arrivare all'ultima BH-BI-BJ
Ti faccio notare che le combinazioni sono 34221 e in Excel ci sono quasi 12500 colonne.
Secondo Te sviluppato in verticale, Ti va bene?
EX Se in B1:BJ1 scrivi dal 1 al 61, questo codice sviluppa tutte le combinazioni in colonna A
Sub calcola()
Dim X As Long, Y As Long, R As Long, Rg As Long
Rg = 2
For X = 2 To 59
    For Y = X + 1 To 60
        For R = Y + 1 To 61
            Cells(Rg, 1) = Cells(1, X) & " _ " & Cells(1, Y) & " _ " & Cells(1, R)
            Rg = Rg + 1
        Next R
    Next Y
Next X
MsgBox "fatto"
End Sub
[Modificato da raffaele1953 31/07/2015 17:54]
Excel 2013
Post: 3
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
31/07/2015 18:03

Mmm...ho provato a fare girare questa macro con un button. Mi é apparsa una finestra con scritto fatto e la colonna A é tutta "_ _"

Una cosa del genere potrebbe funzionare secondo te? Assumendo di fermarci a riga 97 comprendedno peró tutte le colonne


dim it1 as object
dim it2 as object
dim it3 as object
For each it1 in range (B6:BK97)
For each it2 in range (B6:BK97)
For each it3 in range (B6:BK97)
if(it1 <>it2)
if (it2<> it3)
if (it1<>it3)
cell(riga, colonna).value = 2* it1.value - it2.value - it3.value
end if
enf if
end if
Next it3
Next it2
Next it1



Non sono molto sicura sulla parte Cell(riga,colonna).Value

Anzi non funziona nemmeno perché mi da errore " sub or function not defined"
[Modificato da isa.b89 31/07/2015 18:12]
Post: 2.654
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 18:51

Ps Le combinazioni sono 35991 e le colonne in excel 2007 sono solamente 16384

Comunque come Ti ho detto, non si può svilupparlo in orrizzontale, se Vuoi si può fare in Verticale
Ex Il calcolo della riga1 verrà fatto nella colonna A
Ex Il calcolo della riga2 verrà fatto nella colonna B
Ex Il calcolo della riga3 verrà fatto nella colonna C ecc ecc

Pps, poi se desideri fermarti alla riga97 = equivale a colonna CS oppure vai avanti.
Devi passarmi un esempio se Ti va bene

Pps Io preferisco Cells(riga,colonna).Value
Excel 2013
Post: 4
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
31/07/2015 19:02

Si scusa il comando é Cells.
E sono d'accordo con te a svilupparlo in verticale, perché altrimenti anche se do come inizio la colonna dopo l'ultima dei dati (64) non ci sta dentro e si blocca tutto.

PS: io ho Excel 2010
PPS: ho visto il tuo excel e esatto piu o meno devo fare quello solo che devo farlo per ogni riga poi
Post: 2.655
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 19:58

mmmmm...mi sembra di chiedere soldi?

Scusami un file senza dati sensibili (con le colonne BM:BR come in foto), in modo tale che partiamo con i stessi dati,per vedere se riesco metterti anche la scritta vicino in modo tale da sapere a quale operazione appartiene la cifra seguente? Per verificare bene le aree da elaborare?
Excel 2013
Post: 5
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
31/07/2015 22:16

Mi scusi se sono stata inopportuna.

Comunque ho allegato un file come quello che mi ha richiesto. Purtroppo ho dovuto usare dati casuali perché gli altri erano sensibili ma ho usato lo stesso range di quelli originali. In questo modo possiamo parlare con gli stessi dati.

La ringrazio ancora per la disponibilità.
Post: 2.657
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
31/07/2015 22:59

Scusami, sarò vecchio
1) Ho richiesto un file con DATI, "hai pensato d'inviarmi dei =CASUALE.TRA(-200;400)"
Qualsiasi operazione che faccio "variano"
2)>>>con le colonne BM:BR come in foto
Non le hai allegate? OK, sei della NASA e i dati sugli Alieni NON si possono avere.
Io non posso eseguire nulla.

Ps. al codice scritto, devi mettere ancora un FOR per tutte le righe che deve eseguire. Ciao
Excel 2013
Post: 6
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
01/08/2015 00:29

Scusami ma io non sono molto pratica altrimenti non scriverei qui per un aiuto.
Non è che agisco in cattiva fede solo non sono pratica altrimenti non te l'avrei mandato pensando di farti perdere tempo e basta.

Purtroppo non ho il file originale ora. Te lo mando Lunedì va bene?
Volevo solo essere sicura di non infrangere nessuna regola.
Post: 2.658
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
01/08/2015 00:58

Importante senza dati sensibili
Significa elimina --->cognomi/nomi/via/telefono ed altri dati ecc ecc.

A me sembrano solo numeri..., vorrei solo capire dove sono in quale posizione?
Mi raccomando le celle BM:BR come in foto (devo capire le coordinate delle scritte a fianco delle formule)
Excel 2013
Post: 2.666
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
02/08/2015 14:44

Dal Tuo allegato ho bloccato il CASUALE.TRA, ho aggiunto il foglio2

Il codice calcola quante righe/colonne sono presenti ed elabora il tutto in circa 10 minuti. Non capisco la presenza delle date in riga e anche in colonna.
Excel 2013
Post: 7
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
03/08/2015 10:39

Buongiorno :)

Grazie mille per il suo messaggio.

le ho allegato il file che mi aveva chiesto.
Le date in colonna A sono i business day in cui sono calcolati i valori mentre le date in riga sono le diverse Maturity : quindi ogni data in riga 3 corrisponde alla data di scadenza di un oggetto diverso il cui valore é stato calcolato in tutti i business days in colonna A.

P.S: Ho provato a fare andare il codice del suo excel nel mio ma c'é qualcosa che non va...non capisco mi da errore alla formula.

Post: 2.668
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
03/08/2015 12:17

Il mio allegato non dà errori, sul Tuo odierno..., nel codice...
1)bisogna modificare sia i nomi dei fogli in "sheet1 Sheet2"
2)bisogna modificare le partenze (oggi parti dalla 6 riga)
3)Dopo la colonna BK, non ci deve nulla (comunque ok cancellato, l'avevo richiesto io)
4)In colonna A non ci devono essere celle vuote e tutte le celle devono aver una data.
Naturale che se aggiungi righe, il tempo aumenterà (In teoria ci fossero 400/500 righe deve farcela, mà non sò in quanto tempo).

A riguardo l'errore è perchè in alcune celle hai scritto #N/A
Ps. Appena complettato, Ti farò usare il Codice di ISY (Grazie),"superveloce nel modulo2"
Excel 2013
Post: 8
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
03/08/2015 15:13

Grazie mille, ha funzionato tutto alla perfezione e in 20/30 min ha finito tutti i calcoli.

Non so davvero come ringraziarla.

Ora devo andare avanti nello studio di questi dati peró le prossime operazioni sono abbastanza facili.

Nel caso in futuro abbia ancora bisogno posso ricontattarla?

Grazie ancora.

Isabella
Post: 9
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
03/08/2015 16:17

Scusi se la importuno ancora ahah ma ho un altro dubbio.

Riguardo alle stesse combinazioni che abbiamo trovato come si potrebbe implementare una macro che trasforma in un foglio nuovo ogni valore di ogni riga (current) in un altro chiamato Score dove Score=(Current-Average(riga))/Dev.standard(riga) ??

Importante sarebbe mantenere le sigle cosí poi una volta trasformati i valori con questa operazione posso trovare i migliori 5 e andare a vedere questi 5 il frutto di quale combinazione sono.

Grazie ancora
[Modificato da isa.b89 03/08/2015 16:18]
Post: 2.669
Registrato il: 28/06/2011
Città: AGORDO
Età: 70
Utente Veteran
2013
OFFLINE
03/08/2015 16:50

Ti allego il Codice di ISY (molto più veloce, 1/2 minuti), adesso controlla anche eventuali #N/D in celle.
Vedi che un solo #N/D viene ripetutto in diverse posizioni.
Se non li vuoi vedere vai alla riga 59 del codice e sostituisci "#N/D" con ""

Ora che hai i dati, se immetti delle formule in Sheet3 dovresti avere il risultato voluto. Casomai apri un'altro post, spiegando bene cosa desideri.

Ps. non sono pratico della formula =DEV.ST(), dovrei vedere esempi per capire come fare un codice.
Excel 2013
Post: 10
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
03/08/2015 17:00

Grazie mille!! Quest'ultimo é davero molto veloce.

Io avevo risolto con Registra macro e facendo quindi in maniera quasi manuale AVERAGE e DEV.ST.
Il problema era poi il codice per iterare l'operazione a tutti valori
[Modificato da isa.b89 03/08/2015 17:00]
Post: 11
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
03/08/2015 17:30

Nel senso creare manualemente le colonne AVERAGE e ST.DEV a fianco delle ultime colonne delle combinazioni e poi fare la macro che va a prendere i valori dalla colonna nelle operazioni.

Forse peró non é il modo piú ingegnoso..dice che sarebbe meglio includere nella macro le operazioni di AVERAGE e ST.DEV?
Post: 15
Registrato il: 31/07/2015
Città: MILANO
Età: 35
Utente Junior
Microsoft Excel 2010
OFFLINE
04/08/2015 10:50

Gentile raffaele1953,

ho messo un'altro post come mi ha suggerito, peró sarei molto felice di ricevere risposta anzi da lei che conosce gia la situazione e lo spreadsheet. :)
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 11:53. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com