La adición de una Fila de Desplazamiento para un Rango Dado. Excel VBA

Tengo una variable que al principio se establece en un rango dado.

Quiero tener un bucle que llevaría a la siguiente fila hacia abajo desde el extremo de la gama dada y agregarlo a ese rango.

es decir:

myRows = Range(1:10)

    For Each cell in myRows

       If cell.Value > 2048 Then

           myRows = myRows + myRows.Offset(1, 0) ---This is where i need help---

Básicamente, ¿cómo puedo incremento automático de la gama cada vez que el bucle se ejecuta.

Edición:

También ¿cómo puedo Agregar al frente de la gama. Así como Toma de distancia de la parte posterior de la gama.

es decir

Rango(1:10) es mostrada
Rango(11:20) está oculto

Quiero agregar uno a la mostrada rango que llevaría lejos de lo oculto rango para su:

Rango(1:11) es mostrada
Rango(12:20) está oculto

  • Así que una vez que sus criterios se cumplen, que sería básicamente como para concatenar el valor de la celda actual y el valor de la celda directamente debajo de él? ¿Entonces el deseo de mantener el valor de la celda directamente debajo de él intacta y pasar a la siguiente celda? O ¿desea eliminar esa fila?
  • Es una mala idea para cambiar el rango que está pasando por dentro del bucle. Creo que un Bucle Do es probablemente la más apropiada, pero no puedo decirle por qué usted desea a aumentar por lo que es difícil de decir.
  • La razón por la que estoy cambiando en el bucle es porque estoy tratando de tener un derrame tipo de cosa que sucede. Así que una vez que una célula en el rango llega a un límite, a continuación, se añade una nueva celda del rango y comienza a llenar hasta que la celda a su tope, y así sucesivamente y así sucesivamente
InformationsquelleAutor user1305569 | 2013-07-22

2 Kommentare

  1. 4

    Tiene myRows como un Variant tipo de datos. Usted necesita para declarar como una Range objeto.

    Dim myRows as Range

    Entonces usted necesita para utilizar el Set palabra clave para asignar un Range objeto).

    Set myRows = Range("1:10")

    A continuación, utilice el rango de .Resize método:

    Set myRows = myRows.Resize(myRows.Rows.Count+1, myRows.Columns.Count)

    De lo contrario, si usted necesita para mantener myRows como de tipo Variant, que me haga saber y yo pueda volver a trabajar en esto.

    • Olvidé mencionar que tengo se establece como un rango en la parte delantera, pero el cambio de tamaño parece que es lo que estoy buscando. Podrías echar un vistazo a mi post Editado en la parte superior para ver si el cambio de tamaño se encargará de la misma cosa?
    • Creo que se puede hacer con Offset y Resize métodos, pero no prestar atención a @Dick Kusleika el comentario, por lo general es una mala idea y puede dar lugar a resultados no deseados, si cambia el rango que estamos recorriendo, dentro del bucle.
    • La razón por la que estoy cambiando el intervalo en el bucle es porque estoy buscando algún tipo de derrame sobre la funcionalidad (una especie de desbordamiento de pila), donde una vez que la celda en el rango alcanza su tapa, a continuación, se agrega una fila y la fila nueva empieza a llenar, en el infinito.
    • El bucle se NO operar en las filas que se añaden a la gama.
    • lo que si se añade a la gama fuera del bucle, a continuación, tener un comando GoTo para volver al principio del Bucle. cómo sería hacer que se ajusten a extenderse tipo de cosa que yo quiero?
    • Este no es un foro para una cadena infinita de «Qué pasaría si…» preguntas. Hacer su codificación, y cuando se tiene que específico problemas con él, después de una nueva pregunta. En el ínterin, si el método por encima de las respuestas de la pregunta inmediata, favor de marcar como «Aceptado». Usted va a obtener más ayuda si usted sigue las normas del foro aquí. Saludos.
    • Parte de mi pregunta es cómo simultáneamente una fila de una variable de rango y dárselo a otro rango de la variable. Que era, sin embargo, respondió. Yo estaba respondiendo tu comentario con el whatif, y fue clearifying por qué estaba haciendo lo que estaba haciendo en el comentario de antes. Estoy siguiendo las directrices. Gracias.
    • Voy a volver a publicar con toda mi código y ver si eso aclara las cosas.
    • Usted tiene lo que parece ser tres preguntas ahora. En un principio hubo una pregunta: ¿cómo puedo incremento automático de la gama cada vez que el bucle se ejecuta. me respondió este, y le dio algunas sugerencias para el nuevo/preguntas de seguimiento. Generalmente el uso de un GoTo comando como usted está sugiriendo probablemente no es ideal, ya sea que usted necesita para añadir más lógica para evitar bucles infinitos, nuevas variables para identificar si/cuando a GoTo, etc.). Esto hace que el código desordenado. Usted tiene que mirar en las maneras más eficientes para la estructura de su código. Nadie puede ayudar con eso, a menos que la publicación de su código completo.
    • gracias. el código completo está arriba: stackoverflow.com/questions/17792339/excel-vba-spill-over-loop

  2. 3

    También puede utilizar

    Set myRows = Union(myRows, myRows.Offset(1, 0))

    EDICIÓN:

    La pidió!

    Para eliminar una fila de genéricos gama

    Set myRows = RemoveRowFromRange(myRows, 10)
    
    ...
    
    Function RemoveRowFromRange(ByVal Range As Range, row_number As Long) As Range
        With Range.Worksheet
            Select Case row_number
            Case 1
                Set Range = Intersect(Range, .Range(.Rows(2), .Rows(.Rows.Count)))
            Case .Rows.Count
                Set Range = Intersect(Range, .Range(.Rows(1), .Rows(.Rows.Count - 1)))
            Case Else
                Set Range = Union(Intersect(Range, .Range(.Rows(1), .Rows(row_number - 1))), Intersect(Range, .Range(.Rows(row_number + 1), .Rows(.Rows.Count))))
            End Select
        End With
        Set RemoveRowFromRange = Range
    End Function
    • ¿cómo va el trabajo sindical con la edición que he añadido a mi post original?
    • Eso no es tan fácil. Si ambos rangos son simples rectángulos, usted puede usar Set Range2 = Range2.Resize(Range2.Rows.Count-1, Range2.Columns.Count).Offset(1,0).
    • los rangos de fórmulas en las celdas dentro de ellos, es esto lo que quieres decir con simples rectángulos o ¿te refieres a las reales dimensiones de la celda?
    • No dimensiones. La forma de las celdas seleccionadas. Usted puede tener un compuesto con rango, por ejemplo, 1:10,12:20,30:30: esta gama está compuesta por 3 áreas (lo que he llamado «rectángulos»): 1:10 y a las 12:20 y 30:30. Para eliminar una línea de este rango, no se puede simplemente .Resize.
    • entonces, ¿cómo voy a ir yo acerca de tomar una fila de un rango de filas ocultas y colocarlo dentro de un rango de volver a las filas?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea