Como puedo contar columnas en access

Quiero contar varias columnas les pongo mi ejemplo tengo enero febrero marzo... En columnas distintas puedo sumar enero+febrero+marzo 0+2+3 me dará 5, pero quiero contar todas las columnas que tengan un valor arriba de 1 y dejar las 0, contar enero febrero marzo seria 2 porque el el 0 quedaría fuera

Respuesta
1

Si para sumar haces:

[enero]+[febrero]+[marzo]+...

para contar las que tengan un valor ¿de 1 o mas?, harías:

iif(Nz([enero],0)>0,1,0)+iif(Nz([febrero],0)>0,1,0)+iif(Nz([marzo],0)>0,1,0)+...

Eso lo puedes usar para crear un nuevo campo en una consulta:

Cuenta: iif(Nz([enero],0)>0,1,0)+iif(Nz([febrero],0)>0,1,0)+iif(Nz([marzo],0)>0,1,0)+...

en el origen de control de un cuadro de texto del formulario:

=iif(Nz([enero],0)>0,1,0)+iif(Nz([febrero],0)>0,1,0)+iif(Nz([marzo],0)>0,1,0)+...

En ambos casos nin necesidad de usar código VBA. Quizás debas cambiar las comas (,) por punto y coma (;), si te da algún error de sintaxis, porque eso depende de la configuración regional de tu sistema.

Y por supuesto, lo puedes usar en VBA, por ejemplo:

Private Form_Current:
Me.Cuenta=iif(Nz([enero],0)>0,1,0)+iif(Nz([febrero],0)>0,1,0)+iif(Nz([marzo],0)>0,1,0)+...
End If

Un saludo.


Gracias por la información pero fíjate que me dice que la expresión 0,1,0 es un numero no válido que puedo hacer

¿Probaste a cambiar las comas por punto y comas como te indicaba?

iif(Nz([enero];0)>0;1;0)

Si si probé pero ahí si me da error de sintaxis

¿Y lo estarás copiando bien? ¿O en el sitio correcto? Porque ese error no tiene sentido. Verás, la función IIF evalúa una condición, en tu caso que Nz([enero];0)>0 (es decir, que el valor del campo enero sea mayor que 0). Si la condición se evalúa como verdadero, pondrá un 1 (que es el primer 1 de la expresión), y en caso de que la condición se evalúe como falsa, pondrá un 0 (el último 0). Pero nunca, nunca te devolverá algo como: 0,1,0

Te he preparado un ejemplo para que lo veas en acción (y funcionando correctamente): http://www.filebig.net/files/LfyZuVbXCD

Van las dos primeras opciones (campo nuevo en una consulta y la expresión como origen de un control de un formulario). En mi caso, tengo que usar los punto y coma como separador.

Iif(Nz([ENERO], 0)>0,1,0)+iif(Nz([FEBRERO], 0)>0,1,0)+iif(Nz([MARZO], 0)>0,1,0)+iif(Nz([ABRIL], 0)>0,1,0)+iif(Nz([MAYO], 0)>0,1,0)+iif(Nz([JUNIO], 0)>0,1,0)+iif(Nz([JULIO], 0)>0,1,0)+iif(Nz([AGOSTO], 0)>0,1,0)+iif(Nz([SEPTIEMBRE], 0)>0,1,0)+iif(Nz([OCTUBRE], 0)>0,1,0)+iif(Nz([NOVIEMBRE], 0)>0,1,0)+iif(Nz([DICIEMBRE], 0)>0,1,0) así me queda no se si tengo algún error lo copie y solo le agregue los demás meses

Y eso ¿dónde lo estás poniendo?

Cómo está en el archivo que te colgué y hazlo del mismo modo

Gracias por el ejemplo si funciona en el tuyo pero cuando lo coloco en el mio siempre me sale el error 0,1,0 dice que es un numero no válido no se a que se refiere quizá porque mi campo es numérico si tiene whatssap pera enviarte algunas fotos el mio es 503 77018094

Puedes subir aquí las fotos, o si quieres, sube una copia de tu BD con un par de datos inventados y la miro.

Perdón mi ignorancia como la subo

http://www.filebig.net/files/6ca5JqvfW8  creo que lo pude hacer gracias por tu ayuda lo quiero poner en consulta RESUMEN TOTAL AL FINAL abrelo con shift pq lo tengo que abra el formulario de un solo gracias

Se me olvidó llenar la última casilla llenarla con cualquier número 

http://www.filebig.net/files/Bjq5GnEG3i 

Ahí te devuelvo el archivo. El problema, creo, es que lo estabas intentando poner en una consulta de datos agrupados sin cambiar la fila de total a "expresión".

Así, funciona:

Dios mio sera mi maquina ya lo hice y me sale lo mismo, le cambio las comas por punto y coma y error de sintaxis le pongo las comas y me dice numero no válido

borre el mio y puse el tuyo en mi base ya que el tuyo si me corre copie toda la consulta pero ahora me sale esto

Sabes copie toda la información nuevamente en la que te mande en la base que tu me mandaste y así la estoy corriendo me funciona te agradezco todo el apoyo y me disculpas si te hice correr ja ja pero ya así como te dije me esta corriendo cualquier otra duda te escribo y gracias de todo Corazón

A mi me da que tienes algo mal en tu Access o en tu BD, porque esos errores no son normales... La función SiInm (o IIF, en inglés), es una función nativa de Access que no te tendría que dar el error de que no está definida, ni el error de los números que mencionabas antes. Pero si lo has solucionado, ¡Estupendo! Damos por terminada la pregunta

1 respuesta más de otro experto

Respuesta

Anticipo que yo no haría columnas por meses, pero, si tengo la tabla

En el campo cuenta va a poner los mese que tienen un valor superior a 0.

Con ella hago un formulario. Para no complicarte el código, se lo pongo en el evento Al activar registro

Private Sub Form_Current()
If IsNull([Cuenta]) Then
For Each Control In Form.Controls
If Control.ControlType = acTextBox And Control.ControlName <> "cuenta" Then
If Nz([Control]) > 0 Then
Cuenta = Nz([Cuenta]) + 1
End If
End If
Next
End If
End Sub

De forma que si voy poniendo el cursor en los diferentes registros

En esencia, en cada registro comprueba si el control Enero es mayor que cero, si lo es le añade un uno al control Cuenta, si no lo es pasa al siguiente control, en este caso Febrero, comprueba lo mismo, si es mayor que cero, le suma 1 a Cuenta, si no es...

Se le podría decir que "recorriera automáticamente todos los registros, pero prefiero no complicarte la cosa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas