Buscar valor en un rango, guardar resultado en vector

Hola,
He probado un poco de todo y no me sale. Seguramente me podrás echar una mano!
Tengo 2 columnas de valores:
A --> llena de 0,1,2 o 3 correpondiendo a cylindro 1, 2 ,3 y 4)
B --> llena de datos.
Quiero guardar en un columna C los datos de la columna B correspondiendo al valor 0 de la columna A. Luego correspondiendo al valor 1, 2 y 3
Es decir buscar en A los "0", y cada vez que encuentro copio pego el valor correspondiente de la columna B en otra columna.
Son columnas de 40.000 valores. He probado el siguiente código pero tarda bastante (unos 10s por valor 0 1 2 o 3)
Dim fila_zyl_n As Long ' ultima fila de la columna para el 0, 1, 2 0 3
Dim FirstVirkr, LastVirkr As String 'primera/ultima fila columna A
FirstVirkr = Cells(Rows.Count, "A").End(xlUp).End(xlUp).Address
LastVirkr = Cells(Rows.Count, "A").End(xlUp).Address
With Worksheets("kek").Range(FirstVirkr, LastVirkr)
For n = 0 To 3
Set c = .Find(n, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
fila_zyl_n = Cells(Rows.Count, 3 + n).End(xlUp).Row
Cells(fila_zyl_n + 1, 3 + n) = Cells(c.Row, "B").Value
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Next n
End With
Pensaba en lugar de utilizar un bucle, crear un vector donde guardar los datos, para luego pegarlos en una nueva columna.

1 Respuesta

Respuesta
1
Prueba con algo así a ver desde la celda A2 lo hará hasta que no hayan datos en la celda activa. Estoy suponiendo según lo que me escribes. Lo puedes adaptar a tus necesidasde.
Esto no implica que sea mejor a lo que tienes pero probar no cuesta nada
ActiveSheet. Range("A2"). Activate
Do While Not IsEmpty(ActiveCell)
valor = ActiveCell.Value
If valor = 0 Then
'Tomas el valor de la columna B
valorb = ActiveCell.Offset(0, 1).Value
'pegas en la columna C
ActiveCell.Offset(0, 2).Value = valorb
End If
ActiveCell.Offset(1, 0).Activate
Loop
Si necesitas mas condiciones una Select Case

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas