lunes, 20 de septiembre de 2010

Buscar valores en una matriz de Excel.

Contestando el correo de un lector me surgió la duda de como mejorar la búsqueda de un valor dado en una matriz n x m de datos únicos.
Dada una matriz inicial de valores necesitamos, en una tabla adyacente, encontrar el valor que le correspondería a la fila en que se halle dicho valor.


Lo vemos mejor con un ejemplo, dado la siguiente matriz de datos en el rango B7:T21, esto es, de 19 columnas x 15 filas:


haz click en la imagen



Pretendemos contruir una segunda tabla donde en la primera columna añadiremos, a nuestra elección, alguno de los valores de la matriz inicial de datos, y en una segunda columna deberemos, mediante una función personalizada obtener el valor de la tabla inicial que le corresponda del rango A7:A21.



Construimos entonces la función personalizada:

'función que busca un valor dado en el rango B2:T21.
Function busqueda(valor)
'c recorre las columnas de la matriz, de la 2ª a la 20ª.
For c = 2 To 20
' f recorre las filas de la matriz, de la 7ª a la 21ª.
For f = 7 To 21
If Cells(f, c).Value = valor Then busqueda = Cells(f, 1).Value
Next f
Next c
End function



Ya podemos aplicar nuestra función busqueda sobre los valores de la Tabla 2:


Hemos conseguido que para un valor dado, la función creada 'busqueda', recorra la matriz definida y cuando encuentre el valor buscado, devuelva el valor que le corresponde del rango A7:A21.
En nuestro ejemplo, el valor 10.285 le corresponde el valor 3, ya que se encuentra en la tercera fila de la matriz inicial, y a esta fila le hemos asignado el valor 3.

74 comentarios:

  1. UNA DUDA....TENGO UNA MATRIZ EN LA QUE LA PRIMERA COLUMNA CORRESPONDE CON LOS AÑOS DE VENTA
    Y LAS TRES COLUMNAS SIGUIENTES CON LOCALIDADES, LOGROÑO, ZARAGOZA Y BURGOS....

    EN DOS CELDAS INDEPENDIENTES TENGO QUE RELLENAR LOS DATOS DE LA LOCALIDAD Y MARCA DE COCHE, DE LAS QUE QUIERO CALCULAR EN NÚMERO DE VENTAS EN OTRA CELDA INDEPENDIENTE.

    QUE FORMULA TENGO QUE PONER EN ESTA ÚLTIMA CELDA.????

    ResponderEliminar
  2. Hola,
    no veo claro en que columna dispones de la marca del coche, pero parece que una fórmula SUMAR.SI.CONJUNTO es lo que buscas... y si trabajas con Exccel 2003, una SUMA matricial
    Puedes ver un ejemplo en
    http://excelforo.blogspot.com/2010/02/sumas-condicionadas-sumarsiconjunto.html
    Slds

    ResponderEliminar
  3. hola,
    necesito crear un formulario que copie los valores a1,a2,a3,a4 de la hoja1 en la hoja2 y los coloque en la hoja2 en la celda que yo quiera una fila debajo de la otra.

    ResponderEliminar
  4. Hola Marcos,
    realmente no se si quieres un formulario o una macro que copie de la hoja 1 (rango de celdas A1:A4) en la hoja 2 donde tu decidas...
    El siguiente código copia el rango descrito y lo pega donde quieras (realiza una pregunta) de la hoja 2:
    Sub macro1()
    Dim strName As String
    Sheets(1).Range("a1:a4").Copy
    Sheets(2).Select

    strName = InputBox(Prompt:="Copiar en celda de la hoja2", _
    Title:="Copiar en hoja2", Default:="")

    Sheets(2).Range(strName).Select
    Sheets(2).Paste
    End Sub

    Es un código sencillo y rápido...
    Slds

    ResponderEliminar
  5. Necesito encontrar una formula que cuente el nu de veces que se repite un numero en una fila de 11colimnas.ejep. 1,2,4,1,2,1,1,2,4,1.y de los valores 1:5veces,2:3veces,4:2veces.

    ResponderEliminar
  6. Hola,
    Sobre el rango de 11 columnas que tienes (por ejemplo A1:K1), y sabiendo los valores que se repiten en ellos, colocados en A3(=1), A4(=2) y A5(=4), en las celdas B3, B4 y B5 introduces la fórmula CONTAR.SI(rango de datos;criterio), en el ejemplo:
    =CONTAR.SI($A$1:$K$1;B3)
    y arrastras hacia abajo.
    Slds

    ResponderEliminar
  7. Muchas gracias por la formula el resultado fue el esperdo.

    ResponderEliminar
  8. POR FAVOR NESECITO COMO HACER PARA ENCONTRAR LOS VALORES APROXIMADOS POR ENCIMA Y DEBAJO DE UN NUMERO DADO,,, YA SE QUE CON ESTA FUNCIO =INDICE(Hoja1!C6:C30;COINCIDIR(MIN(ABS(Hoja1!C6:C30-Hoja1!C34));ABS(Hoja1!C6:C30-Hoja1!C34);0)) EJEMPLO HAYO EL MAS APROXIMADO PERO LO MUESTRA SEGUN LA APXROXIMACION POR ENCIMA Y DEBAJO ,,,YO QUIERO ES QE EN UNA CELDA ME BOTE EL NUMERO ANTERIOR Y EN OTRA EL SUPERIOR,,

    ResponderEliminar
  9. ALGUNA INFORMACION ENVIAR AL CORREO ANDRES.NET@LIVE.COM MUCHAS GRACIAS LES AGRADESCO

    ResponderEliminar
  10. Hola,
    he subido un post al blog en contestación a tu pregunta:
    valores superior e inferior a uno dado
    Slds

    ResponderEliminar
  11. Que tal, antes que nada gracias por compartir tus conocimientos, me sacaste de un gran apuro. Otro favor alguna pagina donde pueda obtener en forma completa un tutorial para programación con visual basic en excel. Mas que nada el saber la definicion de los objetos contenidos en excel, como es el cells ETC, de antemano gracias.

    ResponderEliminar
  12. Hola,
    uff, esa es la cuestión del millón. La verdad es que la mayoría de páginas son demasiado generales y no se adentran en los contenidos específicos de Excel y sí en las instrucciones estándar del VBA.
    si te soy sincero yo lo poco que he aprendido lo he sacado de mil foros y rebuscando por web o blogs en inglés, que de momento son los más completos.
    Lo que si te diría para no partir de cero es que navegues por la ayuda de Excel respecto al VBA, que he de decir que es bastante completa (aunque en ocasiones muy simple), y una vez tengas más o menos claro que necesitas utilizar realices búsquedas por foros...
    Slds y suerte!!

    ResponderEliminar
  13. Hola, tengo una problema y me gustaría que me colaboren con esto: Pasa que trabajo con bases de datos pero estas las hago en excel, en donde existe una tabla principal con 4 columnas: Año, Número, Tipo, Sala; y todos los días tengo que comparar otra con los mismos encabezados pero con valores desordenados y, lo que necesito saber es si esos cuatro datos de la tabla principal existen exactamente en fila en la tabla que se genera diariamente, les agradezco su tiempo.

    ResponderEliminar
    Respuestas
    1. Hola René,
      echa un vistazo a esta entrada del blog
      http://excelforo.blogspot.com.es/2009/12/busqueda-de-diferencias-en-una-base-de.html
      habla de un ejemplo parecido al tuyo (pero para encontrar diferencias).
      También puedes ver esta otra que habla de datos duplicados
      http://excelforo.blogspot.com.es/2010/03/elementos-duplicados-en-campos.html
      En ambos se trata de localizar diferencias o coincidencias marcándolas con un Formato condicional... espero te de la idea.
      Ya me contarás.
      Slds

      Eliminar
  14. Muy buenas,
    Muchisimas gracias por la explicación, me ha venido de perlas.
    Pero me queda una duda. La fórmula no se actualiza automáticamente.
    Me explico, si la celda que quiero buscar (A28) en tu caso, es una celda referenciada, que se puede ver modificada. No se me activa la función personalizada , la he llamado Designación, sino que tengo que entrar en la fórmula en la barra de edición y pulsar Enter.
    Que comando debo meter en el editor para solucionar esto?
    Muchas gracias de antemano

    ResponderEliminar
    Respuestas
    1. Hola!
      debes insertar una línea de código (preferible al principio):
      Application.Volatile

      esa hará que cambios produzcan la actualización del valor devuelto.
      Sld cordiales

      Eliminar
    2. Gracias por tu pronta respuesta.
      Pero mi problema persiste. Copio el módulo a ver si me estoy equivocando en algo básico

      Function Designacion(valor)
      Application.Volatile (True)
      For c = 12 To 15
      For f = 34 To 74
      If Cells(f, c).Value = valor Then Designacion = Cells(f, 11).Value
      Next f
      Next c
      End Function

      He probado con el comando en diferentes lugares y sigue sin aplicarse

      Eliminar
    3. Hola!,
      pues a mi si me funciona tu código, cuando cambio el argumento Valor (la celda o referencia) el valor devuelto cambia y obtengo el valor correspondiente.
      ¿Tiene el modo de Cálculo en automático???
      Slds

      Eliminar
  15. Pues yo tengo que seguir dandole a Enter para que me lo ejecute.
    Pero vamos, no sabía nada de "un modo de cálculo en automático", asi que si tienes la amabilidad de explicarme donde activo esa opcion, seguramente hayas encontrado el problema :)

    ResponderEliminar
    Respuestas
    1. Hola,
      la opción de cálculo automático de la hoja de cálculo está (y normalmente está en automático) en la ficha Fórmulas > grupo Cálculo> botón desplegable Opciones para el cálculo > Automático.

      Sirve para todas las funciones...
      Slds

      Eliminar
  16. Pues si, el cálculo automático lo tengo activado, y a pesar de ello, sigo teniendo que entrar en la celda y pulsar enter para que me lo actualice.
    No se donde puede estar el error, si a ti, con mi mismo código te funciona.
    :( ?¿?

    ResponderEliminar
    Respuestas
    1. Umm
      a mi si me funciona, mándame el fichero a
      excelforo@gmail.com
      y le echo un vistazo.
      Sdls cordiales

      Eliminar
  17. Muy buenas tardes,

    Con respecto a la primera explicación para la creación de una función de búsqueda personalizada dentro de una matriz, me surge la duda siguiente:
    Como sería el código de la función si la matriz sobre la que realizamos la búsqueda y obtenemos los datos, estuviese localizada dentro de un mismo excel pero en una hoja diferente en vez de en la misma hoja.
    Espero haberme explicado bien y poder obtener una respuesta.
    Muchas gracias de antemano

    ResponderEliminar
    Respuestas
    1. Hola Angel,
      en principio sólo habría que indicar a la UDF dónde está (en qué hoja) estamos buscando:
      If Sheets("HojaBusqeuda").Cells(f, c).Value = valor Then busqueda = Sheets("HojaBusqeuda").Cells(f, 1).Value

      Eso debería ser suficiente.
      Slds

      Eliminar
  18. Hola Amigos y Fans de Excel....

    Alguien me peude ayudar a hacer una formular de SUMAR.SI.CONJUNTO donde existen 2 criterios y el segundo es variable... Mi Tabla Ejemplo.

    Producto Volumen Precio
    A 10 $ 20
    A 20 $ 15
    A 30 $ 10
    A 40 $ 5

    Si quiero encontrar cuanto cuesta el Producto A en un volumen de 24 Pzas. El precio debe ser de $ 15

    La Formula que supongo debo utilizar es SUMAR.SI.CONJUNTO, PERO no encuentro como hacer que el volumen coincida con datos dinamicos de volumen sin especificar en codigo duro un valor especifico de Mayor Que o Menor Que, utilice la formula coincidir.

    Ayuda!!!

    ResponderEliminar
    Respuestas
    1. Hola hector,
      bueno yo emplearia la siguiente fórmula (depurando algún fallo).
      Supongamos el rango A1:C10 con campos (Producto, Volumen y Precio), y en E1 colocamos el producto a buscar(por ejemplo A), en F1 el Volumen (por ejemplo 24) y en G1 colocamos la fórmula:
      =INDICE(C2:C10;COINCIDIR(F1;SI($A$2:$A$10=E1;$B$2:$B$10;"");1))
      ojo!!, ejecutándola matricialmente.

      Fallará para valores inferiores a los mínimos de Volumen.. tendrías que ajustarla con condicionales...

      Espero te sirva.
      Slds

      Eliminar
  19. Hola Ismael, me gustaría que me comentaras si existe una función que realice lo siguiente:

    Tengo una matriz con una serie de datos desordenados y quiero buscar un determinado valor y que la función me devuelva la posición de la celda donde se encuentra.

    Esto lo hago para que una vez conocida la posición, coger siempre el valor de la celda adyacente en la misma fila.

    Gracias!!!

    ResponderEliminar
    Respuestas
    1. Hola !!
      creo que te puede servir, para algo tan concreto, esta entrada
      http://excelforo.blogspot.com.es/2012/10/busqueda-matricial-por-triangulacion.html

      espero puedas sacar provecho de ella.
      Slds cordiales

      Eliminar
    2. Gracias Ismael, mi problema es que necesito el valor de la celda que me sale como referencia

      Eliminar
    3. Hola, bueno como hablabas de posición en tu comentario...
      de todas formas, si necesitas el valor, una vez tengas la DIRECCION, anídalo en una función INDIRECTO:
      =INDIRECTO(DIRECCION(...))
      y tendrás el valor de dicha celda.
      Slds

      Eliminar
    4. muchas gracias!! me has sido de gran ayuda!!!

      Eliminar
  20. Hola Ismael, necesito ayuda en lo siguiente.
    Tengo dos columnas con datos replicados, pero en una tengo màs que en la otra. Lo que necesito identificar, son los datos que faltan en la columna que tiene menos. Los datos son descriptivos de productos (texto).

    Saludos y muchas gracias!!!!!



    ResponderEliminar
    Respuestas
    1. Hola Barbara,
      hay varias formas rápidas...
      Una es empleando la función CONTAR.SI.
      Supongamos en A1:A100 unos datos y en C1:C200 la otra columna, entonces en la columna D, celda D1 insertas la función:
      =CONTAR.SI($A$1:$A$100;C1)
      y arrastras hasta D200
      aquellos valores devueltos con cero significa que no estaban en la lista 'pequeña'.

      Ojo, por que estamos suponiendo que los contenidos son exactos!!
      Slds

      Eliminar
    2. TE PASASTE ismael, me resulto fantastico.

      Muchas gracias!!!!!!

      Eliminar
  21. Hola:

    Sabes que tengo que llenar una planilla que tiene datos de A5 que son fechas hasta CJ esos son datos que tengo que ir sacando dependiendo de la fecha que ingrese en otra hoja y no son en un orden correlativo..
    Ejemplo en la planilla que se tiene q ir llenado ingreso la fecha 19-03-2014 que es dia miercoles tiene q buscar esa fecha y llenar una columna ademas tiene que buscar toda la semana desde el dia lunes que seia el 17-03-2014 - 18-03-2014 - 19-03-2014 - 20-03-2014 - 21-03-2014 - 22-03-2014 -23-03-2014 esa es toda la semana y llenar la planilla principal y si busco el dia 27-03-2014 ese es dia jueves tiene que llenar los dia hacia atras y adelante para llenar la semana en la hoja principal...
    Nose si me explico y si no es mucha la molestia te podria enviar un correo con lo que deseo..
    Por favor Muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      si, mejor me envías un email a
      excelforo@gmail.com
      con un ejemplo adjunto y detallando el problema.

      Slds

      Eliminar
    2. Ismael gracias por responder!!
      Te envie el correo!!
      Graciass

      Eliminar
  22. Estimado Ismael,
    Necesito generar una fórmula similar al buscarv, pero que tenga los siguientes argumentos: buscador(A8:F15,"Miranda","nombre"). Es decir, la macro debe analizar toda la base de datos hasta encontrar a "Miranda" y arrojar como resultado su valor equivalente de la columna "nombre".
    La matriz es así:
    edad sueldo nombre codigo apellido estado
    34 4500 María P04 Gonzales soltero
    21 2800 Raul P07 Cardenas casado
    15 6000 Ricardo P02 Gutierrez casado
    19 4300 Jorge P05 Miranda viudo
    Agradecería mucho me puedas ayudar, yo tengo una codificación pero que necesita 4 argumentos, y en ese caso solo necesito 3. Si me pudieses ayudar, te mandaría a algún correo lo que tengo listo.
    Muchas gracias!!!!

    ResponderEliminar
    Respuestas
    1. Hola Gabriela,
      subiré al blog una entrada exponiendo una UDF que resuelva tu duda.

      Saludos

      Eliminar
  23. Hola Ismael:
    Quiero solicitar tu apoyo en la generación de una macro para extraer datos de una tabla.
    Me explico:
    En la primera columna hay nombres (todos diferentes);
    En la primera fila hay nombres (todos diferentes);
    En sus respectivas intercecciones hay valores. Hay celdas vacías.
    Lo que necesito es que a partir de determinar el nombre de la columna me anote el nombre de la fila y su valor.
    Tabla original
    Nombres Profesional01 Profesional02 Profesional03 Profesional04
    Eunice 100 100 100
    Joaquín 100 100
    Magda 100 50
    Roberto 100 15

    Ejemplo de Resultado
    Nombres Profesinal04
    Eunice 100
    Magda 50
    Roberto 15

    Gracias anticipadas…

    ResponderEliminar
    Respuestas
    1. Hola,
      quizá una tabla dinámica te resuelva la cuestión sin emplear macros..
      bastará que apliques un filtro o muestres el campo que quieras en ella.

      También podrías aplicar una fórmula INDICE para, según un desplegable, mostrar la columna con la info que necesites...

      Saludos

      Eliminar
    2. Gracias por tu respuesta... ya lo hice en una tabla dinámica pero me lleva mucho tiempo el preparar las impresiones por columna y valores... por eso pensé en una macro...
      estudiaré lo de INDICE para saber si me puede ayudar.
      gracias...

      Eliminar
  24. Hola buen día a todos, tengo un problema con una macro que cree para ocultar y mostrar columnas mediente un boto ToggleButton, solo que al ejecutarla no oculta ni muestra las columnas programadas si no otras, en este caso yo le pdido a la macro ocultar las columnas ("e:g") y al ejecutarla me oculta las columnas ("b:r"), y hace lo mismo al mostrarlas, les adjunto mi archivo
    Private Sub ToggleButton1_Click()
    Application.ScreenUpdating = False
    If ToggleButton1 = False Then
    Columns("E:G").Select
    Selection.EntireColumn.Hidden = True
    Range("C4").Select
    Else
    Columns("E:G").Select
    Selection.EntireColumn.Hidden = False
    Range("c4").Select
    End If
    Application.ScreenUpdating = True
    End Sub

    ResponderEliminar
    Respuestas
    1. Hola Mario,
      ... pues veo correcta la macro, de hecho la he replicado y funciona correctamente, como se esperaría, ocultando y mostrando E:G
      ???
      No hay nada en el código que indique una incorrección.
      Siento no poder decirte más...

      Eliminar
  25. Hola Ismael:
    Elaboré la macro siguiente para ocultar solamente las celdas vacías en las columnas C y D, pero solamente me oculta las celdas C8:D11... podrías revisarla por favor...
    Private Sub CommandButton2_Click()

    Application.ScreenUpdating = False

    Worksheets("RESULTADO").Activate
    Range("c8").Activate

    Do While IsEmpty(ActiveCell)
    If ActiveCell = 0 And ActiveCell.Offset(0, 1) = 0 Then
    ActiveCell.Select
    Selection.EntireRow.Hidden = True
    End If
    ActiveCell.Offset(1, 0).Activate
    Loop

    Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(1, 0).Activate
    Loop

    Application.ScreenUpdating = True

    End Sub

    Edvin

    ResponderEliminar
    Respuestas
    1. Creo sería más sencillo:
      Sub loop1()
      Application.ScreenUpdating = False
      Worksheets("RESULTADO").Activate
      For Each celda In Range("C8:C20")
      If IsEmpty(celda) And IsEmpty(celda.Offset(0, 1)) Then
      celda.EntireRow.Hidden = True
      End If
      Next celda
      Application.ScreenUpdating = True
      End Sub

      Saludos

      Eliminar
    2. Muchísimas gracias por responder tan pronto... justo como lo necesitaba... que estés bien siempre...

      Eliminar
  26. Hola amigo, buenas tardes.

    Queria consultarte algo, he buscado y no encuentro como realizar no se una macro o por medio de formulas algo que me ayude con lo siguiente.

    De un archivo .CSV me llegan unos datos (Es el espacio libre de los discos duros en varios PC, el archivo me trae el nombre del equipo, la unidad y el tamaño del espacio libre).

    nombrePC1,C,30
    nombrePC1,D,20
    nombrePC2,C,10
    nombrePC2.......
    De aca hacia abajo continua con los datos de otros equipos.

    Quiero pasar esto a una tabla que tengo organizada de la siguiente forma.
    ____________C____D____E____...
    nombrePC1 | | | |
    nombrePC2 | | | |
    nombrePC3 | | | |

    He intentado con formulas pero no encuentro la forma de decirle que me busque solo en las columnas donde la primer celda de la fila se repita, me explico como el nombre de los equipos se repite diferente cantidad de veces entonces no se como decirle busqueme el espacio libre del disco C en los espacios donde dice PC1 en la primera celda, tambien se debe tener encuenta que en la segunda columna donde estan las letras estas tambien se repiten.

    No se si me hallas entendido, de antemano muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola Mauricio,
      yo probaría construyendo una tabla dinámica, llevando al área de filas el Nombre de los PC, al área de columnas la Unidad y al área de valores el espacio libre..
      creo sería lo más sencillo.
      Saludos

      Eliminar
  27. Hola Ismael, Buenas Tardes.

    Gracias por la respuesta, te cuento que ya pude hacer lo que necesitaba, investigue el tema de las tablas dinamicas y pude realizar lo que queria, nuevamente gracias.

    ResponderEliminar
  28. Buenos días,
    Tengo una table con matrices de precios por destinos y metros. Necesito una funcion macro para que al introducer en la hoja inicial el destino y el tamaño del material, se ejecute la busqueda del coste en funcion del metro del product.
    Me podeis ayudar?
    gracias.

    ResponderEliminar
    Respuestas
    1. Hola,
      para tal cosa no hacen falta macros... basta aplicar una combinación anidada de las funciones INDICE y COINCIDIR
      Aquí tienes un ejemplo algo más elaborado de lo que tú necesitas:
      http://excelforo.blogspot.com.es/2010/03/buscar-en-matrices-la-funcion-indice.html

      Saludos

      Eliminar
  29. un favor. ¿podrias decirme como modificar el macro para que me busque el valor aproximado inmediatamente mayor al que yo le mande buscar?
    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Alejandro,
      yo incluiría un bucle incrementando el valor buscado de uno en uno hasta dar con una coincidencia...

      'función que busca un valor dado en el rango B2:T21.
      Function busqueda(valor)
      x = 1

      Do
      'c recorre las columnas de la matriz, de la 2ª a la 20ª.
      For c = 2 To 10
      ' f recorre las filas de la matriz, de la 7ª a la 21ª.
      For f = 2 To 10
      If Cells(f, c).Value = valor + x Then
      busqueda = Cells(f, 1).Value
      Exit Function
      End If
      Next f
      Next c
      x = x + 1
      Loop Until x = 10
      End Function

      Espero te sirva.
      Saludos

      Eliminar
  30. HOLA NECESITO SABER QUE FUNCION USAR... POR EJEMPLO TENGO UNA COLUMNA DONDE SE ENCUENTRAN NUMEROS QUIERO HACER UNA FORMULA QUE VEA SI EL NUMERO DE TAL COLUMNA (EJP 25) ES MAYOR A 30 Y SI ES ASI ME ESCRIBA DIRECTAMENTE UN 35. NO LOGRO QUE QUEDE EL NUMERO 35. ME PODRIAN PASAR LA FORMULA COMPLETA LISTA PARA HACERLO?
    GRACIASSS

    ResponderEliminar
    Respuestas
    1. Hola,
      disculpa pero no comprendo... te refieres al número de columna o los valores contenidos en un rango de una columna??
      Por ejemplo, rango C1:C10 con valores 1,2,3,...,8,9,10
      número de columna=3
      Valores contenidos=1,2,3,...,8,9,10
      ??
      Slds

      Eliminar
  31. Como hago para generar varias matrices nxn, es decir que yo ponga 2 o 5 las que quieras y que me generan 2 o 5 o las que sea matrices nxn?

    ResponderEliminar
    Respuestas
    1. Hola Paula,
      qué tal estás?, un placer saludarte igualmente.

      La cuestión primera sería con que valores quieres rellenar esas 2-5 matrices en tu hoja de cálculo?.. y cuales serían sus dimensiones 1x1,2x2,... 10x10.. esto es, se necesita saber a priori filas x columnas y obviamente con qué datos se completa...
      Con esa información se optaría por una u otra solución

      Saludos

      Eliminar
  32. Ola.. Ismael. Queria saber si tenia un codigo donde me recorra Campo seleccionado, q me compare dato por dato e escriba el mismo dato en otra hoja y me diga cuantas veces esta el mismo dato.

    ResponderEliminar
    Respuestas
    1. Hola Miguel Angel,
      has pensado en utilizar una sencilla tabla dinámica llevando ese campo al área de filas, y también resumido por Recuento al área de valores??

      Saludos

      Eliminar
  33. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  34. sabes necesito algo parecido lo cual seria que necesito una macro que en un rango de celdas busque los valores negativos y los extraiga en la misma fila que están pero en la columna siguiente o que se encuentra fuera de este rango.

    ResponderEliminar
    Respuestas
    1. Hola, qué tal estás?
      un placer saludarte igualmente.

      Prueba con un bucle sobre el rango, aplicando un condicional para cada celda de ese bucle.. y si cumple la/s condiciones, dispón el dato en la celda de al lado. Algo así:
      for each celda in range("A1:A10")
      if celda.value<0 then celda.offset(0,1).value=celda.value
      next celda

      saludos

      Eliminar
  35. hola tengo dos tablas una con todos los datos y otra con un segmento de estos datos, ambas con diferentes dimensiones, y quisiera saber si se pudiera generar un macro que me permita saber que valores de mi tabla general se encuentran en mi tabla parcial, es decir la segunda, saludos cordiales

    ResponderEliminar
    Respuestas
    1. Hola,
      quizá solo con una función de búsqueda sea suficiente...
      relaciona campos en común para cruzar registros

      Yo usaría un BUSCARV o incluso un CONTAR.SI

      Poco más puede comentar sin tener claro la distribución de campos

      Saludos cordiales

      Eliminar
  36. SI, CONTAR.SI ME HA RESULTADO, MUCHAS GRACIAS

    ResponderEliminar
  37. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  38. Buenas noches Ismael... fijate que he copiado datos de la hoja Nomina a la hoja Resumen del libro Nomina... y el resultado ha sido satisfactorio... pero lo que necesito ahora es trasladar los datos de la hoja Nomina del libro Nomima a la hoja Resumen del Libro LibroSalarios... ayúdame a adaptar este código... por favor

    Sub TrasladoDatosNominaA_LibroSalarios()

    Dim UltimaFilaNomina As Long
    Dim UltimaFilaResumen As Long
    Dim Codigo, Nombre, SalarioM, DiasL, HorasT, HorasExtrasN, HorasExtrasA, SalarioO, SalarioE, BonifIncent, TotalI, IGSS, ISR, Anticipos, Otros, TotalD, Liquido As String
    Dim cont As Long
    Dim Fecha As String

    Fecha = "30/abril/19"

    UltimaFilaNomina = Sheets("Nomina").Range("B" & Rows.Count).End(xlUp).Row
    UltimaFilaResumen = Sheets("Resumen").Range("A" & Rows.Count).End(xlUp).Row

    For cont = 9 To UltimaFilaNomina

    Codigo = Trim(Sheets("Nomina").Cells(cont, 2))
    Nombre = Trim(Sheets("Nomina").Cells(cont, 3))
    SalarioM = Trim(Sheets("Nomina").Cells(cont, 4))


    If Len(Codigo) > 0 And Len(Nombre) > 0 And Len(SalarioM) > 0 Then
    UltimaFilaResumen = UltimaFilaResumen + 1

    Sheets("Resumen").Cells(UltimaFilaResumen, 1) = Codigo
    Sheets("Resumen").Cells(UltimaFilaResumen, 2) = Nombre
    Sheets("Resumen").Cells(UltimaFilaResumen, 3) = Fecha
    Sheets("Resumen").Cells(UltimaFilaResumen, 4) = SalarioM

    End If
    Next cont

    MsgBox "DATOS GUARDADOS CORRECTAMENTE"

    End Sub

    ResponderEliminar
    Respuestas
    1. Hola Joaquin
      necesitas declarar el objeto del libro (quizá de todos tus libros), o al menos indicarlo en tus códigos...
      Por ejemplo
      UltimaFilaNomina = Workbooks("LibroNomina.xlsx").Sheets("Nomina").Range("B" & Rows.Count).End(xlUp).Row
      UltimaFilaResumen = Workbooks("LibroSalarios.xlsx").Sheets("Resumen").Range("A" & Rows.Count).End(xlUp).Row

      OJO, por que los libros deberán estar abiertos

      Slds

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.