speed_methal
New Member
- Joined
- May 8, 2010
- Messages
- 14
Buenas tengo un macro que me pasó Greg Truby para intercalar datos de dos columnas. El macro es
resulta que a la hora de definir los rangos de las columnas los meto a pelo
Const c_strAddrSource1 As String = "A2:A1752"
Const c_strAddrSource2 As String = "B2:B1751"
y puesto que de unas hojas a otras el límite inferior varía, me gustaría saber si se puede definir de tal manera que el límite inferior sea la última celda con datos para que la misma macro me sirva para los distintas hojas.
Me estoy iniciando en VBA de forma autodidacta, he intentado introducir
Const c_strAddrSource1 As String =Range("A2", Range("A2").End(xlDown)).Select
que selecciona hasta la última celda no vacía, pero me tira un mensaje de error diciendo que se ha de definir como una constante.
Alguna idea?
Gracias por adelantado
Code:
Sub Intercalar()
Const c_strAddrSource1 As String = "A2:A1752"
Const c_strAddrSource2 As String = "B2:B1751"
Const c_strAddrTarget As String = "E10"
Dim rngSrce1 As Excel.Range, rngSrce2 As Excel.Range, _
rngSrceCell1 As Excel.Range, rngSrceCell2 As Excel.Range, _
rngTargetCell As Excel.Range
Set rngSrce1 = Range(c_strAddrSource1)
Set rngSrce2 = Range(c_strAddrSource2)
Set rngSrceCell1 = rngSrce1.Range("a1")
Set rngSrceCell2 = rngSrce2.Range("a1")
Set rngTargetCell = Range(c_strAddrTarget)
Do While Not Application.Intersect(rngSrce1, rngSrceCell1) Is Nothing _
Or Not Application.Intersect(rngSrce2, rngSrceCell2) Is Nothing
If Not Application.Intersect(rngSrce1, rngSrceCell1) Is Nothing Then
rngTargetCell.Value = rngSrceCell1.Value
Set rngTargetCell = rngTargetCell.Offset(1)
Set rngSrceCell1 = rngSrceCell1.Offset(1)
End If
If Not Application.Intersect(rngSrce2, rngSrceCell2) Is Nothing Then
rngTargetCell.Value = rngSrceCell2.Value
Set rngTargetCell = rngTargetCell.Offset(1)
Set rngSrceCell2 = rngSrceCell2.Offset(1)
End If
Loop
End Sub
resulta que a la hora de definir los rangos de las columnas los meto a pelo
Const c_strAddrSource1 As String = "A2:A1752"
Const c_strAddrSource2 As String = "B2:B1751"
y puesto que de unas hojas a otras el límite inferior varía, me gustaría saber si se puede definir de tal manera que el límite inferior sea la última celda con datos para que la misma macro me sirva para los distintas hojas.
Me estoy iniciando en VBA de forma autodidacta, he intentado introducir
Const c_strAddrSource1 As String =Range("A2", Range("A2").End(xlDown)).Select
que selecciona hasta la última celda no vacía, pero me tira un mensaje de error diciendo que se ha de definir como una constante.
Alguna idea?
Gracias por adelantado
Last edited by a moderator: