PDA

View Full Version : Problema macro in Excel


peppequo
18-12-2003, 09:26
In un foglio Excel ho fatto una macro che effettua dei calcoli sulle
varie cartelle che lo compongono.
Il problema è questo:
In una delle cartelle ho un numero di righe che può variare di volta in
volta.
Nella colonna "E" c'è il progressivo di riga, quindi nella macro ho inserito

Dim Indx As Integer
Range("F1").Select
ActiveCell.FormulaR1C1 = "=MAX(C[-1])"
Indx = ActiveCell.Value

A questo punto mi ritrovo in Indx il numero di righe che ho effettivamente
valorizzate.
Come faccio a selezionare tutte, e solo!!!!, le righe valorizzate?
All'inizio sapendo che non avrò mai più di 10000 righe avevo fatto

Range("A1:E10000").Select

ma vorrei perfezionare la cosa.
Ho provato con

Range("A1:EIndx").Select

Ma in esecuzione prendo l'errore
Metodo 'Range' dell'oggetto '_Global' non riuscito
:confused:

Grazie e a buon rendere !!

misterx
18-12-2003, 12:22
alla spicciolata

se lo converti a questo modo se a posto


Range(Cells(1, 1), Cells(10, 10)).Select

peppequo
18-12-2003, 15:00
Se utilizzo la tua formula così come l'hai scritta funziona ma se io sostituisco uno dei valori con una variabile mi dà errore.

Altri suggerimenti???:D

robnet77
18-12-2003, 22:09
selection.end(xlDown).select

restituisce il "fine-giù", praticamente tu ti posizioni su A1, esegui il comando qua sopra, a questo punto il codice ti porta nell'ultima casella della colonna A che è stata "riempita".

Per intercettare questa casella, puoi usare il comando:

activeCell.row

che rappresenta la riga corrente,

oppure puoi provare a usare l'espressione:

.UsedRange per selezionare l'area corrente di lavoro, se vuoi domani posso fornirti qualche esempio, ciao :)

peppequo
19-12-2003, 06:49
Te ne sarei grato, grazie.
Nel frattempo provo con quanto mi hai detto.

misterx
19-12-2003, 06:58
Originariamente inviato da peppequo
Se utilizzo la tua formula così come l'hai scritta funziona ma se io sostituisco uno dei valori con una variabile mi dà errore.

Altri suggerimenti???:D


l'importante è l'idea; poi è sufficiente unire quanto espresso da robnet77 ed il tutto diventa:

rigaultimacella = activeCell.row
colonnaultimacella = activeCell.col

Range(Cells(1, 1), Cells(rigaultimacella , colonnaultimacella )).Select


occhio che non ho provato il codice postato.........

ok ?

robnet77
19-12-2003, 08:25
ti riporto una parte di una macro che ho fatto tempo fa, è commentata il minimo indispensabile, ma penso ti sia sufficiente, eventualmente chiedi pure, anche se non sono certo un esperto di programmazione, ciao :)



'rintraccia l'ultima riga del foglio di lavoro
Range("a1").Select
Selection.End(xldown).Select
UltimaRiga = ActiveCell.Row

'cerca verticale e copia formula nelle celle in basso
Range("O2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-10],nover.xls!nover,2,FALSE)"
Selection.Copy
Range("O3", "O" & UltimaRiga).Select
ActiveSheet.Paste
Application.CutCopyMode = False

'ordina dati per colonna "O" decrescente, per mettere i "NO" in fondo
Cells.Select
Range("D1").Activate
Selection.Sort Key1:=Range("O2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom



'trova il primo "NO" tra i valori nella colonna "O"
Columns("O: O").Select
Range("O97").Activate
Selection.Find(What:="no", After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
PrimarigaNo = ActiveCell.Row
Selection.End(xldown).Select
UltimarigaNo = ActiveCell.Row
Range("A" & PrimarigaNo, "O" & UltimarigaNo).Select
Selection.Delete shift:=xlUp

robnet77
19-12-2003, 08:28
Columns("O: O").Select


nella riga che ho riportato qua sopra, ho aggiunto uno spazio dopo aver postato, visto che il codice VB lo aveva interpretato come una faccina :p

p.s. ma non è possibile escludere le faccine dai tag [code]? :confused: