2011-01-07 33 views
10

Estoy atravesando una hoja de cálculo que contiene una columna de precios, en forma de tipos double. Estoy tratando de localizar un valor perdido que se muestra en la hoja de cálculo como "n/a", pero no me permite interpretarlo como un tipo string.Excel VBA - Interpretar valores "N/A"

La celda que contiene "n/a" parece ser del tipo integer; ¿Cómo puedo leer esto?

+0

Cuando atiende una llamada con "n/a", ¿qué es exactamente lo que quiere hacer? No estoy seguro de entender lo que quieres decir con "¿cómo puedo leer esto? ¿O simplemente está tratando de verificar si la celda contiene un valor faltante o no? –

Respuesta

6

Una célula que contiene # N/A es recuperada por VBA como una variante que contiene un código de error

En general su generalmente mejor para asignar celdas de Excel a variantes debido a que una celda puede contener un número (doble), lógica, cadena o error y no puede decir de antemano qué contendrá la celda.

10

Si todo lo que quiere hacer es comprobar si el valor de error a continuación:

Application.WorksheetFunction.IsNA(rngToCheck.Value)

donde rngToCheck es la celda que desea comprobar el valor #N/A error

(Hay una lista de las funciones de la hoja de trabajo que se pueden llamar desde Excel VBA here)

También puede examinar rngToCheck.Text ya que contendrá la cadena "# N/A" "

Si por el contrario, desea leer la fórmula en la celda que ha generado la #N/A continuación rngToCheck.Formula haría eso

+1

'rngToCheck.Text' fue la solución para mi instancia de este problema. – CarloC

2

Usted puede preparar la hoja de cálculo te gusta para comprobar como se describe a continuación y evaluar las células especiales que contienen el Es funciones, es fácil de comprobar para True o False en VBA. Alternativamente, puede escribir su propia función VBA como se muestra a continuación.


Hay funciones de Excel que comprueban las células para valores especiales, por ejemplo:

=ISNA(C1) 

(asumido que C1 es la célula para comprobar). Esto devolverá True si la celda es #N/A, de lo contrario False.

Si desea mostrar si un rango de celdas(decir "C1:C17") tiene cualquier célula que contiene #N/A o no, puede ser que parezca razonable utilizar:

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

Lamentablemente, esto no es el caso, no funcionará como se esperaba. Solo puedes evaluar una sola celda.

Sin embargo, puede hacerlo indirectamente usando:

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

el supuesto de que cada una de las células E1 través E17 contiene los ISNA fórmulas para cada celda para comprobar:

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

Puede ocultar la columna E haciendo clic con el botón derecho en la columna y seleccionando Ocultar en el contexto de Excel menú para que el usuario de su hoja de cálculo no pueda ver esta columna. Todavía se puede acceder y evaluar, incluso si están ocultos.


En VBA puede pasar un objeto de rango como RANGE parámetros y evaluar los valores de forma individual mediante el uso de un bucle 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 

Esta función utiliza la función ISNA() internamente. Debe ser colocado dentro de un módulo, y luego se puede utilizar dentro de una hoja de cálculo como:

=checkCells(A1:E5) 

Devuelve True, si cualquier célula es #N/A, de lo contrario False. Debe guardar el libro de trabajo como libro de trabajo habilitado para macros (extensión XLSM) y asegurarse de que las macros no estén deshabilitadas.


Excel proporciona más funciones como el de arriba:

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

Por ejemplo, ISERR() cheques para todos los errores de la celda excepto #N/A y es útil para detectar errores de cálculo.

Todas estas funciones están descritas en la construida en ayuda de Excel (presione F1 y luego entran "es" Funciones como texto de búsqueda para una explicación). Algunos de ellos se pueden usar dentro de VBA, algunos solo se pueden usar como una función de macro de celda.