2011-01-07 14 views
10

Sto attraversando un foglio di calcolo che contiene una colonna di prezzi, sotto forma di tipi double. Sto cercando di individuare un valore mancante che viene visualizzato nel foglio di calcolo come "n/a", ma non mi consente di interpretarlo come un tipo string.Excel VBA - Interpretazione valori "N/D"

La cella contenente "n/a" sembra un tipo integer; come posso leggere questo?

+0

Quando si preme su una chiamata con "n/a" cosa esattamente si vuole fare? Non sono sicuro di capire cosa intendi con "come posso leggere questo"? O stai semplicemente cercando di verificare se la cella contiene un valore mancante o no? –

risposta

6

Una cella contenente # N/A viene recuperato da VBA come variante contenente un codice di errore

In generale relativo solitamente meglio per assegnare le celle di Excel ad varianti poiché una cella può contenere un numero (doppia), logica, stringa o errore e non è possibile sapere in anticipo cosa contiene la cella.

10

Se tutto quello che vogliamo fare è quello di verificare la presenza del valore di errore, allora:

Application.WorksheetFunction.IsNA(rngToCheck.Value)

dove rngToCheck è il cellulare che si desidera verificare il valore #N/A errore

(C'è un elenco delle funzioni del foglio di lavoro che possono essere richiamate da Excel VBA here)

Si può anche esaminare rngToCheck.Text poiché conterrà la stringa "# N/A "

Se, invece, si desidera leggere la formula nella cella che ha generato il #N/A poi rngToCheck.Formula farebbe che

+1

'rngToCheck.Text' è stata la soluzione per la mia istanza di questo problema. – CarloC

2

si può preparare il foglio di calcolo che ti piace di controllare come descritto di seguito e valutare i particolari cellule che contengono il Funzioni IS, è facile controllarli per True o False in VBA. In alternativa, è possibile scrivere la propria funzione VBA come mostrato di seguito.


Ci sono funzioni Excel che controllano le cellule per valori speciali, per esempio:

=ISNA(C1) 

(C1 Supposto che è la cellula di controllo). Ciò restituirà True se la cella è #N/A, altrimenti False.

Se si vuole mostrare se un intervallo di celle(dire "C1:C17") ha una cella contenente #N/A o no, potrebbe sembrare sensato utilizzare:

=if(ISNA(C1:C17); "There are #N/A's in one of the cells"; "") 

Purtroppo, questo non è il caso, non funzionerà come previsto. Puoi valutare solo una singola cella.

Tuttavia, è possibile farlo indirettamente utilizzando:

=if(COUNTIF(E1:E17;TRUE)>0; "There are #N/A's in one of the cells"; "") 

supponendo che ciascuna delle cellule E1 attraverso E17 contiene le ISNA formule per ogni cella per verificare:

=ISNA(C1) 
=ISNA(C2) 
... 
=ISNA(C17) 

Puoi nascondere la colonna E facendo clic con il tasto destro sulla colonna e selezionando Nascondi nel contesto di Excel menu in modo che l'utente del foglio di lavoro non possa vedere questa colonna. Possono ancora essere consultati e valutati, anche se sono nascosti.


In VBA è possibile passare un oggetto intervallo come parametro RANGE e valutare i valori singolarmente utilizzando un ciclo FOR:

Public Function checkCells(Rg As Range) As Boolean 
    Dim result As Boolean 
    result = False 
    For Each r In Rg 
     If Application.WorksheetFunction.IsNA(r) Then 
      result = True 
      Exit For 
     End If 
    Next 
    checkCells = result 
End Function 

Questa funzione utilizza la funzione ISNA() internamente. Deve essere collocato all'interno di un modulo, e può quindi essere utilizzato all'interno di un foglio elettronico come:

=checkCells(A1:E5) 

esso restituisce True, se una cella è #N/A, altrimenti False. È necessario salvare la cartella di lavoro come cartella di lavoro con attivazione macro (estensione XLSM) e assicurarsi che le macro non siano disabilitate.


Excel fornisce più funzioni come sopra:

ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(), 
ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT() 

Ad esempio, ISERR() controlla gli errori di cellule eccetto #N/A ed è utile per rilevare errori di calcolo.

Tutte queste funzioni sono descritte nel costruito in aiuto di Excel (premere F1 e quindi immettere "è Funzioni" come testo ricerca di una spiegazione). Alcuni di essi possono essere utilizzati all'interno di VBA, alcuni possono essere utilizzati solo come una funzione macro cellulare.