valor - Cómo crear un rango de 2 rangos en VBA
seleccionar hoja excel vba (5)
¿Me gusta esto?
Sub Sample()
Dim rng1 As Range, rng2 As Range
Dim NewRng As Range
With ThisWorkbook.Sheets("Sheet1")
Set rng1 = .Range("A1")
Set rng2 = .Range("C3")
Set NewRng = .Range(rng1.Address & ":" & rng2.Address)
Debug.Print NewRng.Address
End With
End Sub
En lugar del formato R1C1 use Cells(r,c)
. Eso te dará más flexibilidad + control.
Entonces, el Range("A2")
se puede escribir como Cells(2,1)
Tengo dos rangos, cada uno contiene una sola celda (por ejemplo, "A1" y "C3")
¿Cuál es la forma más fácil de obtener un nuevo rango que contenga todas las celdas entre estas dos ("A1: C3")?
Estoy tratando de escribir algo como esto, pero esto no funciona:
Set NewRange = Range(Range1.Address:Range2.Address)
Otra pregunta que tengo es cómo establecer un rango en formato R1C1. Quiero usar algo como Range ("R1C2") en lugar de Range ("A2").
¡Gracias!
El método 4 no es el mismo que el método 1 cuando los rangos no son adyacentes.
With Sheet1
Set rng1 = .Range("A1:A3")
Set rng2 = .Range("C1:C3")
''This combines the two separate ranges, so select A1, A2, A3, C1, C2, C3
set newRng = Union(rng1, rng2)
''This combines the two ranges in the same way as when using "A1:C3",
''so including the cells from column B
set newRng = .Range(rng1, rng2)
Pon esto en un módulo:
Private Function CombineRanges(rng1 As Range, rng2 As Range) As Range
Set CombineRanges = ActiveSheet.Range(rng1.Address & ":" & rng2.Address)
End Function
Utilízalo como:
Dim NewRange As Range
Set NewRange = CombineRanges(Range1, Range2)
Puede establecer un nuevo rango de varias maneras. Abajo hay algunos ejemplos. Para obtener el formato R1C1: personalmente me resulta más fácil ingresar la fórmula normal y luego usar VBA para extraer el formato R1C1 requerido. Vea las declaraciones de debug.print a continuación.
Sub test()
Dim rng1 As Range
Dim rng2 As Range
Dim newRng As Range
With Sheet1
Set rng1 = .Range("A1")
Set rng2 = .Range("C3")
Debug.Print rng1.FormulaR1C1
Debug.Print rng1.FormulaR1C1Local
''Method1
Set newRng = .Range(rng1, rng2)
''method2
Set newRng = .Range(rng1.Address, rng2.Address)
''method3 (Only works if rng1 & rng2 are single cells
Set newRng = .Range(rng1.Address & ":" & rng2.Address)
''method4
Set newRng = Union(rng1, rng2)
End With
End Sub
También es posible algo como:
Dim newRange as Range
Set newRange = Range("A1:A4,A7:A9,C1:D9") ''Three different regions grouped
''or
Set newRange = Range("A1:A4,A7:A9,C1:D9, D10:D11") ''Four different regions grouped.
''or
Set newRange = Range("A1:A4,A7:A9,C1:D9, D10:D11, ...") ''N different regions grouped.