Saltar al contenido

Utilización de funcion contar.si en macro


Recommended Posts

publicado

Hola...

Me seria de gran ayuda alguien que me pueda ayudar con esta pequeña duda...

tengo dos hojas de Excel, "concentrado" y "actual". en concentrado tomo el primer valor y busco las veces que se repite en actual.

Inserto una columna y con la función contar.si me regresa las veces que se repite el dato buscado, es decir, me regresa un 1 en la celda y hasta que encuentra el segundo numero repetido me regresa un 2.

Mi duda esta en como puedo expresar esta función en una macro para ir buscando los datos de uno por uno:

=contar.si($E$1:E9, Concentrado!$A$4), "E9" es una variable que se estaría incrementando para ampliar el rango.

Muchas gracias de verdad....

Saludos...

publicado
Hola...

Me seria de gran ayuda alguien que me pueda ayudar con esta pequeña duda...

tengo dos hojas de Excel, "concentrado" y "actual". en concentrado tomo el primer valor y busco las veces que se repite en actual.

Inserto una columna y con la función contar.si me regresa las veces que se repite el dato buscado, es decir, me regresa un 1 en la celda y hasta que encuentra el segundo numero repetido me regresa un 2.

Mi duda esta en como puedo expresar esta función en una macro para ir buscando los datos de uno por uno:

=contar.si($E$1:E9, Concentrado!$A$4), "E9" es una variable que se estaría incrementando para ampliar el rango.

Muchas gracias de verdad....

Saludos...

Hola

Porfavor lee las normas del foro y su funcionamiento

Normas y Reglas del Foro | Ayuda Excel

Saludos

publicado
Buenas tardes....

Mis disculpas, aquí esta el archivo de ejemplo, lo que no se es como expresar esa formula en una macro....

Saludos....

Hola

Prueba con:

Sub ContarSi_GP()

Range("E2", Range("E2").End(xlDown)).Offset(, -4) _
.Formula = "=COUNTIF($E$2:E2, Concentrado!$A$1)"

End Sub[/PHP]

Saludos

publicado

Hola Gerson muchas gracias por tu respuesta.

Funciono muy bien. Me podrás ayudar con un ultimo detalle...

Al querer adaptar lo que me propusiste la verdad me confundí un poco.

Lo que trato de hacer es lo siguiente:

Cuando la función contar.si encuentra cuando se repite el primer numero de concentrado en actual, el cual estaría referenciado por el numero 2, escribiría en concentrado los datos que le corresponden a ese numero y así sucesivamente para los demás números de concentrado, te adjunto archivo para darte mejor la idea.

Ojala me puedas ayudar con esto amigo...

Saludos...

Libro1.xls

publicado

Hola

Pruebas asi

Sub ContarSi_GP()

Range("E2", Range("E2").End(xlDown)).Offset(, -4) _
.Formula = "=COUNTIF($E$2:E2, Concentrado!$A1)"

End Sub[/PHP]

Observas la diferencia?

Saludos

publicado

Hola Gerson...

Antes que nada feliz año nuevo....

Lo que busco lograr es lo siguiente.

Tomo el primer dato de concentrado y lo busco en actual mediante la función contar.si (cuando esta me da el numero 2) tomo los valores que se encuentran sobre la fila en la que se repitió el numero y los escribo en concentrado.

Esta función que me propones primero si lo logra

Sub ContarSi_GP()

Range("E2", Range("E2").End(xlDown)).Offset(, -4) _.Formula = "=COUNTIF($E$2:E2, Concentrado!$A$1)"

End Sub

Esto lo quiero lograr con una macro solo que al momento de querer tomar el segundo dato de concentrado me confundí en como ir incrementando el rango de celda en este caso "E2" y "A1".

Te adjunto comentarios en archivo...

Disculpa la molestia y gracias de antemano por tu ayuda.

Libro1.xls

publicado
Hola Gerson...

Antes que nada feliz año nuevo....

Lo que busco lograr es lo siguiente.

Tomo el primer dato de concentrado y lo busco en actual mediante la función contar.si (cuando esta me da el numero 2) tomo los valores que se encuentran sobre la fila en la que se repitió el numero y los escribo en concentrado.

Esta función que me propones primero si lo logra

Sub ContarSi_GP()

Range("E2", Range("E2").End(xlDown)).Offset(, -4) _.Formula = "=COUNTIF($E$2:E2, Concentrado!$A$1)"

End Sub

Esto lo quiero lograr con una macro solo que al momento de querer tomar el segundo dato de concentrado me confundí en como ir incrementando el rango de celda en este caso "E2" y "A1".

Te adjunto comentarios en archivo...

Disculpa la molestia y gracias de antemano por tu ayuda.

Hola

Como vemos nada que ver tus comentarios a lo que explicas y detallas en el archivo, ves como las normas del foro estan hechas por expertos!

En el caso que se repita mas de dos veces cada criterio, que hacer?

Saludos

publicado
Hola

Como vemos nada que ver tus comentarios a lo que explicas y detallas en el archivo, ves como las normas del foro estan hechas por expertos!

En el caso que se repita mas de dos veces cada criterio, que hacer?

Saludos

Mis disculpas tal ves no me explique bien, de igual manera muchas gracias por tu ayuda....

saludos...

Si deseas que te ayude, responde mi duda?

Saludos

publicado

No entiendo tu duda....

¿La pregunta que me haces va encaminada a si se repite dos veces el mismo criterio en concentrado?

si es así, lo eliminaría en concentrado el dato repetido...

saludos...

publicado
No entiendo tu duda....

¿La pregunta que me haces va encaminada a si se repite dos veces el mismo criterio en concentrado?

si es así, lo eliminaría en concentrado el dato repetido...

saludos...

La duda es si se repite 3 veces o mas un criterio, que se hace se copia o no?

Saludos

publicado

Solo buscaría que se repita hasta la segunda ves.

voy a tratar de explícame mejor:

1 . tomo A1 de concentrado

2. reviso hasta cuando se repite en Actual que estaría definido por el numero 2 que arroja la función contar.si

3. lo encuentra y regresa los datos de las columnas F y G pero se escriben en concentrado.

4. se toma A2 de concentrado y se repite el ciclo y así sucesivamente hasta terminar los datos existentes en concentrado.

Ojala me haya explicado mejor...

Gracias de nuevo y disculpa.

publicado

Hola lcastillo:

Veo que aún no solucionas tu problema. Me podiras explicar otro punto mas por favor, que pasaria si los datos de concentrado no se repiten en Hoja actual. Es decir por ejemplo, en concentrado tengo 222 y en actual 222 pero no se repiten, que dato debo tomar ahi?

Pongo imagen para la pregunta.

2f0c8jn.jpg

publicado
Solo buscaría que se repita hasta la segunda ves.

voy a tratar de explícame mejor:

1 . tomo A1 de concentrado

2. reviso hasta cuando se repite en Actual que estaría definido por el numero 2 que arroja la función contar.si

3. lo encuentra y regresa los datos de las columnas F y G pero se escriben en concentrado.

4. se toma A2 de concentrado y se repite el ciclo y así sucesivamente hasta terminar los datos existentes en concentrado.

Ojala me haya explicado mejor...

Gracias de nuevo y disculpa.

Hola

Ahora queda mas claro, revisa el adjunto (a puras formulas), espero sea eso lo que necesitas

Saludos a ambos!

Contarsi y obtener datos de otra hoja_GP.rar

publicado

Hola elunico22 tienes razón en tu observación si no se repite se toman los datos del primer valor de actual.

Gracias Gerson lo reviso y comento...

saludos...

  • 2 weeks later...
publicado
Hola amigos...

Gerson muchas gracias por tu propuesta, les adjunto de nuevo el archivo con el código que trato de realizar.... donde no se como adaptarlo es en la función contar.si...

Saludos....

Hola

Disculpa pero se ma habia pasado por alto tu tema, prueba con lo siguiente

Sub ContarSi_GP()
'By Gerson Pineda
With Range("B1")
.FormulaArray = "=IF(COUNTIF(Actual!$E:$E,$A1)>=2,iNDEX(Actual!$F$1:$H$14,SMALL(IF(Actual!$E$2:$E$14=$A1,ROW(Actual!$E$2:$E$14)),2),COLUMNS($A$1:A1)),"""")"
.AutoFill .Resize(, 3), xlFillDefault
End With
Set rango = Range("A1", Range("A1").End(xlDown)).Offset(, 1).Resize(, 3)
Range("B1:D1").AutoFill Destination:=rango, Type:=xlFillDefault
With rango: .Value = .Value: End With
Set rango = Nothing
End Sub[/CODE]

Y nos comentas

Saludos

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.