Utilizzo delle tabelle in UDF in Excel 2007
-
08-07-2019 - |
Domanda
Sto scrivendo un UDF per Excel 2007 a cui voglio passare una tabella e quindi faccio riferimento a parti di tale tabella nell'UDF. Quindi, ad esempio, la mia tabella ha chiamato " Stock " potrebbe assomigliare a questo:
Nome & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Costo & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Articoli in stock
Orsacchiotto & nbsp; & nbsp; & nbsp; & # 163; 10 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp
Lecca lecca & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; 20p & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & n & p; / p>
Ho un UDF che voglio calcolare il costo totale di tutti gli articoli rimasti in magazzino (l'esempio reale è molto più complesso che non può essere fatto senza una formula molto complessa)
Idealmente la sintassi di per l'UDF sarebbe simile a
TOTALPRICE(Stock)
Quale da quello che posso capire significherebbe che l'UDF avrebbe la firma
Function TOTALPRICE(table As Range) As Variant
Ciò di cui ho problemi è come fare riferimento alle colonne della tabella e scorrere le stesse. Idealmente, vorrei poterlo fare riferimento alle intestazioni di colonna (quindi qualcosa come la tabella [Costo]).
Soluzione
Questo è molto semplice (nessun gioco di parole previsto) ma farà ciò che descrivi. Per le tabelle più grandi può diventare lento poiché sotto il cofano si va avanti e indietro tra la funzione macro e il foglio di lavoro e quel tipo di attività si somma.
Presuppone che tu abbia una riga di intestazioni e una colonna di nomi (da qui le variabili del ciclo For a partire da 2).
Ci sono tutti i tipi di cose che potrebbero essere necessarie: possiamo salvarle per un'altra domanda o un altro giro su questo.
Nota che la funzione restituisce una "variante", tra ...
Public Function TotalPrice(table As Range) As Variant
Dim row As Long, col As Long
Dim total As Double
For row = 2 To table.Rows.Count
For col = 2 To table.Columns.Count
TotalPrice = TotalPrice + table.Cells(row, col) * table.Cells(row, col + 1)
Next
Next
End Function
Altri suggerimenti
Nota: non ho Excel 2007 e sto provando a scriverlo utilizzando il documento MSDN sul Web.
Sembra che l'intervallo avrà la raccolta ListColumns
Quindi, la sintassi potrebbe essere table.ListColumns (" Cost ").
Questo funziona?