Hola, cforyan.
Como comenta Antonio, es muy difícil entender las consultas cuando sólo se publica parte del problema. Es mejor presentar cómo tienes tus datos en la hoja electrónica y explicar un poco más del entorno. Eso ayuda mucho a los que las leemos.
Lo que logro entender, es que cuando la moneda es USD, necesitas dividir las columnas con encabezado "$" entre el valor de la columna K, y cuando la moneda es CLP, necesitas multiplicar las columnas con encabezado "US$" por el valor de la columna K.
Como comentas, el código suele ser muy lento cuando modificas celdas en la hoja electrónica. Deberías tratar de idear cómo hacerlo utilizando métodos y fórmulas de la hoja electrónica. Verás que así la velocidad de respuesta es mucho mayor.
Ahora, suponiendo que te entendí correctamente, considera la siguiente opción:
Primero necesitarás crear otra hoja y determinar en una variable cuántas filas tienen tus datos. Esto te permitirá construir tus fórmulas: Dim CeldaActiva As String, Filas As Long CeldaActiva = ActiveCell.Address Sheets.Add ActiveSheet.Name = "CopiaTemp" Sheets("Series").Activate Filas = Range("A" & Rows.Count).End(xlUp).Row
Segundo, copias a esta hoja temporal tus datos: Range("A1:K" & Filas).Copy Sheets("CopiaTemp").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Series").Select
Tercero, construyes tus fórmulas: If moneda = "USD" Then Range("B5:J" & Filas).Formula = "=IF(B$1=""$"",CopiaTemp!B5/$K5,CopiaTemp!B5)" ElseIf moneda = "CLP" Then Range("B5:J" & Filas).Formula = "=IF(B$1=""US$"",CopiaTemp!B5*$K5,CopiaTemp!B5)" End If
Cuarto, una vez que las hayas verificado, las conviertes en valores: Range("B5").Select Range("B5:J" & Filas).Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
Y finalmente, eliminas la hoja temporal que agregamos al principio: Application.CutCopyMode = False Application.DisplayAlerts = False Sheets("CopiaTemp").Delete Application.DisplayAlerts = True Range(CeldaActiva).Select
Pruébalo agregando uno por uno estos pasos, y comentas los resultados.
Saludos!
------------- Cordialmente, David
|