Macro que incrementa una fila al final de la tabla

Me gustaría que me ayudases. Tengo una tabla en excel y quiero hacer un botón que active una macro que incrementa una fila de la tabla al final de la misma cada vez que se pulse el botón.

1 respuesta

Respuesta
1
Si es fácil, ¿pero al final de la tabla te refieres en la ultima fila en blanco? No te entiendo si ya esta en blanco para que quieres insertar una fila en blanco, nunca pasaras de 65535 filas tu hoja. Aclarame si quieres la fila encima de la ultima con datos, que eso es otra cosa, y te la envío.
>Un saludo
>Julio
Ante todo muchas gracias por haberme atendido tan rápido, te aclaro lo que me preguntas:
Quiero hacer una tabla de 4 columnas por 3 filas, las celdas unas estarán sobreadas, los bordes pintados... fuera de la tabla le habré quitado los bordes a las celdas por lo que aparentemente es una hoja en blanco con una tabla dibujada. El usuario irá rellenando la tabla según su necesidad, pero cuando termine de rellenar la tercera fila, si necesitara otra fila más, éste pulsa sobre el botón de la macro y que automáticamente se inserte, al final de la tabla una fila nueva en blanco, para que el usuario pueda seguir metiendo datos, pero si vuelve a llenar la nueva fila, y necesitara una nueva, que pulsara otra vez el botón de la macro y que volviera a salir otra fila en blanco al final de la tabla, y así sucesivamente hasta que no necesitara meter más filas. Así pues obtendríamos una tabla de 4 columnas por N filas. En un principio, el usuario verá una página en exel en blanco y las únicas celdas con bordes serían la de la propia tabla, que iría rellenando según necesitara, pero que cuando rellenase todos los datos de la tabla de 4 X 3, si necesita una fila más, pues dándole a un botón apareciera otra fila para ser rellenada y así sucesivamente hasta que no necesitara ninguna fila más, teniendo una tabla de 4 X N.
Si eres tan amable, y abusando de tu generosidad, me gustaría que me comentases las líneas del programa de la macro para entender lo que hace cada línea, y así modificarla para posibles adaptaciones. Muchas gracias.
Ahora ya te he entendido, primero te creas el botón, y le añades este código:
Private Sub CommandButton1_Click()
'Suponemos que el usuario ha rellanado la última fila con formato y necesita otra fila 'por lo tanto esta situado en la 4ª celda de tu tabla.
'Copiamos esa celda
ActiveCell. Copy
'Nos situamos en la primera celda de la izquierda de tu tabla una fila mas abajo
ActiveCell.Offset(1, -3).Select
'Seleccionamos el rango de tu tabla, las 4 celdas
Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
'Pegamos el formato de la celda que copiamos, la ultima rellena
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'Nos situamos en la primera celda para que continue escribiendo datos
ActiveCell.Select
End Sub
Esto te creará otra fila con el mismo formato (de bordes) y te situará el cursor para escribir en la primera celda de es fila nueva, ojo para que funcione siempre tiene que estar situado en la última celda de la derecha de tu tabla de 4 columnas y entonces pulsar el botón de la macro,
>Un saludo
>Julio
Perdona que no te haya contestado (recontestado) antes. Tengo una duda en el código que me mandaste (muchas gracias ante todo):
No entiendo los números de las filas y columnas (las instrucciones están claras):
offset(0,3)
ActiveCell. Offset(1,-3)
Y otra cosa, ¿cómo sería para que me creara una fila al final de mi tabla pero sin saber el número de filas y de columnas que voy a tener?
Ejemplo, ¿en vez de ser como te dije de 4 filas y 3 columnas que la quisiera hacer en un principio de 5 filas y 6 columnas?
Gracias y perdona las molestias
Los números corresponde a esto:
ActiveCell. Offset (desplazaté a esta celda)
(1,-3)
Una fila hacia abajo y 3 columnas a la izquierda
(-1,5)
Una fila hacia arriba y 5 columnas a la derecha
>Un saludo
>Julio
Entiendo, ahora lo entiendo. Una última pregunta y no te molesto más. Puedo utilizar variables en vez de números en ActiveCell. Offset (X,Y)?
Range(ActiveCell, ActiveCell.Offset(X, Y)).Select
Es para hacer el ejemplo con cualquier tabla.
¿Y cuál sería la instrucción que me contara las filas y las columnas que tiene mi tabla?
Así podría hacer mi ejemplo para cualquier tabla.
¿Puedo poner en las coordenadas X+1 e Y+1?
Gracias, estoy aprendiendo mucho con tus respuestas.
Para poner variables a las referencias a filas y celdas deberías de incluir en la macro 2 variables que tomarían los datos de diferentes celdas y poner las variables en la sintaxis del ActiveCell. Offset algo así:
Private Sub mia()
valor1 = Range("B13").Value'Variable de la fila
valor2 = Range("B14").Value'Variable de la columna
ActiveCell.Offset(valor1, valor2).Select
End Sub
Como ves se puede hace, ahora para contar columnas ejecuta esta macro ya te la doy explicada:
Sub Cuenta_Filas()
Dim filas As String
Dim colum As String
'Aquí te pedirá que elijas la columna
filas = InputBox("Dime que Columna quieres contar", "Contar filas")
Range(filas & 65536).Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
'Sacamos el nombre de la celda del tipo $A$16
direccion = ActiveCell.Offset(-1, 0).Address
'como tenemos una referencia absoluta, del tipo $A$16
'le quitamos el primer signo del $ para que nos quede A$16

direccion = Mid(direccion, 2)
'creamos un vector con 2 elementos que estarán separados por el símbolo
'del $. Uno será la "A" y otro el "16" (suponiendo que estemos en A16)

dato = Split(direccion, "$")
'nos quedamos con el segundo elemento del vector (empieza por cero)
NumFilas = dato(1)
ActiveCell = NumFilas
End Sub
Y para contar cualquier cosa columnas o celdas tambien tienes esta formula:
=CONTAR(A1:E18)
Contará las celdas con numeros que hay en el rango que pongas
Para identificar la celda en blanco de tu última columna y que te dará el tamaño de tu tabla es esta macro:
Sub identifica_fila()
'Que no se pare de buscar, hasta que no encuentre una fila vacía
Do While Not IsEmpty(ActiveCell.Offset(0, 0))
ActiveCell.Offset(1, 0).Select
Loop
'ahora que estaremos parados en la celda vacía,
'sacamos la dirección de la celda
direccion = ActiveCell.Address
'como tenemos una referencia absoluta, del tipo $A$33
'le quitamos el primer signo del $ para que nos quede A$33

direccion = Mid(direccion, 2)
'creamos un vector con 2 elementos que estarán separados por el símbolo
'del $. Uno será la "A" y otro el "33" (suponiendo que estemos en A33)

dato = Split(direccion)
'nos quedamos con el segundo elemento del vector (empieza por cero)
celda = dato
ActiveCell = celda
End Sub
Con esto damos por terminada la pregunta, la puntúas y la finalizas.
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas