variable valor una sirve seleccionar recorrer rango que para hoja fila español celda asignar activesheet activa vba excel-vba excel

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.