Macro reemplazar datos columna

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
kaderas
Mensajes: 1
Registrado: Mar Feb 25, 2014 3:53 pm

Macro reemplazar datos columna

Mensaje por kaderas »

Hola buenas a todos. En esta ocasión por mucho que he buscado en el foro no encuentro solución a mi problema. Tengo un macro mediante el cual cambio los valores de una columna por los valores de otra. Tengo 2 hojas creadas, una la he llamado lista y la otra datos. En la sheet lista, he colocado la relación de los números que tiene que reemplazar y por cual en cada caso. El macro me cambia los valores de las celdas bien, pero luego vuelve a cambiar el valor de nuevo en las celdas que ya había modificado, volviendo a cambiar el valor de las celdas y creando un caos en el resultado.
Ejemplo:

1 - 97
2 - 98
3 - 99
4 - 101
5 - 103
6 - 105
7 - 107
8 - 108
9 - 109
97 - 230
98 - 231
99 - 232
100 - 233
101 - 234
102 - 235
Según el macro se debe colocar el 97 en lugar del 1, el 98 en lugar del 2, el 99 en lugar del 3, etc. Hasta ahí todo bien, el problema surge cuando llega al valor 97 de la columna izquierda y vuelve a reemplazarlo, en este caso por el número 230 y modifica la celda a1 otra vez. Lo que necesito es que solo cambie los datos antiguos y no vuelva a cambiar las celdas que ya ha cambiado anteriormente.
¿Alguien sabe como puedo solucionarlo?
El macro que estoy urilizando es el siguiente:
Sub Actualizar()
For i = 1 To 2299
Sheets("Lista").Select
origen = Cells(i, 1)
destino = Cells(i, 2)
Sheets("Datos").Select
For j = 1 To 2299
If Cells(j, 1) = origen Then
Cells(j, 1) = destino
End If
Next
Next
End Sub

Gracias
Openoffice 4.0.1 Windows 7 home
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro reemplazar datos columna

Mensaje por FJCC-ES »

Código: Seleccionar todo

oLista = ThisComponent.Sheets.getByName("lista")
oCeldasL = oLista.getCellrangeByName("A1:B2299")
DataL = oCeldasL.Data 

oDatos = ThisComponent.Sheets.getByName("datos")
oCeldasD = oDatos.getCellrangeByName("A1:A2299")
DataD = oCeldasD.Data
CopiaD = oCeldasD.Data
For i = 0 to 2298
	origen = DataL(i)(0)
	destino = DataL(i)(1)
	For j = 0 to 2298
	 If DataD(j)(0) = origen Then
	 	CopiaD(j)(0) = destino
	 	Exit For
	 End If
	next j
next i
oCeldasD.Data = CopiaD	
Responder