Presentar nombres

06/11/2005 - 18:51 por Hernando | Informe spam
Hola a todos.

Me gustaría mejorar la hoja de liquidación que actualmente tengo.

El Libro se compone de 3 Hojas.

Hoja3: base de datos de lo productos que se venden, importes, unidades y
costes. (de donde toma datos la Hoja2)
Hoja2: donde se introducen LOS CÓDIGOS de los Productos, NOMBRES DE
CLIENTES, y PLAZOS de pago.
Hoja1: la liquidación propiamente dicha. Al introducir el NÚMERO de
producto vendido, aparece el IMPORTE de la venta. (Toma datos de la
Hoja2).

He conseguido que el número y el importe, aparezcan en el RESUMEN de la
Hoja1, pero no los nombres de los clientes.

En la Hoja2 y en la celda ( fila para poner el nombre del cliente ), que
corresponda según que producto, pongo los nombres de los clientes que
han comprado el producto, separados por una coma, puede ser uno o
varios.

Me gustaría saber que fórmula pongo en la celda de la Hoja1, para que me
mostrara, SEPARADOS POR UNA COMA (Igual que están en la Hoja2), los
nombres de los clientes que pongo en la Hoja2.

Gracias y saludos.

Preguntas similare

Leer las respuestas

#6 Hernando
08/11/2005 - 23:53 | Informe spam
Hola Héctor Miguel.
. =TomarClientes [esta es la llamada a la funcion] :))
Hoja2!$B$31:$B$67 [este es el argumento 'Clientes' y se refiere al
rango/hoja donde estan los nombres]
Hoja2!$A$31:$A$67 [este es el argumento 'Claves' y se refiere al
rango/hoja donde estan las claves para 'comparar' con]...
A2 -> esta es la celda en la hoja donde aplicas la funcion que contiene
'la clave' que se va a comparar 'coincidencias' ;)

si cualquier duda... comentas ?



Casi lo tengo. La primera parte bien, seguí tus pasos y copié tus
líneas, Alt+Q, salí a la hoja1 y en las celdas donde quiero que me
aparezcan los nombres de los clientes que recoge de la hoja2 refundidos,
por cada clave [A,B,C,D,E,F,G,H], rango E41:E48, puse la fórmula
"=TomarClientes(Hoja2!$B$31:$B$67;Hoja2!$A$31:$A$67;"A)", modificando en
cada una el "A2" por "A","B","C", . y me da el error "#¿NOMBRE?.Se
que el problema está en "A2" [A2 -> esta es la celda en la hoja donde
aplicas la funcion que contiene 'la clave' que se va a comparar
'coincidencias' ;)].En este rango de la hoja1, E41:E48, ["E41"
correspondería a la clave "A" y "E48" a la "H"], que es donde quiero que
aparezcan los nombres de los clientes, recogidos de la hoja2, refundidos
por dichas claves, como ya sabes. Yo le he he puesto en cada una de
estas celdas la fórmula mencionada, correspondiente a cada clave, y aquí
es donde estoy ahora con el error que te digo [#¿NOMBRE?]. ¿No he pueso
bien tu fórmula, me falta algún paso o dato? Necesitaría el último
empujón, para que me funcione, no se que he hecho mal o que me falla.

Gracias otra vez y saludos.

"Héctor Miguel" escribió en el mensaje
news:
hola, Hernando !

... va a ser mi primera experiencia en incorporar las lineas... en un
"modulo de codigo 'normal'"
a) ... copiar las lineas, en la Hoja1 o en la Hoja2, o da igual en
cualquiera de ellas?
... que es "modulo de codigo 'normal' ?
b) ... Como cierro el editor y termino para que... funcione... la
llamada "=TomarClientes" ?
c) ... la hoja2 en b31:b67 (b49 esta en blanco), los nombres dae los
clientes
... en a31:a67 (a49 en blanco) los codigos de los productos, seria
entonces tu formula
... =TomarClientes(Hoja2!$B$31:$B$67,Hoja2!$A$31:$A$67,A2).
Que indica el "A2" ultimo de esta formula ? [...]



a) los modulos de codigo de 'hoja1'... 'hoja_n' son modulos de codigo
'de clase' [aplican a cada objeto 'worksheet']
los modulos de codigo 'normales' los insertas [en vba] desde [menu]
insertar / modulo... [Modulo1, Modulo2, ...]
-> las lineas de codigo de la funcion personalizada van
[preferentemente] en 'este tipo' de modulos [normales] ;)

b) para cerrar el editor de vba [una vez copiadas las lineas de la
funcion en el modulo 'normal']...
{alt}+Q o... {alt}+{F4} o... [menu] archivo / cerrar y
volver a...

c) los 'argumentos' que requiere/usa la funcion [para comparar y tomar
desde rangos 'especificos'] son...
=TomarClientes [esta es la llamada a la funcion] :))
Hoja2!$B$31:$B$67 [este es el argumento 'Clientes' y se refiere al
rango/hoja donde estan los nombres]
Hoja2!$A$31:$A$67 [este es el argumento 'Claves' y se refiere al
rango/hoja donde estan las claves para 'comparar' con]...
A2 -> esta es la celda en la hoja donde aplicas la funcion que
contiene 'la clave' que se va a comparar 'coincidencias' ;)

si cualquier duda... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#7 Héctor Miguel
09/11/2005 - 02:33 | Informe spam
hola, Hernando !

Casi lo tengo. La primera parte bien... copie tus lineas, Alt+Q, sali a la hoja1
... en las celdas donde quiero que me aparezcan los nombres de los clientes que recoge de la hoja2
... puse la formula "=TomarClientes(Hoja2!$B$31:$B$67;Hoja2!$A$31:$A$67;"A)"
... modificando en cada una el "A2" por "A","B","C", . y me da el error "#¿NOMBRE? [...]



1) si estas 'obteniendo' el valor de error "#¿NOMBRE?
... significa que la funcion [TomarClientes] NO esta siendo 'reconocida' por excel :-((
[probablemente] las lineas de codigo las copiaste en un modulo 'de clase' [como el de la hoja1] ???
recuerda que deben estar en el modulo 'normal'
-> verifica [en vba] en la barra de titulo de 'ese' modulo de codigo: Hoja1 (Codigo) ?... Modulo1 (Codigo) ?

2) si necesitas que la clave que se va a comparar sea 'tomada' [como argumento] 'directamente' en la funcion...
modifica [en las lineas de codigo de la funcion] el tipo de variabe que 'espera' la funcion 'recibir'...
de -> Function TomarClientes(Clientes As Range, Claves As Range, Clave As Range) As String
a -> Function TomarClientes(Clientes As Range, Claves As Range, Clave) As String
[originalmente -yo- estaba asumiendo que la clave a comparar se iba a tomar de x_celda en cada fila] :-(

comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#8 Hernando
09/11/2005 - 20:33 | Informe spam
Hola Héctor Miguel.
.si estas 'obteniendo' el valor de error "#¿NOMBRE?
... significa que la función [TomarClientes] NO esta siendo
'reconocida' por excel :-((
[probablemente] las lineas de codigo las copiaste en un modulo 'de
clase' [como el de la hoja1] ???
recuerda que deben estar en el modulo 'normal'
-> verifica [en vba] en la barra de titulo de 'ese' modulo de
codigo: Hoja1 (Codigo) ?... Modulo1 (Codigo) ?



Modifiqué, revisé y cambié, despues de escribirte y el error varió, ya
siempre a ¡#VALOR!, algo que no puse bien.

He verificado vba. En la Ventana izquierda
indica:"EuroTool(EUROTOOL.XLA)", debajo "VBAProyect(Nombre de mi
Libro)", cuelga de aquí la carpeta "Microsoft Excel Objetos" y de esta
las hojas de mi Libro, Hoja1(Su nombre), Hoja2(Su nombre) y Hoja3(Su
nombre), y cuelga también otra carpeta "ThisWorkbook."
También cuelga de "Microsoft Excel Objetos" otra carpeta "Módulos" y de
esta Módulo1. [No aparece ninguno de "Clase"].Esto en esa ventana. A la
derecha, donde están las líneas que me mandaste, arriba pone en una
ventanilla que abre "(General)" y a su derecha otra "TomarClientes", [si
abres esta ventanilla, hay también la opción "(Declaraciones)", pero
siempre que abres el vba está en "TomarClientes"]. Yo creo que lo
interpreté correctamente todo lo que me dijiste, además he cambiado en
vba de -> Function TomarClientes(Clientes As Range, Claves As Range,
Clave As Range) As String
a -> Function TomarClientes(Clientes As Range, Claves As Range,
Clave) As String , como me dijiste y después de todo esto HA
DESPARECIDO EL ERROR, pero en esas celdas E41:E48 [donde deberían
aparecer los nombres de los clientes, refundidos por productos
comprados, ya sabes], quedan en blanco, no "trae" ningún nombre de los
clientes que figuran en cada producto en la Hoja2.


Hay algo que se nos escapa, o en la fórmula de la celda o en la macro
que me mandaste. [Te la copio de vba para que veas que esta tal cual,
con esta última modificación.]

Function TomarClientes(Clientes As Range, Claves As Range, Clave) As
String
Dim Celda As Range, Fila As Long: TomarClientes = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then
If TomarClientes <> "" Then TomarClientes = TomarClientes & ", "
TomarClientes = TomarClientes & Clientes.Cells(Fila)
End If: Fila = Fila + 1
Next
End Function

Gracias otra vez y saludos.

"Héctor Miguel" escribió en el mensaje
news:
hola, Hernando !

Casi lo tengo. La primera parte bien... copie tus lineas, Alt+Q, sali
a la hoja1
... en las celdas donde quiero que me aparezcan los nombres de los
clientes que recoge de la hoja2
... puse la formula
"=TomarClientes(Hoja2!$B$31:$B$67;Hoja2!$A$31:$A$67;"A)"
... modificando en cada una el "A2" por "A","B","C", . y me da el
error "#¿NOMBRE? [...]



1) si estas 'obteniendo' el valor de error "#¿NOMBRE?
... significa que la funcion [TomarClientes] NO esta siendo
'reconocida' por excel :-((
[probablemente] las lineas de codigo las copiaste en un modulo 'de
clase' [como el de la hoja1] ???
recuerda que deben estar en el modulo 'normal'
-> verifica [en vba] en la barra de titulo de 'ese' modulo de
codigo: Hoja1 (Codigo) ?... Modulo1 (Codigo) ?

2) si necesitas que la clave que se va a comparar sea 'tomada' [como
argumento] 'directamente' en la funcion...
modifica [en las lineas de codigo de la funcion] el tipo de variabe
que 'espera' la funcion 'recibir'...
de -> Function TomarClientes(Clientes As Range, Claves As Range,
Clave As Range) As String
a -> Function TomarClientes(Clientes As Range, Claves As Range,
Clave) As String
[originalmente -yo- estaba asumiendo que la clave a comparar se iba
a tomar de x_celda en cada fila] :-(

comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#9 Héctor Miguel
10/11/2005 - 00:55 | Informe spam
hola, Hernando !

Modifique, revise y cambie, despues de escribirte y el error vario, ya siempre a ¡#VALOR!, algo que no puse bien



1) si el valor de error [¡#VALOR!] lo estas obteniendo en todas las celdas donde usas la funcion personalizada...
[probablemente] en el rango de las claves [en la hoja donde se van a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error y esta siendo 'trasladado' a la funcion -?-

2) si el valor de error [¡#VALOR!] lo estas obteniendo en algunas de las celdas donde usas la funcion personalizada...
[probablemente] en el rango de los clientes [en la hoja donde se van a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error y esta siendo 'trasladado' a la funcion -?-

3) toma en cuenta que el codigo de la funcion NO tiene 'contemplada' la posibilidad de 'manejar' -posibles- errores :-(
y en las pruebas que he realizado, son las 'formas' en donde he podido 'reproducir' el valor de error :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#10 Hernando
10/11/2005 - 11:27 | Informe spam
Hola Héctor:
1) si el valor de error [¡#VALOR!] lo estas obteniendo en todas
las celdas donde usas la funcion personalizada...
[probablemente] en el rango de las claves [en la hoja donde se van
a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error y
esta siendo 'trasladado' a la funcion -?-



Cambié la orden en la macro, como me dijiste y ya no da errores.

.> 3) toma en cuenta que el codigo de la funcion NO tiene
'contemplada' la posibilidad de 'manejar' -posibles- errores :-(
y en las pruebas que he realizado, son las 'formas' en donde he
podido 'reproducir' el valor de error :))

si cualquier duda [o informacion adicional]... comentas ?



Esta indicación no la entiendo, ¿podrías aclarar o darme solución sobre
lo que me indicas ?

Yo te decía que verifiqué vba y el módulo es Normal no de Clase. También
te decía que había cambiado de -> Function TomarClientes(Clientes As
Range, Claves As Range, Clave As Range) As String a -> Function
TomarClientes(Clientes As Range, Claves As Range, Clave) As String ,
como me dijiste y después de todo esto HAN DESAPARECIDO LAS INDICACIONES
DE ERRORES, pero en esas celdas E41:E48 donde tengo la fórmula
=TomarClientes("=TomarClientes(Hoja2!$B$31:$B$67;Hoja2!$A$31:$A$67;"A)"
[donde deberían aparecer los nombres de los clientes, refundidos por
productos comprados, ya sabes], quedan en blanco, no "trae" ningún
nombre de los clientes que figuran por cada producto en la Hoja2.

Hay algo que se nos escapa, o en la fórmula de la celda o en la macro
que me mandaste. [Te la copio de vba para que veas que esta tal cual,
con esta última modificación.]

Function TomarClientes(Clientes As Range, Claves As Range, Clave) As
String
Dim Celda As Range, Fila As Long: TomarClientes = "": Fila = 1
For Each Celda In Claves
If Celda = Clave Then
If TomarClientes <> "" Then TomarClientes = TomarClientes & ", "
TomarClientes = TomarClientes & Clientes.Cells(Fila)
End If: Fila = Fila + 1
Next
End Function

Gracias otra vez y saludos.

"Héctor Miguel" escribió en el mensaje
news:
hola, Hernando !

Modifique, revise y cambie, despues de escribirte y el error vario,
ya siempre a ¡#VALOR!, algo que no puse bien



1) si el valor de error [¡#VALOR!] lo estas obteniendo en todas las
celdas donde usas la funcion personalizada...
[probablemente] en el rango de las claves [en la hoja donde se van
a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error y
esta siendo 'trasladado' a la funcion -?-

2) si el valor de error [¡#VALOR!] lo estas obteniendo en algunas de
las celdas donde usas la funcion personalizada...
[probablemente] en el rango de los clientes [en la hoja donde se
van a comparar claves y a traer nombres]...
-> existe una celda -o varias- donde YA existe ese valor de error y
esta siendo 'trasladado' a la funcion -?-

3) toma en cuenta que el codigo de la funcion NO tiene 'contemplada'
la posibilidad de 'manejar' -posibles- errores :-(
y en las pruebas que he realizado, son las 'formas' en donde he
podido 'reproducir' el valor de error :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida