Condividi:        

[exel] Ciclo per cambiare colonna.

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

[exel] Ciclo per cambiare colonna.

Postdi ramset64 » 08/05/09 17:41

Con la funzione formula.local inserisco tramite vba una formula che contiene tra l'altro questo riferimento:
Foglio2!C$1

Quello che mi servirebbe è trovare con vba il modo di creare un ciclo che mi cambia la lettera di riferimento, quindi
Foglio2!C$1
Foglio2!D$1
Foglio2!E$1
Foglio2!F$1
ETC. ETC.
Ci sto provando da un pò ma proprio non ci riesco, help me.
Grazie
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Sponsor
 

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 08/05/09 20:30

Ancora un quesito, che poi è simile al precedente....
io voglio inserire tramite vba, in una determinata cella questa formula:
=max(C6:G6)

La difficoltà però nasce dal fatto che io NON SO esattamente le Lettere di questa combinazione perchè le colonne variano da file a file, posso sapere che devo far riferimento alle colonne dalla terza alla settima (quindi nell'esempio lettere C e G), perchè la terza colonna è la prima vuota.
Come posso fare a trasformare la terza colonna in lettera C?
Oppure esiste un modo per ottenere direttamente tramite vba l'associazione numero di colonna /lettera che la identifica?

Tenete presente che a me serve inserire nella cellla una formula excel quindi funzione formula.local.

Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Flash30005 » 08/05/09 21:23

ramset64 ha scritto:Con la funzione formula.local inserisco tramite vba una formula che contiene tra l'altro questo riferimento:
Foglio2!C$1

Quello che mi servirebbe è trovare con vba il modo di creare un ciclo che mi cambia la lettera di riferimento, quindi
Foglio2!C$1
Foglio2!D$1
Foglio2!E$1
Foglio2!F$1
ETC. ETC.
Ci sto provando da un pò ma proprio non ci riesco, help me.
Grazie


Hai provato con
Codice: Seleziona tutto
Macro1
Worksheets("Foglio2").Select
Range("B1").Select
For I = 1 To 10
ActiveCell.Offset(1, I).Value = "Formula"
Next
end sub


Puoi variare il valore I secondo la tua esigenza


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 09/05/09 08:30

Grazie Fhash, ma non è questo che mi serviva.... cerco di spiegarmi meglio.
Sto mettendo su un codice che di fatto "costruisce" un file che le relative formule di excel. Il problema nasce dal fatto che le colonne che questo file utilizza sono sempre diverse.
Quindi supponiamo che la prima parte del codice crei un foglio che utilizzi 5 colonne (A-B-C-D-E).

Ora supponiamo che nella successiva colonna io debba inserire la formula per calcolare il massimo delle colonne C-D-E, di fatto devo inserire la formula =max(C1:E1). Questo perchè devo calcolare il massimo presente tra la terza, la quarta, e la quinta colonna.

Se la prima parte del codice crea 10 colonne (in base ad un imput) anzichè 5, quel max(C1:D1) deve diventare di fatto =max(H1:J1) ovvero il max della ottava, nona e decima colonna.

In pratica ogni parte del codice NON sa quante colonne utilizzano i codici precedenti e quindi devo trovare il modo di associare in base colonne già utilizzate o in base alla prima colonna libera il modo di associare le lettere identificative delle colonne stesse, qiundi colonna1 = A, colonna2 = B etc.

Tieni anche presente che nel file devono restare le formule di excel.

Spero di essermi spiegato, sembra complicato ma è semplice il ragionamento.
Grazie, ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Flash30005 » 09/05/09 10:33

Ciao Ramset,
spero di aver capito e se è così questo codice dovrebbe andare bene
Codice: Seleziona tutto
Sub CCol()
UC = Worksheets("Foglio1").Range("IV1").End(xlToLeft).Column + 1
Worksheets("Foglio1").Select
Cells(1, UC).FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
End Sub


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 09/05/09 11:39

Ciao Flash,
no purtroppo non basta....

Io devo necessariamente utilizzare FormulaLocal perchè ho formule particolarmente complesse che non saprei come "convertire".

Il tuo codice identifica la prima colonna libera, ma non mi dice quale lettera identifica quella colonna. A me serve questo, con il tuo codice nel mio file mi mette correttamente la formula nella colonna N che è la prima libera ma non mi dice che è la N.
In poche parole a me serve che un codice che mi dica la colonna 14 è quella identicata con la lettera N, la colonna 13 è quella identificata con la lettera M etc....

Grazie ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 09/05/09 14:31

Flash credo di aver risolto (grazie al tuo codice).

L'unica cosa che non sono riuscito a fare è trasformare questo codice:
Range("AA2").Value = "=INDEX(File, MATCH(INDEX(NrFile, " & IdentFile & "), NrFile, 0))"
nomefile = Range("AA2").Value
che in pratica mi scrive la formula nella cella AA2 e dopo copio il risultato.

Vorrei che quel calcolo fosse fatto direttametne da vba con le funzioni Application.WorksheetFunction.ETC ma non ci riesco.

Grazie mille
ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Flash30005 » 09/05/09 14:40

ramset64 ha scritto:Io devo necessariamente utilizzare FormulaLocal perchè ho formule particolarmente complesse che non saprei come "convertire".


Se hai già la formula in excel basta che registri una macro e clicchi sulla cella della formula "complessa" premi invio, interrompi la macro e te la troverai in Vba,
sostituisci quella formula a questo codice
Codice: Seleziona tutto
Cells(1, UC).FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
(al posto di "=SUM(RC[-3]:RC[-1])") e dovresti aver risolto.
Non credo si possa risalire, con il Vba, al "nome" colonna ma avendo il numero, l'unica cosa che mi viene in mente, per attribuire un nome è creare un vettore es:
Vettore(1) = "A"
Vettore(2)= "B"
...
Vettore(256) = IV"
Una volta conosciuto il numero colonna lo converti con vettore(n) in nome colonna, ma, a me sembra più semplice la soluzione precedente
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [exel] Ciclo per cambiare colonna.

Postdi Anthony47 » 09/05/09 14:58

Flash ti ha suggerito come impostare formule "relative", usando i riferimenti di tipo R1C1; se il problema e' comporre una formula piu' complessa e preferisci usare la lingua italiana, allora bastera' usare la proprieta' FormulaR1C1Local invece di FormulaR1C1.
Se ancora senti il bisogno di convertire un numero in lettera, allora puoi giocare partendo da una istruzione del tipo CAdr=Cells(3, 5).Address che restituisce $E$3, poi usi il $ per separare lettera da numero.

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

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 09/05/09 15:34

Siete fantastici.... soluzioni a iosa.
Grazie ad entrambi.
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi ricky53 » 09/05/09 16:23

Ciao,
ho letto solo adesso il tuo quesito.
Oltre quanto già suggerito da altri, In merito a:
In poche parole a me serve che un codice che mi dica la colonna 14 è quella identicata con la lettera N, la colonna 13 è quella identificata con la lettera M etc....


ti propongo:

Codice: Seleziona tutto
Colonna_Alf = Mid(Cells(1, Colonna).Address, 2, InStr(2, Cells(1, Colonna).Address, "$") - 2)

Dove se imposti Colonna=14
in
Colonna_Alf ti restituisce “N”

Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 09/05/09 17:43

Grazie anche a te Ricky53.
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 09/05/09 21:09

Ragazzi grazie ai vs consigli sono riuscito a fare un lavoro che fino a qualche tempo fa nemmeno sognavo. Ora il mio foglio viene costruito automaticamente in tutto e si autoadatta come volevo.

Sarebbe interessante aggiungere su un nuovo foglio alcune statistiche ma...
Queste statistiche ovviamente dovrebbero far riferimento al foglio2 che è quello autoadattante e di conseguenza le lettere di rifermento delle colonne cambiano, per lo stesso motivo non è possibile assegnare delle etichette, l'unico modo che mi viene in mente per fare dei calcoli su di esso è fare riferimento al primo nome che compare su ogni colonna ma non so se questo sia possibile.

Ricapitolando, se il foglio autoadattante è il foglio2, nel foglio1 posso richiamare dei dati del foglio2 facendo riferimento al nome presente nella prima riga? Ad. esempio io non so nel foglio2 dove si trovi la colonna che porta come prima riga "risultato", posso ad esempio scrivere una formula nel foglio1 che in pratica dica somma tutti i valori della colonna che ha in testa il nome risultato?

Esiste altro modo per farlo?

Grazie infinite a tutti.
Ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Flash30005 » 09/05/09 22:41

prova questo codice e adattalo dove ora esce il messaggio
Codice: Seleziona tutto
Sub cercaRis()
UC = Worksheets("Foglio1").Range("IV1").End(xlToLeft).Column + 1
       With Worksheets("Foglio1").Range(Cells(1, 1), Cells(1, UC))
            Set C = .Find("Risultato", LookIn:=xlValues)
            If Not C Is Nothing Then
                firstAddress = C.Address
                Do
                    If C.Value = "Risultato" Then
                        Col = C.Address
                        MsgBox C.Address   '<<<< puoi fare quello che vuoi: è l'indirizzo della cella che contiene "Risultato"
                    End If
                    Set C = .FindNext(C)
                    On Error Resume Next
                Loop While Not C Is Nothing And C.Address <> firstAddress
                    On Error GoTo 0
            End If
        End With

End Sub
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 10/05/09 08:37

Flash... grandissimo, grazie.

Purtroppo i miei limiti sono evidenti, però con vs aiuto ho fatto molto. La sostanza è fatta certo si possono migliorare i miei codici... ad esempio per richiamare un valore di un file diverso da quello in cui lavoro devo prima richiamarlo su una cella e poi farlo leggere a vba... in sostanza non riesco a richiamare da vba la cella di un altro file. Me lo spiegheresti per favore?

Grazie ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Flash30005 » 10/05/09 09:05

ramset64 ha scritto:.. in sostanza non riesco a richiamare da vba la cella di un altro file...


Se il nome del file è noto allora puoi fare così
Codice: Seleziona tutto
Workbooks.Open Filename:="C:\percorso\Pippo.xls"

e poi prelevi il valore dando l'indirizzo della cella che lo contiene con
Valore = Worksheets("Foglio1").Range("A1").value
questo Valore lo puoi mettere ovunque
Codice: Seleziona tutto
Windows("Pluto.xls").Activate
Worksheets("Foglio2").Range("A1").value = Valore

alla fine chiudi il foglio Pippo con
Codice: Seleziona tutto
Windows("Pippo.xls").Close savechanges:=False


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 10/05/09 09:59

Umh... se è necessario aprire il file allora non conviene, si rallenterebbe il tutto, meglio utilizzare la soluzione che ho già adottato. Sarebbe utile se si potesse ricavare il dato senza aprile il file.
Grazie ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Anthony47 » 10/05/09 11:35

Per la domanda precedente ("posso ad esempio scrivere una formula nel foglio1 che in pratica dica somma tutti i valori della colonna che ha in testa il nome risultato?")
Con formula:
Codice: Seleziona tutto
=SOMMA(SCARTO(Foglio2!A1;1;CONFRONTA("risultato";Foglio2!1:1;0)-1;1000;1))
Questa somma le prime 1000 celle (da riga 2) della colonna intestata "risultato".

Non ho capito invece su quale problema vertono i messaggi di stamattina, quindi non commento; pero' con riferimento alla frase "Sarebbe utile se si potesse ricavare il dato senza aprile il file", la domanda e': quale dato devi ricavare?

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

Re: [exel] Ciclo per cambiare colonna.

Postdi ramset64 » 10/05/09 11:52

Ottima soluzione anche la tua.
Per l'altro quiesito, provo a spiegarmi meglio.

Nel file pippo.xlsx dove lavoro richiamo in una cella qualsiasi un dato di altro file....es K5=[Setting.xlsx]Foglio1!$J$A1
Poi da vba, sempre nel file pippo, prelevo quel dato con Y = Range("K5").Value.

La domanda è, posso ottenere direttamente da vba del file pippo.xlsx il valore presente nel file Setting.xlsx, foglio1 cella A1 senza dover copiare prima il dato nel file attivo pippo e senza aprire il file Setting.xlsx come nella soluzione proposta da Flash?

grazie, ciao
ramset64
Utente Senior
 
Post: 396
Iscritto il: 29/10/08 10:41
Località: Torino

Re: [exel] Ciclo per cambiare colonna.

Postdi Anthony47 » 10/05/09 12:02

Prova a inserire qualcosa come
Codice: Seleziona tutto
    Range("A1").Formula = "='C:\Documents and Settings\UTENTE\Documenti\[Setting.xlsx]Foglio1!$J$A1"

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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[exel] Ciclo per cambiare colonna.":


Chi c’è in linea

Visitano il forum: raimea e 66 ospiti