Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] ...con una Macro da un matrice....

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] ...con una Macro da un matrice....

Postdi Venerdi » 25/10/07 00:01

Non so come risolvere questo problema e spero possiate aiutarmi. Purtroppo non conosco il VBA... posso solo intuire qualcosa...
Diciamo che ho una matrice (ho inserito degli underscore solo per rappresentarla visivamente in maniera decente), nella realtà è comunque molto più "grossa"...

_____Gen___Feb
A_____2_____0
B_____3_____4
C_____1_____2



Mi occorre una macro che in base ai numeri contenuti nella matrice mi scriva in una colonna (sempre la stessa) del mio foglio Excel le lettere A, B, C, il numero di volte indicato nella matrice, iniziando da Gen, e proseguendo con Feb...

In parole povere, quello che dovrei/vorrei ottenere, dalla cella A2 verso il basso, è

A
A
B
B
B
C
B
B
B
B
C
C

Chi mi illumina?
Grazie (e spero d'essere stato chiaro)...

V.
Avatar utente
Venerdi
Utente Junior
 
Post: 43
Iscritto il: 18/03/02 20:05
Località: Roma

Sponsor
 

Postdi Anthony47 » 25/10/07 14:44

Non e’ difficile da fare col vba (due cicli For/Next annidati), ma se spieghi l’ obiettivo finale vediamo di raggiungerlo nel modo piu’ diretto.
Altra domanda: la tabella e’ la sintesi di un elenco dettagliato che hai a disposizione? Se SI, che formato ha?

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Venerdi » 25/10/07 15:37

Per prima cosa permettimi di ringraziarti per il veloce riscontro...
Anthony47 ha scritto:Non e’ difficile da fare col vba (due cicli For/Next annidati), ma se spieghi l’ obiettivo finale vediamo di raggiungerlo nel modo piu’ diretto.
Altra domanda: la tabella e’ la sintesi di un elenco dettagliato che hai a disposizione? Se SI, che formato ha?
Ciao.

Anche se ti sembrerà strano o banale, l'obiettivo finale è proprio la colonna che desidero ottenere, in quanto quest'ultima viene letta da altre elaborazioni che poi effettuano delle simulazioni. Se non trovo il modo di ottenerla con un automatismo, me la devo "scrivere" a furia di copia incolla o con una macro molto "grezza" che dovrei variare di continuo. Nella realtà la matrice è di 12 colonne per 26 righe, e nella mia agognata colonna dovrebbe generare circa 15.000 - 20.000 celle valorizzate.
Quanto alla tabella, non è una sintesi (se lo fosse avrei risolto già), ma proprio una matrice di numeri che rappresentano delle quantità, frutto di valutazioni che non sono solo numeriche (sostanzialmente è un punto di partenza di un ipotesi di lavoro). Per essere più chiaro dovrei spiegarti cosa faccio, ma considerato che ho problemi a chiarirlo a me stesso... credimi sulla parola... e se puoi aiutami...
Ovviamente dovrò capire il suggerimento che mi darai, in quanto poi dovrò ampliarne l'uso.

Grazie
V.
Avatar utente
Venerdi
Utente Junior
 
Post: 43
Iscritto il: 18/03/02 20:05
Località: Roma

Postdi Anthony47 » 25/10/07 22:54

Non devi spiegare di piu’…

Prova la seguente macro:
Codice: Seleziona tutto
Sub venerdi()
CWs = "Venerdi"         '<< Foglio su cui giace la tabella
Tabella = "F3:J11"      '<< Indirizzo di tabella
FOut = "Ven-lista"      '<< Foglio su cui si costruisce l' output
DestCol = 1             'Colonna su cui generare: 1=A, 2=B, etc
'
'AZZERA colonna di Output sul foglio di Output
Sheets(FOut).Select
Range("A:A").Offset(0, DestCol - 1).Select
'... chiedi conferma
Mess = "Cancello la colonna selezionata???" & vbCrLf & ">>  OK per Confermare; ANNULLA per abortire"
scelta = MsgBox(Prompt:=Mess, Buttons:=vbOKCancel)
If scelta = 2 Then GoTo Esci    'Cancel
Selection.Clear
'
'poi crea lista
Sheets(CWs).Select
STab = Range(Tabella).Range("A1").Address
For J = 1 To Range(Tabella).Columns.Count -1
 For I = 1 To Range(Tabella).Rows.Count - 1
'Label = Range(STab).Offset(I, 0).Value
 Range(STab).Offset(I, J).Select
  For K = 1 To Range(STab).Offset(I, J).Value
   Range(STab).Offset(I, 0).Copy Destination:=Sheets(FOut).Cells(65536, DestCol).End(xlUp).Offset(1, 0)
  Next K
 Next I
Next J
Esci:
Sheets(CWs).Select
End Sub


Apri il vba editor con Alt-F11; fai Inserisci /Modulo; copia il codice e incollalo nel frame vuoto di dx.
Prima di lanciare, definire le variabili iniziali (righe contraddistinte da <<); in particolare ambedue i fogli devono gia’ esistere. I fogli possono anche coincidere.
Meglio evitare errori, anche se la macro prima di cancellare la colonna su cui va creato l’ output chiede conferma. Comunque sempre DUE COPIE di backup del file originale.

Torna su excel, eventualmente assegna un tasto di lancio alla macro (Es Contr-Maiusc-g); infine esegui la macro.

Ciao, fai sapere.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Venerdi » 26/10/07 14:14

...è semplicemente perfetta ed è esattamente ciò che mi occorreva.
Sei stato grandioso!

Grazie!!! ImmagineImmagineImmagine

V.
Avatar utente
Venerdi
Utente Junior
 
Post: 43
Iscritto il: 18/03/02 20:05
Località: Roma


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] ...con una Macro da un matrice....":


Chi c’è in linea

Visitano il forum: alfrimpa e 7 ospiti