none
Bucle con selección de celdas diferente RRS feed

  • Pregunta

  • Hola,

    Tengo una hoja de excel con 5000 filas. Lo que intento es crear una hoja por cada 50 filas. Es decir, una hoja nueva para el rango A1:P49, otra hoja nueva para el rango A50:P99, etc. También, que la hoja se guarde como CSV delimitado por comas. 

    He creado una macro con el siguiente código:

        Range("A1:P9").Select
        Selection.Copy
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Paste
        Range("A1").Select
        Application.CutCopyMode = False
        ChDir "\\psf\Home\Dropbox\Files\import\csv"
        ActiveWorkbook.SaveAs Filename:= _
            "\\psf\Home\Dropbox\Files\import\csv\products_20130123_1.csv", _
            FileFormat:=xlCSV, CreateBackup:=False
        Sheets("Hoja5").Select

    Mi duda viene cuando quiero hacer un Do while y que el rango se incremente. La A y la P deben incrementarse en 50 cada una y empezar en A1 y P9.

    Otra duda que tengo, y que algo he podido leer, es que cuando una macro guarda un CSV lo guarda en formato inglés (separación en , y decimales con .). Hay alguna manera de hacer que lo guarde con separación ; y los decimales con ,?

    Gracias por avanzado


    miércoles, 23 de enero de 2013 21:37

Respuestas

  • Si como describes tu archivo lo que tiene son 5000 filas, y éstas son las que tienen que ser recorridas, lo que tienens que incrementar es el número de fila de la dirección y no la letra de la columna.

    Ya sea una cosa u otra lo que desees incrementar, es mucho más útil para lo que pides llamar los rangos mediante la instrucción Cells().

    Con Cells() indicas un rango básico (celda) indicando primero su fila y después su columna de manera númerica.

    Por ejemplos

    Range("A1")

    es lo mismo que

    Cells(1,1)

    (recordar que el primer número es la fila y el segundo la columna).

    Para seleccionar más de una celda puedes hacer lo siguiente

    Range(Cells(1,1),Cells(1,2))

    que es lo mismo que

    Range("A1:B1")

    Un esbozo de lo que pides sería

    Dim i as Integer
    Dim Ws as Worksheet
    Set Ws = Worksheets("<NombreDeTuHoja>")
    i = 2
    Do Until Ws.Cells(i,1) = ""
        Ws.Range(Cells(i,1),Cells(i+49,<ÚltimaColumna>)).Copy
        '<TuDestino>.Paste
        '<Código para guardar CSV>
        i = i + 50
    Loop

    (Es un esbozo, no lo copies tal cual o puede que te de error).

    Mira lo que te propongo y cualquier cosa lo comentamos.

    Un saludo.


    Working Into Binary (WIB) - http://workingintobinary.blogspot.com.es/

    • Marcado como respuesta Uriel Almendra martes, 23 de abril de 2013 15:56
    jueves, 14 de febrero de 2013 13:17