** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Division de datos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Division de datos

 Responder Responder
Autor
Mensaje
cforyan Ver desplegable
Nuevo
Nuevo


Unido: 16/Marzo/2022
Localización: Chile
Estado: Sin conexión
Puntos: 1
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita cforyan Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Division de datos
    Enviado: 16/Marzo/2022 a las 21:24
Hola, tengo varias columnas con números bastante largas (2000 filas) y quiero hacer una divisón matemática entre estas columnas pero sin tener que recorrer celda por celda ya que cuando lo hago el código demora mucho (alrededor de 10 minutos). Hay forma de hacerlo más rápido? Gracias

Este es mi código

    For i = 2 To 11
    
        moneda_indice = Sheets("Series").Cells(1, i).Value
        If Moneda = "CLP" Then
            If moneda_indice = "US$" Then
                For j = 5 To Range("A" & Rows.Count).End(xlUp).Row
                    Sheets("Series").Cells(j, i) = Sheets("Series").Cells(j, i) * Sheets("Series").Cells(j, 11)
                Next
            End If
        
        ElseIf Moneda = "USD" Then
            If moneda_indice = "$" Then
                For j = 5 To Range("A" & Rows.Count).End(xlUp).Row
                    Sheets("Series").Cells(j, i) = Sheets("Series").Cells(j, i) / Sheets("Series").Cells(j, 11)
                Next
            End If
        End If
    Next
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 16/Marzo/2022 a las 22:16
Me imagino que hablas de Excel te mando al foro adecuado.

PD: Creo que yo fui el que se equivoco de foro, disculpa.
Saludos.



Editado por emiliove - 16/Marzo/2022 a las 22:19
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Marzo/2022 a las 03:32

Tu código no está completo.  moneda no tiene valor y las variables no están declaradas.


Me sorprende que siendo la columna K común para multiplicar/dividir cada número por el valor de K, el bucle i  incluya la columna 11 (K), pues (p.e. ) K5/K5  el resultado es siempre 1. ¿?


► Prueba desactivando actualización de pantalla  y los eventos, antes de iniciar el bucle i y restáuralos después de finalizarlo.


' . . .

  Application.ScreenUpdating = False

  Application.EnableEvents = False

' Aquí  FOR i =  ... cálculos  ... NEXT i

  Application.ScreenUpdating = True

  Application.EnableEvents = True

' . . .





Editado por AnSanVal - 18/Marzo/2022 a las 03:39
Saludos desde Tenerife.
Arriba
sdgm Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 21/Abril/2005
Localización: Guatemala
Estado: Sin conexión
Puntos: 928
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita sdgm Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Marzo/2022 a las 15:24
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
Arriba
edi1 Ver desplegable
Nuevo
Nuevo


Unido: 22/Mayo/2022
Localización: España
Estado: Sin conexión
Puntos: 0
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita edi1 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Mayo/2022 a las 18:07


Cita Hola, tengo varias columnas con números bastante largas (2000 filas) y quiero hacer una divisón matemática entre estas columnas pero sin tener que recorrer celda por celda ya que cuando lo hago el código demora mucho (alrededor de 10 minutos). Hay forma de hacerlo más rápido? Gracias a calculadora de iva


Este es mi código

&&&&For i = 2 To 11
&&&&
&&&&&&& moneda_indice = Sheets("Series").Cells(1, i).Value
&&&&&&& If Moneda = "CLP" Then
&&&&&&&&&&&&If moneda_indice = "US$" Then
&&&&&&&&&&&&&& For j = 5 To Range("A" & Rows.Count).End(xlUp).Row
&&&&&&&&&&&&&&&&&&&&Sheets("Series").Cells(j, i) = Sheets("Series").Cells(j, i) * Sheets("Series").Cells(j, 11)
&&&&&&&&&&&&&& Next
&&&&&&&&&&&&End If
&&&&&&&
&&&&&&& ElseIf Moneda = "USD" Then
&&&&&&&&&&&&If moneda_indice = "$" Then
&&&&&&&&&&&&&& For j = 5 To Range("A" & Rows.Count).End(xlUp).Row
&&&&&&&&&&&&&&&&&&&&Sheets("Series").Cells(j, i) = Sheets("Series").Cells(j, i) / Sheets("Series").Cells(j, 11)
&&&&&&&&&&&&&& Next
&&&&&&&&&&&&End If
&&&&&&& End If
&&&&Next


Hola compañero,


Has probado ha debugear la función, lo puedes hacer muy facil:

1. Haces clic con el botón derecho en la macro en el panel de navegación y luego haga clic en Vista de diseño.

2. En la pestaña Diseño, en el grupo Herramientas, haaces clic en paso único.

3. Haga clic en Ejecutar y ejecutas linea a linea
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable