Macro grabada hasta fila 2000, aumentar el rango de filas no importa el numero de filas.

Para Dante Amor

Muy buenas tardes, tengo una macro que grabe que aplica una fórmula en ciertos rangos, pero cuando la grabe, solo jale la fórmula hasta la fila 2000, el problema es que ahora procese un archivo con más registros y la fórmula se aplica aun hasta la fila 2000, quisiera ver si se puede modificar a fin de que se aplique a la columna no importando el numero de registros

La fórmula esta en la fila "S" y lo que hace es concatenar la columna "R" basan adose en la columna "C" cuando encuentre un registro en la columna "B". Esta es la macro :

Sub Concatenar_concepto()
Application.ScreenUpdating = False
    Sheets("COMPROBANTES CDFI").Select
    Rows("1:1").Select
    Range("BE1").Activate
    Selection.Delete Shift:=xlUp
    Columns("BF:BF").Select
    Selection.Copy
    Sheets("FORMATO INGRESOS").Select
    Range("O1").Select
    Selection.End(xlToLeft).Select
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Columns("S:S").Select
    Application.CutCopyMode = False
    Selection.Insert Shift:=xlToRight
    Range("S1").Select
    ActiveCell.FormulaR1C1 = "CONCEPTO CONCATENADO"
    Range("S2").Select
    ActiveCell.FormulaR1C1 = _
        "=CONCATENARSI(RC[-16]:R[1998]C[-16], RC[-17], RC[-1]:R[1664]C[-1],,,"" "")"
    ActiveWindow.SmallScroll Down:=-18
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:S2000")
    Range("S2:S2000").Select
    Application.ScreenUpdating = True
End Sub

y la Formula que aplico ahi es esta tal vez te pueda ayudar  a entender que hice mal.

Function CONCATENARSI(Criterios As Range, Condicion As String, Datos As Range, _
Optional Exacto As Boolean = False, Optional OmitirBlancos As Boolean = False, _
Optional Separa As String = " ") As String
Dim Criterio As Range
Dim Siguiente As Integer
Dim Coincide As Boolean
Dim Concatenar As Boolean
Dim Cadena As String
Cadena = ""
For Each Criterio In Criterios 'Asigna un valor a criterio dependiendo del número de criterios seleccionados
Siguiente = Siguiente + 1 'Esta es una variable contador
If Exacto Then 'Se condiciona si el valor de la variable exacto es falso o verdadero
Coincide = Criterio = Condicion 'Si el criterio y la condición son iguales la variable coincide cambia a verdadero
Else
Coincide = LCase(Criterio) = LCase(Condicion) 'Si el criterio y la condición son iguales la variable coincide cambia a verdadero
End If
If Coincide Then 'Se condiciona si el valor de la variable coincide es falso o verdadero
If OmitirBlancos Then 'Se condiciona que las celdas a concatenar no están vacías
Concatenar = Not IsEmpty(Datos.Cells(Siguiente))
Else
Concatenar = True 'Se asigna verdadero a la variable concatenar
End If
If Concatenar Then
If Len(Cadena) > 0 Then 'Condiciona para agregar el separador a la cadena de texto
Cadena = Cadena & Separa
End If
nvodato = Datos.Cells(Siguiente) 'Nvodato es el valor del de la celda del rango de la variable datos
If InStr(Cadena, nvodato) = 0 Then 'compara si nvodato se encuentra en la cadena de texto cadena
Cadena = Cadena & Datos.Cells(Siguiente) 'Se agrega el valor de la celda de datos a concatenar en la cadena de texto
Else
End If
End If
End If
Next
CONCATENARSI = Cadena 'asigna el valor de la variable a la función concatenarSI
End Function

1 respuesta

Respuesta

El problema lo tienes en estas instrucciones:

Selection.AutoFill Destination:=Range("S2:S2000")
    Range("S2:S2000").Select

Está seleccionando el "Rango" de filas desde la S2 hasta la S2000.... lógicamente, se te va a parar ahi.

Cambia eso por

Selection.AutoFill Destination:=Range("S2:S10000")
    Range("S2:S10000").Select

y ahora se parará en la fila 10.000...  si la hay... si necesitas más filas, amplía el rango.

No me sirve en la forma que dices pues eso lo se, lo que quiero es que no importa la cantidad de registros de la columna "S" puede tener 50 registros y que solo se quede en los 50 no necesito que aplique esa fórmula hasta la fila 10.000. Lo que requiero es que se vaya solo al ultimo registro no importando cuantos sean. Cuando la grabe la jale hacia abajo, y en ese entonces eran 2.000 por eso se quedo ahí pero tuve que procesar otros archivos con menos y con más registros y siempre o se pasaba o le hacia falta.

Ok, por lo que entiendo, lo que pretendes es que calcule la fórmula solo en la cantidad justa de celdas que tienes, ¿Cierto?
Si es así, tienes que hacer una fórmula para saber el total de filas... Sería algo así:

TotalFilas=ContarA(A1:A2000) 'Esto te devuelve el total de filas en la hoja
Selection.AutoFill Destination:=Range("S2:S" & "'" & TotalFilas & "'")
    Range("S2:S" & "'" & TotalFilas & "'").Select

Con eso, debería funcionar como tu quieres.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas