Condividi:        

[excel] codice vba per selezione range dinamico

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] codice vba per selezione range dinamico

Postdi anug_un_rama » 03/01/09 14:24

ciao a tutti!
ho una macro ke prende un range da a1:w200
se invece volessi ke il range fosse determinato in modo dinamico?
ossia ho un b1 un valore es 20 e voglio ke tale valore venga usato come limite dell'intervallo, ossia range da a1:w(valoreb1)
come posso fare?
anug_un_rama
Utente Junior
 
Post: 46
Iscritto il: 02/01/09 12:47

Sponsor
 

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 03/01/09 19:20

Ora userai probabilmente Range("A1:W200").Xyz; userai invece
Codice: Seleziona tutto
Range("A1:W" & Range("B1").value).Xyz

Ciao.

PS: usa pure "che" invece di ke, e simili.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] codice vba per selezione range dinamico

Postdi anug_un_rama » 03/01/09 20:05

Anthony47 ha scritto:Ora userai probabilmente Range("A1:W200").Xyz; userai invece
Codice: Seleziona tutto
Range("A1:W" & Range("B1").value).Xyz

Ciao.

PS: usa pure "che" invece di ke, e simili.


perchè si mette xyz?
e per i ke è la defomazione da sms quando scrivo velocemente qualcosa^^
anug_un_rama
Utente Junior
 
Post: 46
Iscritto il: 02/01/09 12:47

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 03/01/09 23:53

Ho scritto "Range("A1:W" & Range("B1").value).Xyz" per indicare una qualsiasi azione basata sul range che ne risulta; tipo Range("A1:W" & Range("B1").value).select oppure Range("A1:W" & Range("B1").value).copy o altro.

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

Re: [excel] codice vba per selezione range dinamico

Postdi anug_un_rama » 04/01/09 17:24

Anthony47 ha scritto:Ho scritto "Range("A1:W" & Range("B1").value).Xyz" per indicare una qualsiasi azione basata sul range che ne risulta; tipo Range("A1:W" & Range("B1").value).select oppure Range("A1:W" & Range("B1").value).copy o altro.

Ciao.


grazie.. e visto che siamo in tema.. è possibile fare una cosa del genere in una formula dentro excel senza passare per vba?
cioè ad es somma (a1:a(valore contenuto in b1))
ciao
anug_un_rama
Utente Junior
 
Post: 46
Iscritto il: 02/01/09 12:47

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 04/01/09 19:30

Ci sono vari modi, es:
=Somma(Indiretto("A1:A"&B1)) (B1 contiene il numero riga finale)
=Somma(Scarto(A1;0;0;B1;1)) (B1 contiene l' altezza del range a partire dalla "base" scelta, qui A1)
Vedi l' help on line delle funzioni Indiretto e Scarto.

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

Re: [excel] codice vba per selezione range dinamico

Postdi anug_un_rama » 04/01/09 21:23

Grazie mi serviva la sintassi quindi servono virgolette e &
grazie
anug_un_rama
Utente Junior
 
Post: 46
Iscritto il: 02/01/09 12:47

Re: [excel] codice vba per selezione range dinamico

Postdi mikecodadilupo » 16/03/09 10:01

Nel caso più generale in cui volessimo un range dinamico che, dati un valore nella cella A1 (ad es 3) e un valore nella cella A2 (ad es 10) mi selezioni in una qualsiasi colonna (ad es C) tutte le righe da 3 a 10, come si può fare??

Qualcosa di questo tipo (che immaginavo a priori essere errato):
Range("C" & Range("A1").Value, "C" & Range("A3").Value).Select
mi ha puntualmente dato errore!

Inoltre, se invece di avere i due estremi di un range che indicano le righe (vedi esempio sopra), volessimo realizzare il range dinamico per eccellenza, una cosa dei tipo:
- in A1 metto la lettera della colonna da cui parte il range;
- in B1 metto il numero della riga da cui parte il range;
- in A2 metto la lettera della colonna in cui finisce il range;
- in B2 metto il numero della riga in cui finisce il range.

come si potrebbe fare in VBA?

Dato che ci siamo, senza scomodare VBA, quale sarebbe la formula alternativa da inserire nella barra per ottenere lo stesso risultato??
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 16/03/09 22:15

Se lo vuoi fare con excel, coi dati forniti (A1/B1=inizio, A2/B2=fine):
-definisci un intervallo dal nome a piacere, es pippo
-come "Riferito a" metti la formula
Codice: Seleziona tutto
=SCARTO(INDIRETTO(Foglio3!$A$1&Foglio3!$B$1);0;0;Foglio3!$B$2-Foglio3!$B$1+1;RIF.COLONNA(INDIRETTO(Foglio3!$A$2&Foglio3!$B$2))-RIF.COLONNA(INDIRETTO(Foglio3!$A$1&Foglio3!$B$1))+1)

(utilizza il vero nome foglio e rispetta la sintassi data)
Userai poi il range "pippo" nelle tue formule; come ad es nella formula =SOMMA(pippo)

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

Re: [excel] codice vba per selezione range dinamico

Postdi mikecodadilupo » 17/03/09 10:20

Spettacolare!!!
Perdona la mia insistenza, ma a questo punto serve la ciliegina sulla torta: il range "pippo" delimitato dai valori delle 4 caselle A1,B1,A2,B2 vorrei che sia selezionato quando effettuo ad esempio la somma, in modo da avere espliciti quali numeri partecipano alla somma e quali no....

Se non rubo molto tempo, potresti fornirmi pure l'equivalente versione VBA, da associare ad un evento change??
Grazie mille!!
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 17/03/09 21:10

il range "pippo" delimitato dai valori delle 4 caselle A1,B1,A2,B2 vorrei che sia selezionato quando effettuo ad esempio la somma
Questo excel non lo fa; in edit formula vedrai i "precedenti" della formula, che pero' sono A1:B2.
Potresti fare qualcosa con la formattazione condizionale, ma non so se il gioco vale la candela:
-selezioni tutte le celle che potrebbero far parte del range "pippo" (o come l' hai chiamato), partendo da A1
-poi applichi una formattazione condizionale: prima scegli un colore da assegnare alle celle, poi scegli la condizione "La formula è" e come formula metterai
Codice: Seleziona tutto
=SE(E(SOMMA(--(RIF.RIGA(A1)=RIF.RIGA(pippo)));SOMMA(--(RIF.COLONNA(A1)=RIF.COLONNA(pippo)));CELLA("indirizzo")="$E$4");1;0)
da confermare con Contr-Maiusc-Enter
Guarda quel "$E$4": e' l' indirizzo della cella in cui hai inserito la formula che richiama "pippo" (quindi adatterai la formula col tuo indirizzo).
In questo modo se vai sulla cella che richiama pippo e fai F2 (per entrare in edit della formula), NON VEDI quali celle sono usate; ma se dai Enter le vedrai (o se dai direttamente F9).
Se vuoi vedere le celle del range qualsiasi sia la cella correntemente selezionata allora toglierai nella formula di sopra la condizione "la cella selezionata ha l' indirizzo $E$4; userai cioe'
Codice: Seleziona tutto
=SE(E(SOMMA(--(RIF.RIGA(A1)=RIF.RIGA(pippo)));SOMMA(--(RIF.COLONNA(A1)=RIF.COLONNA(pippo))));1;0)
(sempre Contr-Maiusc-Enter)
In questo modo vedrai subito le celle pippo.

In vba e' piu' semplice, pero' le istruzioni dipendono da quali operazioni devi fare; ad esempio questa ti seleziona l' equivalente del range pippo (meglio non usare in una macro di Change):
Codice: Seleziona tutto
Range([A1] & [B1] & ":" & [A2] & [B2]).Select

Questa assegna il nome "pippo" al range (puo' essere usata in una macro di evento, anche Change):
Codice: Seleziona tutto
Range([A1] & [B1] & ":" & [A2] & [B2]).Name = "pippo"

Questa colora direttamente il range
Codice: Seleziona tutto
Range([A1] & [B1] & ":" & [A2] & [B2]). Interior.ColorIndex = 43  'verde limone

Se non ti basta lo spunto posta ancora descrivendo che cosa vorresti fare.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [excel] codice vba per selezione range dinamico

Postdi mikecodadilupo » 18/03/09 15:04

Grazie Antony...Quanto hai scritto è perfetto!
No...non devo fare nulla di particolare! diciamo che "l'appetito vien mangiando" e così ho sfruttato questa discussione per mettere nel cassetto preziosissime informazioni che prima o poi mi torneranno sicuramente utilissime.

Ciao
mikecodadilupo
Utente Junior
 
Post: 38
Iscritto il: 18/04/06 10:52

Re: [excel] codice vba per selezione range dinamico

Postdi mpsinf » 14/11/12 20:33

Riprendo questa vecchissima discussione perchè mi sono bloccato su una cosa che mi sembrava facile. :( molto probabilmente perchè non riesco a gestire ancora bene i range !
qui sotto stralcio da dove ero partito ... ed arenato
Codice: Seleziona tutto
pippo = Range("BD1").End(xlDown).Row
Range("BF1").Value = Range("BA1:BD" & pippo).Value


Dovrei selezionare (durante una macro) un range che va da BA1 a BDx con x corrispondente all'ultima cella piena, e copiare il tutto a partire dall'ultima cella piena della colonna BF...
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 15/11/12 01:46

Vuoi copiare un numero ignoto di celle e incollarle dove? Per quale motivo devi partire dall' ultima cella? La copia va fatta a blocchi di 4 celle (col BA:BD) o cella per cella?

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

Re: [excel] codice vba per selezione range dinamico

Postdi mpsinf » 15/11/12 06:52

Mi sembrava di essere stato chiaro ma forse non è così o la mia bozza di codice è stata fuorviante. :roll: e vista l'ora della risposta l'hai letta velocemente ?


Dovrei selezionare (durante una macro) un range che va da BA1 a BDx con x corrispondente all'ultima cella piena, e copiare il tutto a partire dall'ultima cella piena della colonna BF...

Perché mi parli di un numero ignoto di celle ? Vanno dalla prima di BA1 fino all'ultima piena di BD
Vanno incollate in blocco a partire dall'ultima piena della colonna BF.
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [excel] codice vba per selezione range dinamico

Postdi Anthony47 » 15/11/12 14:01

Non escludo di essere un po' rinc**** e di non mantenere il ritmo dopo carosello; ma tu hai un modo quanto meno originale di chiedere aiuto, e anche questo e' un handicap...

Cio' detto, prova con
Codice: Seleziona tutto
Range("BA1:BD" & Cells(Rows.Count, "BD").End(xlUp).Row).Copy _
Destination:=Cells(Rows.Count, "BF").End(xlUp).Offset(1, 0)

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

Re: [excel] codice vba per selezione range dinamico

Postdi mpsinf » 15/11/12 19:16

Scusa ancora per le modalità di help da parte mia.. suggerimenti per migliorarmi ? :D
Anche questo " Copy Destination " era tra le mie parti oscure sul VBA...
infatti funziona anche così

Codice: Seleziona tutto
pippo = Range("BD1").End(xlDown).Row
Range("BA1:BD" & pippo).Copy _
Destination:=Cells(Rows.Count, "BF").End(xlUp).Offset(1, 0)


ma il tuo è più "elegante", e funziona perfettamente (a parte la prima riga vuota al 1° passaggio, ma non è un problema perchè capita solo la 1° volta)

P.S. GRANDE IL CAROSELLO.. anch'io sono in età di ricordo.
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33


Torna a Applicazioni Office Windows


Topic correlati a "[excel] codice vba per selezione range dinamico":


Chi c’è in linea

Visitano il forum: Nessuno e 67 ospiti