Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Quiere decir que en la Hoja(en este caso la Hoja1 por se donde se encuentra el código) y cuando te muevas de celda se realizará lo que hay dentro (o sea todo el código siguiente)
If Range("F1").Value = "2003" And Range("C5").Value = "4" Then
NOTA:en VB todo tiene propiedades y métodos, por eso cuando nos referimos a una celda tenemos que poner la propiedad o método, en este caso la propiedad "value" para saber el texto (ejemplo cotidiano pepito.nombre, pepito.tamaño, pepito.edad, etc.).
Condición: si la celda F1 es igual a 2003 y la celda C5 es igual a 4 entonces se realizará lo siguiente
Range("A1").Value = Worksheets("Hoja1").Cells(5, 2).Value 'hoja1 B5
Si la condición de arriba es verdadera entonces se realizá esta instrucción, que es poner el texto que existe en la Hoja1 celda B5 en la celda A1 de la hoja presente.
ElseIf Range("F1").Value = "2003" And Range("C5").Value = "5" Then
si la primera condición no se cumple hacemos otra condición dentro de la primera (if anidado con elseif) para ver si se cumple esta nueva
Range("A1").Value = Worksheets("Hoja1").Cells(6, 2).Value 'hoja "b6"
si el elseif de arriba se cumple (es verdadera) entonces se realizará esta instrucción, que es poner el texto que existe en la Hoja1 celda B6 en la celda A1 de la hoja presente.
NOTA: si quisieras que el dato se pusiera en la A2 entonces tienes que cambiar por Range("A2"). Si quisieras que tomara el dato de la hoja2 celda C6 entoces tienes que cambiar por Worksheets("Hoja2").Cells(6, 3).Value
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "4" Then
sino se cumple la primera condicion (if), ni la segunda (elseif), hacemos esta otra condición para ver si se cumple.
Range("A1").Value = Worksheets("Hoja1").Cells(13, 2).Value 'hoja B13
si se cumple el elseif de arriba entonces se realizará ésta instrucción.
'Así sucesivamente....todo se va anidando como lo tenias mediante fórmulas
ElseIf Range("F1").Value = "2004" And Range("C5").Value = "5" Then
Range("A1").Value = Worksheets("Hoja1").Cells(14, 2).Value 'hoja B14
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "4" Then
Range("A1").Value = Worksheets("Hoja1").Cells(15, 2).Value 'hoja B20
ElseIf Range("F1").Value = "2005" And Range("C5").Value = "5" Then
Range("A1").Value = Worksheets("Hoja1").Cells(16, 2).Value 'hoja B21
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "4" Then
Range("A1").Value = Worksheets("Hoja1").Cells(17, 2).Value 'hoja B27
ElseIf Range("F1").Value = "2006" And Range("C5").Value = "5" Then
Range("A1").Value = Worksheets("Hoja1").Cells(18, 2).Value 'hoja B28
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "4" Then
Range("A1").Value = Worksheets("Hoja1").Cells(19, 2).Value 'hoja B34
ElseIf Range("F1").Value = "2007" And Range("C5").Value = "5" Then
Range("A1").Value = Worksheets("Hoja1").Cells(20, 2).Value 'hoja B35
ElseIf Range("F1").Value = "" Or Range("C5").Value = "" Then
Range("A1").Value = "Falta dato"
End If
en VB cuando abres un IF y hay mas de una linea entonces se tiene que cerrar mediante end if.
End Sub
Agregó: en español seria la estructura mas o menos así:
Si valor1 es igual a 2003 y valor2 es igual a 4 entonces
valor3 es igual a valor4
Y sino, si valor1 es igual a 2003 y valor2 es igual a 5 entonces
valor3 es igual a valor5
Y sino, si valor1.....(El numero de Sino es proporcional al numero de datos que vas a comparar, si aumantas años, aumentas Sino).
Si aún no te queda claro puedo darte mas ejemplos
