Macro excel visual basic

Cordial Saludo
Después de hacer algunas consultas en internet cree la siguiente macro:
Function HolaMundo(Sistema As String) As String
If Sistema = "S10" Then
HolaMundo = "SALA NORTE"
End If
If Sistema = "S12" Then
HolaMundo = "SALA CALIMA"
End If
End Function
Function HolaMundo2(Sistema As String) As String
If Sistema = "S10" Then
HolaMundo2 = "CALI"
End If
If Sistema = "S12" Then
HolaMundo2 = "CALI"
End If
End Function
Básicamente lo que hace es basado en un código alfanumérico por ejemplo S12, define una sala y una ciudad, las cuales se ubicaran en 2 casillas diferentes.
Ahora Me gustaría saber el código más eficiente de esto pues resulta ser bastante pesado, ya que son mucho más ciudades y salas,.
Por otra parte extrarer información automáticamente de otro libor de excel con tan solo un botón, y ademas que se creen automáticamente las 2 columnas las cuales contengan esta fórmula para que todo sea automático.

1 respuesta

1
Respuesta de
Hola:
Lo que se me ocurre es 1 solución 'sin macros'... porqué no escribís la misma lista que estás colocando en el Editor, en alguna hoja y utilizas luego la función BUSCARV...
Por ej, col A los códigos, col B las salas y col C el otro dato. Luego la fórmula será:
=BUSCARV(A3;Hoja2!A2:C100;2;falso)   
Esto te devolverá la sala, cambiando el argumento '2' por '3' te devolverá la ciudad.
Sdos
Elsa
http://aplicaexcel.galeon.com/funciones.htm
¿Sera posible optimizar el código de la macro para que sea más eficiente y realice las funciones adicionales que expuse en la pregunta?
No sé qué pasó anteriormente con la consulta que no me permitía responderte.
Bien, cada usuario elige cómo quiere obtener sus datos...
Para seguir con la función, si la vas a necesitar para una lista de valores y NO querés guardar una lista auxiliar en alguna hoja, te sugiero utilizar Select Case...
Ej:
Function HolaMundo(Sistema As String) As String
Select case Sistema
Case is = "S10"
HolaMundo = "SALA NORTE"
Case is  = "S12" Then
HolaMundo = "SALA CALIMA"
'otros case
End Select
End Function
Guardando una lista en hoja podes utilicar un Set busco = rango(...) Find(Sistema)
(Encontrarás varios ejemplos con el buscador)
Esto sería la versión vba de la función BuscarV.
Sdos
Elsa
Que pena molestarte tanto pero me podrías regalar un ejemplo de la fucion Set busco = rango(...) Fin(Sistema)
Muchas Gracias
Bueno... hay decenas de respuestas con esa función si utilizas el buscador del foro.
Aquí va un ejemplo de la parte del Set, pensada para Hoja2: col A :código, col B: salas, col C: ciudad
Function HOLAMUNDO......................
dato = Sistema
Set busco = Sheets("Hoja2").Range("A2:C100").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then    'significa que lo encontró
HOLAMUNDO= busco.offset(0,1)     'devuelve lo que está 1 col a derecha del dato encontrado
'HOLAMUNDO2= busco.offset(0,2)    ' ESTA ES PARA LA 2DA FUNCIÓN: 2 col a derecha del dato
else
HOLAMUNDO =  "No se encuentra sistema en lista de hoja2"
end if
End Function
* En mi manual 400MacrosPlus encontrarás un cap dedicado a las funciones personales (20 funciones desarrolladas paso a paso), además de ejemplos con Set....
Sdos
Elsa
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: