Vamos a ver si consigo explícame.
Supongamos que la tabla de arriba se llama Otra y tiene un Autonumerico llamado Idlo, y la de abajo CopiaOtra. En la tabla CopiaOtra, coloca los campos Idlo, numero, fecha1, valor1, fecha2, valor2, fecha3, valor3
Con la tabla Otra crea un formulario tabular. En el encabezado o en el pie del formulario pon un botón de comando y en sus propiedades-eventos-Al hacer clic, crea un procedimiento de evento y entre Private Sub y End Sub escribe
Form.RecordSource = "select * from otra order by valor1 desc"
DoCmd.SetWarnings False
Dim i As Integer
DoCmd.GoToRecord , , acFirst
For i = 1 To Form.Recordset.RecordCount
If Not IsNull([Valor1]) Then
DoCmd. RunSQL "insert into copiaotra(numero, fecha1, valor1)values(forms!otra!numero, forms!otra!fecha, forms!otra!valor1)"
End If
If Not IsNull([Valor2]) Then
DoCmd.RunSQL "update copiaotra set numero=forms!otra!numero,fecha2=forms!otra!fecha,valor2=forms!otra!valor2 where numero=forms!otra!numero"
End If
If Not IsNull([Valor3]) Then
DoCmd.RunSQL "update copiaotra set numero=forms!otra!numero,fecha3=forms!otra!fecha,valor3=forms!otra!valor3 where numero=forms!otra!numero"
End If
DoCmd.GoToRecord , , acNext
Next
DoCmd. GoToRecord,, acFirst
Te explico, primero le digo que ordene los registros en forma descendente del valor1 para que los primeros registros del formulario sean aquellos en que valor1 tiene valor. Así, cuando por lo siguiente empiece a recorrer los registros de arriba a abajo, primero pondrá los valores que tengan valor1, luego va actualizando esos campos ya insertados.
Lo que no se es lo que tardará por eso de ... millones de registros...
De todas formas, si ves que te lías y quieres, mándame un mensaje a [email protected] y te mando un ejemplo con los mismos datos que has puesto. Si lo haces, en el asunto del mensaje pon tu Alias Monica Vicente, que si no lo pone no abro los mensajes.