PDA

View Full Version : [Excel] funzioni con riferimenti dinamici


Dav2K
06-03-2007, 10:56
Ciao a tutti, volevo sapere se c'era un modo per poter dare ad una funzione un riferimento che cambia dinamicamente es: =A(B12) [la sintassi così non è giusta] in sostanza vorrei che mi prendesse come colonna A e come n° di riga il contenuto della cella B12. Quindi nel caso B12 sia 3, alla fine va a vedere in A3.
Spero di essere stato abbastanza chiaro :)
Qualche idea?
grazie :D

card72
06-03-2007, 12:38
Ciao, allora
1)devi andara in modalità vb
2) devi creare un "moduo"
3) incolla la seguente funzione
Public Function GETVALORE(colonna, riga)
GETVALORE = Range(colonna + CStr(riga))

End Function

utilizza la funzione per avere il risutalto, ne tuo caso è
=getvalore("a";b12)


ciao

Dav2K
07-03-2007, 11:54
grazie ho anche implementato la funzione per colonne :)
solo che c'ho messo un po a capire che vb stava per visual basic :D

Dav2K
07-03-2007, 12:59
Va beh già che ho aperto una discussione ne approfitto per aggiungere una domanda inerente all'argomento :)

Come posso fare per far si che ci sia un pulstante che incrementi/decrementi la colonna a cui si riferisce la funzione sotto:

Public Function GETVALORE(colonna, riga)
GETVALORE = Range(colonna + CStr(riga))

End Function

cioè invece che mettere:
A1: C C1: 7 D1: 8 E1: 12
A2: =getvalore(A1,"1") ==> A2: 7

e in seguito modificare A1: C in A1: D per far venire A2: 8

mettere un pulsante che incrementa/decrementa direttamente la collonna per evitare di scrivere ogni volta la colonna successiva

Spero di essere stato abbastanza comprensiblile :D

Dav2K
08-03-2007, 22:02
Ok magari è un po complicata come richiesta, cmq sapreste dirimi qual'è l'identificativo della posizione di un pulsante all'interno di un foglio?
Mi spiego meglio: con range("a12") mi rifersico alla cella A12 per eventuali cambiamenti... se io ho creato un tasto in A12 come faccio a farlo capire ad una funzione?
E/O sapreste dirmi dove trovare un elenco con tutte gli "identificativi" (non so come definirli... mi riferisco a cose tipo range() CStr()) che usa visual basic per excel

grazie :)

card72
09-03-2007, 08:20
Ciao, allora
i pulsanti non hanno identificati all'interno del folgio di excel, puoi solo determinarne la poisizione dalle coordinate, che trovi nelle proprietà dell'oggetto (il puslante è un oggetto).
Per quanto riguarda le istruzioni, le torvi nella guida in linea di Visual basic per excel
nel frattempo ci guardo per il tuo problema

ellymanu
09-03-2007, 11:14
Ragazzi un picolo quesito ce l'ho pure io :D

avendo due date di riferimento esiste una funzione che mi permetta di fare un conteggio dei giorni????

grazie

Dav2K
09-03-2007, 14:09
In sostanza volevo far si che un pulsante incrementasse il n° nella cella a sinistra di 1.
La macro l'ho già fatta, il problema è che la dovrei modificare manualmente a seconda di dove si trova un pulsante e quindi per evitare ciò vorei che lo facesse automaticamente.

La macro che ho fatto è questa

Sub INC_AY1()
Range("AY1") = Range("AY1") + 1
End Sub

card72
09-03-2007, 14:50
Ti chiedo maggiori info
tu hai + di un pulsante ???
1 per ogni rigo ???'
se si allora puoi usare il nome del pulsante per determinare qualre rigo utilizzare
es. puoi chiamre il pulsante cmd_ay1

ed utilizzare la funzione

right(me.cmd_ay1.name;3)

per determinare il nome della cella assegnata a quel pulsante.

Dav2K
09-03-2007, 17:57
si ho + tasti il problema stava infatti nell'evitare di dover fare una macro per ogni tasto e metterne una "generica". Anche col nome del tasto, come hai suggerito te, è un po lunghina come cosa... ci sono una 50ina di tasti :D

card72
10-03-2007, 07:58
allora fai una funzione generica
sul click del tasto che richiami la funzione specifica

sub tasto_click

call gernica(tasto.name)
end sub

private sub generica(tastonome)

right(tastonome;3)
getvalore(etc..
end sub

Dav2K
10-03-2007, 13:13
Mi da errore di run-time '424' Nessun oggetto
la macro è questa:

Sub tasto_click()
Call generica(tasto.Name) <--- questo me lo evidenzia di giallo

End Sub

Private Sub generica(tastonome)

right(tastonome;3)
Range("L1") = 1
End Sub