Combinar dos Funciones

20/04/2006 - 18:00 por medardosantana | Informe spam
Es esta la primera que escribo a este foro, por lo que envío un saludo
respetuoso para todos y mis felicitaciones por el trabajo desarrollado.
Yendo al tema que me trae:

Supongamos que en una columna de una tabla tengo lo siguiente:
A1 X
A2
A3 X
A4
A5

En la última fila (en A5), necesito una función que me cuente aquellas
celdas donde exista la “X”. De modo que, en este caso, el resultado debe
ser 2.

En Excel, sería algo como esto:
=IF((A1:A4="X";COUNT(A1:A4))
pero esto en Word me da error de sintaxis.

¿Cómo quedaría finalmente la combinación de las funciones IF y COUNT para
que me de el resultado correcto?

Preguntas similare

Leer las respuestas

#6 Marta PM [MVP Office]
21/04/2006 - 19:05 | Informe spam
Si pones el código por aquí, tal vez alguien pueda ayudarte.

Marta PM
Saúdos/Saludos
MVP Office

(Si quieres escribirme ya sabes lo que no quiero)
Más consejos en www.fermu.com
__________
La información contenida en este mensaje se proporciona "TAL CUAL", sin garantías
explícitas ni implícitas, y no otorga derecho alguno. Usted asume cualquier riesgo al
poner en práctica lo recomendado o sugerido en el presente mensaje.

¿Quieres saber que es un MVP?
http://mvp.support.microsoft.com/

"Medardo" escribió en el mensaje
news:%
Tengo una tabla con 9 columnas, que registra, entre otras cosas, el nombre
de los que solicitaron matricular en un curso de computación, pero las
últimas cuatro se marcan con una “X”, que trata de las vías de
solicitudes, los que matricularon y los que han causado baja por ausencia.
Digamos que existen 37 personas, por tanto, 37 líneas y, al final, una
línea de totales que, entre otras cosas, en una columna cuenta la cantidad
de personas que solicitaron por una u otra vía, otra columna que cuenta
los que matricularon y la otra, que cuenta las bajas. Estas columnas
simplemente tienen una “X”.
A modo de ejemplo:

Magalys Pérez X X
Aracelis Vega X
Niurka Veiga X X
Arelis Flebe X
Miriam Bravo X X
Ibet Triana X
Ramón Portal X X
TOTAL

Te diré que la solución la tengo casi, casi, a través de código VBA, pero
está dando un pequeño problema, que la envié al foro de Word con VBA, pero
aún no me han contestado.

Saludos
Medardo


Respuesta Responder a este mensaje
#7 medardosantana
22/04/2006 - 20:48 | Informe spam
Perfecto, siendo así, aquí está el código:

Dim TotalFilas As Long
Dim Fila As Long
Dim i As Long
TotalFilas = ActiveDocument.Tables(1).Rows.Count
For Fila = 1 To TotalFilas
If ActiveDocument.Tables(1).Cell(Fila, 1).Range.Text = "X" Then
i = i + 1
End If
Next
ActiveDocument.Tables(1).Cell(5, 1).Range = i

Comentarios:

‘TotalFilas’ es la variable que cuenta la cantidad de filas que existen en
la tabla.
‘Fila’ es la variable que indica por cuál fila estamos en estos momentos
al realizarse el bucle (ciclo FOR).
La condición IF…THEN verifica si existe una “X” en la celda por donde está
pasando el ciclo FOR y, de existir, aumenta la variable ‘i’ en uno (1).
Finalmente, el valor de ‘i’, que es la cantidad de “X” que existen, lo
ubico en la celda del Total que, en este caso, a modo de ejemplo, es la
celda que se encuentra en la fila 5 de la columna 1.
De esta forma, obtengo la cantidad de “X” que existen en esa columna (la
1, en este caso).

Gracias
Medardo
Respuesta Responder a este mensaje
#8 medardosantana
22/04/2006 - 21:19 | Informe spam
Disculpen, pero se me olvidó explicar cuál es el problema que está dando
este código.

La variable ‘i’ siempre es cero porque nunca se cumple la condición IF.
Por ejemplo, si mando emitir un mensaje con el contenido de la celda, me
aparece correctamente la “X”, por lo que la condición IF se cumple, y la
variable 'i' debe incrementarse en uno, sin embargo, además de la "X",
aparece un cuadrito debajo. Quizás ese cuadrito tenga que ver en todo
esto, y si es así, no sé qué es eso.
Respuesta Responder a este mensaje
#9 Marta PM [MVP Office]
22/04/2006 - 21:42 | Informe spam
Hola:
Entiendo que el problema es que no te reconoce la X como tal. Es normal porque en el
texto las tablas Word incluye unos caracteres ascii no imprimibles que equivalen a
los caracteres (Chr(13) & Chr(7)).
Para intentar solucionarlo tienes dos opciones, al menos, probablemente existan más,
pero el código no es mi fuerte.
La primera de ellas es crear una constante en tu código que incluya esos dos
caracteres y luego añadirlos en el If de búsqueda del texto. Te quedaría algo así.
Dim TotalFilas As Long
Dim Fila As Long
Dim i As Long
'Llamamos asci a la cadena de caracteres no imprimibles
asci=(Chr(13) & Chr(7))
TotalFilas = ActiveDocument.Tables(1).Rows.Count
For Fila = 1 To TotalFilas
If ActiveDocument.Tables(1).Cell(Fila, 1).Range.Text = ("X" & asci) Then
i = i + 1
End If
Next

La otra opción pasaría por "recortar" esos dos caracteres mediante el uso de las
funciones Left y Len. Te quedaría algo así:
Dim TotalFilas As Long
Dim Fila As Long
Dim i As Long
TotalFilas = ActiveDocument.Tables(1).Rows.Count
For Fila = 1 To TotalFilas
texto=Left(ActiveDocument.Tables(1).Cell(Fila, 1).Range.Text,
(Len(ActiveDocument.Tables(1).Cell(Fila, 1).Range.Text) - 2))
If texto = "X" Then
i = i + 1
End If
Next

Otra cosa que creo que no tienes bien es la última línea. Te faltaría añadir un Text
para que escriba en esa celda. Tendría que quedarte algo como esto:
ActiveDocument.Tables(1).Cell(5, 1).Range.Text = i

Espero que te sirva para algo. Por favor comenta los resultados.

Marta PM
Saúdos/Saludos
MVP Office

(Si quieres escribirme ya sabes lo que no quiero)
Más consejos en www.fermu.com
__________
La información contenida en este mensaje se proporciona "TAL CUAL", sin garantías
explícitas ni implícitas, y no otorga derecho alguno. Usted asume cualquier riesgo al
poner en práctica lo recomendado o sugerido en el presente mensaje.

¿Quieres saber que es un MVP?
http://mvp.support.microsoft.com/

"Medardo" escribió en el mensaje
news:
Disculpen, pero se me olvidó explicar cuál es el problema que está dando
este código.

La variable ‘i’ siempre es cero porque nunca se cumple la condición IF.
Por ejemplo, si mando emitir un mensaje con el contenido de la celda, me
aparece correctamente la “X”, por lo que la condición IF se cumple, y la
variable 'i' debe incrementarse en uno, sin embargo, además de la "X",
aparece un cuadrito debajo. Quizás ese cuadrito tenga que ver en todo
esto, y si es así, no sé qué es eso.


Respuesta Responder a este mensaje
#10 medardosantana
22/04/2006 - 22:35 | Informe spam
¿Y dices que el código no es tu fuerte? Pues te sugiero que le des más
atención porque lo haces muy bien.
Pues sí Martha, ambas opciones dan un resultado correcto. Solo dos cositas:

1- En esta instrucción:
texto=Left(ActiveDocument.Tables(1).Cell(Fila, 1).Range.Text,
(Len(ActiveDocument.Tables(1).Cell(Fila, 1).Range.Text) - 2))
en la primera línea, al final, le falta el símbolo de subrayado (_). Éste
facilita la continuidad del código entre una línea y la siguiente.

2- Al final, donde me dices que faltaría un Text para que escribiera en
esa celda, en este caso no es necesario, porque Text es la propiedad
predeterminada, quiere decir que, Text lo asume aunque no lo pongas, o
sea, da lo mismo que esté o no esté. Y por supuesto, si no se especifica,
al ser la propiedad predeterminada, VBA asume que ahí va Text, de forma
tal que, si se quiere especificar otra propiedad, hay que especificar la
otra (obvio, ¿verdad?).

Te diré que soy asiduo forero del Foro de Access y VBA, pero me gusta
mucho las aplicaciones con Visual Basic.

Bueno, queda RESUELTO este hilo.

Un saludo y un millón de gracias por tu colaboración.
Medardo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida