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]).

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top