Trasladar Datos dispersos a Base de datos

Hola, mi problema es el siguiente:
Es posible si tengo Datos en las celdas (A5, B8, c32, e21, A23) que corresponden a un registro. Transferirlos a una base de datos en otra hoja del mismo libro, pero que se vayan ordenado (horizontalmente)
Nombre Dirección Edad Tel
A3 B8 C32 E21
Al cambiar los datos (registro nuevo)
Se acomoden también horizontalmente abajo de los datos anteriores y así sucesivamente.
Gracias

1 Respuesta

Respuesta
1
Supongo que hay varias maneras de resolver el tema.
Te propongo una sencilla.
Supongo que la hoja con datos se llama "Hoja1" y que aquella donde querés generar los registros es la "Hoja2".
En la fila 4 de la hoja2 están los encabezados.(Nombre Dirección).
Al rango con estos datos (Ej A4:D4) lo llamamos "DB" (Insertar/Nombre/Definir)
En la fila 1 de la hoja2 hay fórmulas que hacen referencias a los datos de la hoja1. Por ejemplo :
En a1 =+Hoja1!A5
En b1 =+Hoja1!B8
En c1 =+Hoja1!C32
Y siguientes.
Supongamos que al rango de fórmulas lo llamamos "Formulas".
El procedimiento manual sería
Ir al rango de "Formulas" (que tienen los valores dispersos en "Hoja1"), copiarlos y pegarlos "como valores" en el primer renglón (registro) disponible [ debajo de las leyendas (fila 4)] de la "Hoja2".
La manera más práctica es poner un BOTÓN en la "hoja1" que lo haga por nosotros, al ejecutar la siguiente macro :
(ALT+F11 para ir a VB e "Insertar/Modulo" para disponer de un Modulo donde pegar la macro)
'****************
Option Explicit
Sub AgregarRegistro()
Dim H1 As String, H2 As String, BD As String, FORMULAS As String
H1 = "Hoja1" ' nombre de la hoja con datos
H2 = "Hoja2" ' nombre de la hoja donde se volcaran los registros
BD = "BD" ' nombre del rango de la nueva Base de Datos
FÓRMULAS = "FORMULAS" ' fórmulas en hoja2 que referencian las celdas dispersas de hoja1
Application.ScreenUpdating = False
Sheets(H2).Select
Sheets(H2).Range(FORMULAS).Copy
Sheets(H2).Range(BD).range("a1").Select
'*** POR SI ES PRIMER REGISTRO
If IsEmpty(ActiveCell.Offset(1, 0).Value) Then
ActiveCell.Offset(1, 0).Select
Else
'*** va a primer celda disponible
ActiveCell.End(xlDown).Offset(1, 0).Select
End If
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets(H2).Range("BD").Range("A1").Select
Selection.CurrentRegion.Select
Selection.Name = BD
Range("A1").Select
Sheets(H1).Select
Application.ScreenUpdating = True
End Sub
'***************
Comentario :
"Application.ScreenUpdating" evita la vision de los desplazamientos entre hojas, "tan feo".
Podes usar las variables H1, H2, BD y FÓRMULAS, para poner los nombres que prefieras.
Podes usar fórmulas del tipo
BDCONTARA(bd, HOJA2! A4, cri) donde cri es un rango de 2 celdas "vacio", ej j1:j2) para controlar la cantidad de registros. Yo la puse en la Hoja1 para verificar el funcionamiento.
Espero haber colaborado.
Estoy a tu disposición por cualquier comentario o ampliación.
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas