Saltar al contenido

excel vba cómo copiar el valor de múltiples rangos no contiguos en un array

Siéntete libre de divulgar nuestro espacio y códigos con otro, danos de tu ayuda para aumentar esta comunidad.

Solución:

No sé qué estaba mal con tu unionpero habría creado el mismo rango que indicó en su primer intento.

El problema es que ahora tienes múltiples áreas. Que puede, y hasta donde yo sé, tiene que abordar ahora.

He aquí un ejemplo, que se resolverá en un array de todas las áreas, sin agregar cada celda individualmente, pero agregando cada área individualmente al resumen array:

Public Sub demo()
  Dim summaryTempArray() As Variant
  Dim i As Long

  With Tabelle1
    ReDim summaryTempArray(1 To .Range("A2:D9,A11:D12,A14:D15").Areas.Count)

    For i = 1 To .Range("A2:D9,A11:D12,A14:D15").Areas.Count
      summaryTempArray(i) = .Range("A2:D9,A11:D12,A14:D15").Areas(i)
    Next i
  End With

End Sub

Espero que esto ayude.

Creo que la solución de Jook es tan buena como la que obtendrá si es importante obtener los rangos de origen en un array. Sin embargo, creo que la solución debería incluir instrucciones sobre la extracción de valores de un irregular array. Esto no es difícil, pero la sintaxis es oscura.

no puedo conseguir tu Union declaración a fallar tampoco. Supongo que hay algo en el contexto que causa la falla que no puedo duplicar.

El siguiente código muestra que los dos rangos son iguales y que solo el primer subrango se carga en un array como usted informó. Termina con un enfoque alternativo que podría ser satisfactorio.

Option Explicit
Sub Test()

  Dim CellValue() As Variant
  Dim rng As Range

  With Worksheets("Sheet1")

    Set rng = .Range("A2:D9,A11:D12,A14:D15")
    Debug.Print rng.Address
    Set rng = Union(.Range("A2:D9"), .Range("A11:D12"), .Range("A14:D15"))
    Debug.Print rng.Address
    ' The above debug statements show the two ranges are the same.

    Debug.Print "Row count " & rng.Rows.Count
    Debug.Print "Col count " & rng.Columns.Count
    ' These debug statements show that only the first sub-range is included the
    ' range counts.

    CellValue = rng.Value

    Debug.Print "Rows " & LBound(CellValue, 1) & " to " & UBound(CellValue, 1)
    Debug.Print "Cols " & LBound(CellValue, 2) & " to " & UBound(CellValue, 2)
    ' As you reported only the first range is copied to the array.

    rng.Copy Destination:=Worksheets("Sheet2").Range("A1")
    ' This shows you can copy the selected sub-ranges.  If you can copy the
    ' required data straight to the desired destination, this might be a
    ' solution.

  End With

End Sub

Recuerda que tienes la capacidad de agregar una reseña .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *