VBA: buscar fechas y dato asociado

Y en particular a Dante Amor, que una vez hace unos años me ayudó con un VBA con gran profesionalismo y dedicación.

Es mi segundo post en este foro y desde ya agradezco enormemente su ayuda. No se programar en ningún lenguaje, pero algo "entiendo" (ya se poner "Hola Mundo" con VBA jeje).
Necesito su ayuda con lo siguiente:
1) Tengo un listado diario de precios de acciones, pero solo necesito usar el precio del útlimo día hábil del mes (lunes a viernes). Luego haré análsis en función de los precios mensuales (medias, desviaciones, etc).
2) Diferentes proveedores me pasan los precios con su correspondiente fecha en diferentes formatos:
Ejemplo:
a) Uno me pone formato: MM / DD / AA y otro me pone DD / MM / AA
b) separan los decimales con coma (,) o con punto (.)
c) Ponen el precio hasta el viernes y luego saltan al lunes (en los fin de semanas no hay mercado); mientras que otro pone precio a sábado y domingo con el valor del viernes (sumándome dos celdas inútiles).
Tipo:
Jueves $8
Viernes $9
Sábado $9
Domingo $9
Lunes $10
¿Qué es lo que necesito?
Armar una nueva base de datos, solo con la fecha y precio del último día hábil de cada mes.
Ej:
Columna A: Fecha (en formato DD/MM/AA)
Columna B: Precio (con separador de decimales en función configuración windows)
No sería necesario que reconociera cuantos listados de precios de diferentes acciones haya, solo analizar la columna A (fecha) y B (precio).
¿Alguien sabe cómo hacer esto?
Desde ya muchas gracias por su gentil ayuda.

PD. Dante, si ves este mensaje, te mando un saludo lleno de afecto por el fallecimiento de tu padre.

1 respuesta

Respuesta
1

Podrías enviarme algunos archivos de los proveedores con diferentes formatos, para revisar y ver la posibilidad que una macro pueda leer los datos.

Me explicas con cada archivo cuál es el precio que debería estar tomando.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “guzmanvoip” y el título de esta pregunta.

S a l u d o s . D a n t e   A m o r

¡Gracias! Ya te mandé el mail.

 H o  l a:

Te anexo las macros para arreglar la fecha y poner el último día hábil del mes con su valor:

Sub UltimoValor()
'Por.Dante Amor
    Set h1 = Sheets("BASE DATOS COMPLETA")
    Set h2 = Sheets("Resultado")
    '
    'Actualiza fechas
        Paso1 h1, h2
    'Buscar valor del último día hábil del mes
        Paso2 h1, h2
    '
    h2.Select
    MsgBox "Terminado"
End Sub
'
Sub paso1(h1, h2)
'Por.Dante Amor
    'Actualiza fechas
    h2.Cells.ClearContents
    h1.Rows("1:2").Copy h2.[A1]
    cols = Array(1, 5, 9)
    For j = LBound(cols) To UBound(cols)
        For i = 3 To h1.Cells(Rows.Count, cols(j)).End(xlUp).Row
            mes = Month(h1.Cells(i, cols(j)))
            dia = Day(h1.Cells(i, cols(j)))
            año = Year(h1.Cells(i, cols(j)))
            Select Case cols(j)
                Case 1, 9
                    fec = Split(h1.Cells(i, cols(j)), "/")
                    If UBound(fec) > 0 Then
                        fecha = DateSerial(fec(2), fec(0), fec(1))
                        h2.Cells(i, cols(j)) = fecha
                    End If
                Case 5
                    h2.Cells(i, cols(j)) = h1.Cells(i, cols(j))
            End Select
            If IsNumeric(h1.Cells(i, cols(j) + 1)) And h1.Cells(i, cols(j) + 1) <> "" Then
                h2.Cells(i, cols(j) + 1) = CDbl(h1.Cells(i, cols(j) + 1))
            End If
        Next
    Next
End Sub
'
Sub paso2(h1, h2)
'Por.Dante Amor
    'Buscar valor del último día hábil del mes
    cols = Array(1, 5, 9)
    For j = LBound(cols) To UBound(cols)
        k = 3
        wmax = 0
        wmes = Month(h2.Cells(3, cols(j)))
        h2.Cells(k, cols(j) + 2) = h2.Cells(k, cols(j))
        h2.Cells(k, cols(j) + 3) = h2.Cells(k, cols(j) + 1)
        For i = 3 To h2.Cells(Rows.Count, cols(j)).End(xlUp).Row
            dia = Format(h2.Cells(i, cols(j)), "ddd")
            Select Case UCase(Left(dia, 1))
                Case "S", "D"
                    x = x
                    wmax = 0
                Case Else
                    If wmes = Month(h2.Cells(i, cols(j))) Then
                        If h2.Cells(i, cols(j)) > wmax Then
                            h2.Cells(k, cols(j) + 2) = h2.Cells(i, cols(j))
                            h2.Cells(k, cols(j) + 3) = h2.Cells(i, cols(j) + 1)
                            wmax = h2.Cells(i, cols(j))
                            k = k + 1
                        End If
                    Else
                        h2.Cells(k, cols(j) + 2) = h2.Cells(i, cols(j))
                        h2.Cells(k, cols(j) + 3) = h2.Cells(i, cols(j) + 1)
                        wmax = h2.Cells(i, cols(j))
                        k = k + 1
                    End If
            End Select
            wmes = Month(h2.Cells(i, cols(j)))
        Next
    Next
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas