Visual Basic para Aplicaciones - Macro para leer y comparar varias filas y columnas

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Macro para leer y comparar varias filas y columnas

Publicado por Celia H. (5 intervenciones) el 01/05/2018 20:05:11
Hola,
me gustaría desarrollar una macro con visual basic que haga lo siguiente:

En el libro "Ejercicio" (adjunto) hay dos hojas, una llamada "Info" con una lista de materiales y unas fechas, y otra llamada "Calendar" con una lista ordenada de materiales y todas las fechas entre 2017 y 2021, también ordenadas.

Lo que quiero hacer es trasladar la información de la hoja "Info" a la hoja "Calendar", con una macro que lea la lista de información y me coloree de algún color las celdas de la hoja "Calendar" que se correspondan con un material de la hoja "Info" y la fecha correspondiente.

Por ejemplo, que la macro lea que en "Info" en la fila 8, el material es "G" y la fecha es "16/10/2018", entonces vaya a la hoja "Calendar" y coloree la celda "YE7" que corresponde con esa información.

Yo he conseguido hacer una macro que lo hace y funciona, pero solo lo hace una vez, no hace el loop para seguir leyendo información y coloreando celdas... A ver si a alguien se le ocurre alguna forma de lograrlo.

Muchas gracias de antemano.
Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Macro para leer y comparar varias filas y columnas

Publicado por JuanC (565 intervenciones) el 01/05/2018 21:57:19
fijate si te sirve...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Option Explicit
 
Sub test()
Dim wsSrc As Worksheet, wsDst As Worksheet
Dim rngSrc As Range, rngDst As Range, cell As Range
Dim r As Range, rngCal As Range, rf As Range, f As Variant
 
Set wsSrc = Hoja2 '//Info
Set rngSrc = wsSrc.Range("A2:A" & wsSrc.UsedRange.Rows.Count)
 
Set wsDst = Hoja1 '//Calendar
Set rngDst = wsDst.Range("A2:A" & wsDst.UsedRange.Rows.Count)
Set rngCal = wsDst.Range("B1", wsDst.Cells(1, wsDst.UsedRange.Columns.Count))
 
For Each cell In rngSrc
    Set r = rngDst.Find(cell.Value, LookAt:=xlWhole) '//Busca material
    If Not r Is Nothing Then
       f = cell.Offset(, 1).Value
       Set rf = rngCal.Find(f, LookAt:=xlWhole)      '//Busca fecha
       If Not rf Is Nothing Then
          rf.Offset(r.Row - 1).Interior.ColorIndex = 3
       End If
    End If
Next
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Macro para leer y comparar varias filas y columnas

Publicado por Laura (5 intervenciones) el 03/05/2018 16:51:50
Funciona perfecto! Muchas gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar