Contar renglones de una hoja y poner el total en otra hoja de un libro distinto

Buenas tardes tengo una consulta, estoy obteniendo totales de una columna que cumpla con una condición, ya tengo el código donde sale el cuadro de dialogo para abrir el archivo de donde me voy a traer los datos, dejo el código:

En el libro activo tengo una columna con valores Columna (CS4:CS45) en este rango tengo valos del 1 al 45 y en libro que se abre (filename con esta variable) en la columna H tengo ese id que se repite n veces el 1, el 2, el 3 ... Lo que quiero hacer es contar esos registros cuyo valor sea igual al que me indique el ciclo for que recorre la columna CS

Dim Filename As String
col = InputBox("Teclea la letra de la Columna a donde se importaran los datos", "ATENCION")

If MsgBox("Desea Iniciar la Importacion de Datos?.", vbYesNo, "Pregunta") = vbYes Then
'Haga algo aquí

Filename = Application.GetOpenFilename("Archivos de excel,*.xls*", _
, "Seleccione archivo para obtener los datos de enero.") 'Application.GetOpenFilename para abrir ubicación
'de archivos de excel Worksheets("Hoja1"). Activar
If Filename = "Falso" Then
GoTo salto
End If
Workbooks.Open Filename


For Each celda In Range("CS4:CS45") 'Range(col & 4 & ":" & col & 45)
celda.Select
ubica = celda.Address
Filename.Activate
+++++AQUI ES DONDE REQUIERO METER EL CODIGO PARA CONTAR CUANTOS RENGLONES CUMPLEN CON LA CONDICION

--Contar los renglones donde el valor sea igual al valor de CELDA y almacenarlo en una variable para pegar el valor en la hoja1 (para pegar el valor lo haré con otro ciclo for)
If celda.HasFormula Or celda.Value = Null Or celda.Value = "" Then
GoTo salto
End If
salto:
Next

Este es mi código haber si alguien me puede ayudar se que existe la cuncion contarsi pero no la se utilizar muy bien

1 Respuesta

Respuesta
1

Para preparar la macro dime lo siguiente:

- Cómo se llama la hoja del libro1 donde tienes este rango: "CS4:CS45"

- Cómo se llama la hoja del libro 2

- ¿El resultado lo quieres en cuál hoja? ¿Y en cuál libro el 1 o el 2? ¿Y en cuál columna?

Esta es la macro.

La hoja del libro1 con valores es la "Hoja1",

La hoja del libro2 es la "Hoja1"

El resultado te lo pone en el libro1 en la hoja1 en la columna A, si quieres cambios puedes hacerlo, te puse unos comentarios para que te guiaras, si tienes dudas avísame para adecuarlos a la macro.

Sub contar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    ha = "Hoja1" 'hoja del libro1 con los valores
    hb = "Hoja1" 'hoja del libro2 que tiene los datos a contar
    ca = "A"     'columna de resultados
    Set l1 = ActiveWorkbook
    Set h1 = Sheets(ha)
    arch = Application.GetOpenFilename("Archivos de excel,*.xls*", , _
           "Seleccione archivo para obtener los datos de enero.")
    If arch <> False Then
        Set l2 = Workbooks.Open(arch)
        Set h2 = l2.Sheets(hb)
        For i = 4 To 45
            h1.Cells(i, ca) = Application.CountIf(h2.Range("H:H"), h1.Cells(i, "CS"))
        Next
    End If
    l2.Close
End Sub

el nombre de los libros lo voy a almacenar en una variable libro 1 = VENTAS2014 el libro 2 lo voy a almacenar en la variable filename, con el ciclo for voy a voy a recorrer la columna cs del 4 al 45 aqui cambiar de libro a filename posicionarse o seleccionar la columna H y contar los renglones que coincidan con el valor de la celda CS despues de que termine de contar el valor almacenarlo en la columna cuya variable el COL en las posiciones del 4 al 45 ejemplo:

libro1                                         

col1(CS)       col2              col3

1                   victoria           5

2                   hidalgo            2

3                    llera                 5

la columna cs (libro1) tiene el identificador que se buscara y contara en el libro2 hoja1

libro2

col1                  colh

dato                    1

dato                    1

dato                    1

dato                    1

dato                    1

dato                    2

dato                    2

dato                    3

dato                    3

dato                    3

dato                    3

dato                    3

El objetivo de contar ya lo entendí lo que quiero saber es esto

- Cómo se llama la hoja del libro1 donde tienes este rango: "CS4:CS45"

- Cómo se llama la hoja del libro 2

- ¿El resultado lo quieres en cuál hoja? ¿Y en cuál libro el 1 o el 2? ¿Y en cuál columna?

libro 1= VENTAS hoja=SEP 

columna E4:E54 pegar resultado

columna CS4:CS54 Datos a validar en la hoja1 del libro 2

Libro2 = SEPTIEMBRE Hoja1 columna H

haber si me explique como quiera los nombres de la hoja y el libro los almacenare en una variable ya que con el openfile almaceno el nombre del libro

Disculpa, pero sigues sin responde mi duda principal, ¿en dónde quieres el resultado en el libro1? ¿En cuál hoja? ¿En cuál columna?

Supongo que quieres el resultado en el libro VENTAS hoja SEP en la columna E

Si es así, utiliza está macro:

Sub contar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    ha = "SEP" 'hoja inicial con los valores
    hb = "Hoja1" 'hoja que tiene los datos a contar
    ca = "E"     'columna de resultados
    Set l1 = ActiveWorkbook
    Set h1 = Sheets(ha)
    arch = Application.GetOpenFilename("Archivos de excel,*.xls*", , _
           "Seleccione archivo para obtener los datos de enero.")
    If arch <> False Then
        Set l2 = Workbooks.Open(arch)
        Set h2 = l2.Sheets(hb)
        For i = 4 To h1.Range("CS" & Rows.Count).End(xlUp).Row
            h1.Cells(i, ca) = Application.CountIf(h2.Range("H:H"), h1.Cells(i, "CS"))
        Next
    End If
    l2.Close
End Sub

No te preocupes por almacenar los nombres en variables la macro ya lo hace, solamente ejecuta la macro para abrir el libro.

¡Gracias!  ya ejecute la macro funciona muy bien, solo la voy a modificar para que sean variables las hojas ya que traen distintos nombres

Los nombres de las hojas son lo que tu indicaste, pero tienes en la macro la forma de identificarlos de manera sencilla.

Recuerda valorar la respuesta.

¡Gracias! ASÍ QUEDO:

Sub contarVENTAS()

Application.ScreenUpdating = False
ha = ActiveSheet.Name 'hoja inicial con los valores
'hb = "01092014" 'hoja que tiene los datos a contar
ca = InputBox("Teclea la letra de la Columna a donde se importaran los datos", "ATENCION") '"B" 'columna de resultados
Set l1 = ActiveWorkbook
Set h1 = Sheets(ha)
arch = Application.GetOpenFilename("Archivos de excel,*.xls*", , _
"Seleccione archivo para obtener los datos de enero.")
If arch <> False Then
Set l2 = Workbooks.Open(arch)
hb = ActiveSheet.Name
Set h2 = l2.Sheets(hb)
For i = 4 To h1.Range("CS" & Rows.Count).End(xlUp).Row
h1.Cells(i, ca) = Application.CountIf(h2.Range("H:H"), h1.Cells(i, "CS"))
Next
End If
l2.Close
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas