Macro en excel para multiplicar por -1, y que sea dinámica

Tengo la siguiente hoja de excel y lo que quiero hacer es lo siguiente:

Si en la columna A el valor es "EXP", entonces tiene que multiplicar el valor por (-1) y si no es un EXP entonces que deje el valor que tenia.

La cosa es que el rango es dinámico, ya que, puede tener más de 12 filas y puede tener más de 12 meses.

Lo único que se me ha ocurrido es colocar un -1 en algún lugar escondido y hacer la multiplicación pero esto no me sirve.

Tengo también el siguiente código

Sub multiplicar()
'
'[Por Adriel Ortiz
'
For i = 4 To Range("A" & Rows.Count).End(xlUp).Row
    For j = 2 To Cells(4, Columns.Count).End(xlToLeft).Column
        If Cells(i, "A") = "EXP" Then
          Cells(i, j) = Cells(i, j) * -1
        End If
    Next j
Next i
End Sub

La cosa es que siempre va a comenzar en la fila 4, pero no siempre va a comenzar en la columna B4, puede comenzar por ejemplo en E4 o Z4.¿Hay alguna forma de hacerlo dinámico?

Respuesta
1

.04.05.17

Buenas tardes, Monserrat

Parece que este sitio estuvo caído por un tiempo pues no dejaba salir las respuestas.

Entendiendo que la columna donde esté tu tabla puede variar, la siguiente rutina funciona seleccionando primero la celda donde inician los ACCTYPE y disparando la macro desde allí. Luego el procedimiento se encargará de revisar hasta la última fila y multiplicará las cantidades por el factor que le indiques (-1) en todas las columnas que encuentre, independientemente de la cantidad que haya de ellas (filas y columnas)

Ya sabes: accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub PorFactor()
'---- Variables modificables ----
'=== MONSERRAT, modifica estos datos de acuerdo a tu proyecto:
Clave = "EXP" 'indica la expresion que indica si debe multiplicar los numeros por le factor indicado
ColANumero = 0 ' cantidad de columnas entre clave y el primer número a convertir
Factor = -1 'numero a multiplicar los valores cuando se cumpla la condición
'---- fin Variables
'
' VBA coding by FeJoAl
'
'---- inicio de rutina:
'
FilaAct = ActiveCell.Row
ColuAct = ActiveCell.Column
UltFila = ActiveSheet.Cells(Rows.Count, ColuAct).End(xlUp).Row
UltColu = ActiveSheet.Cells(FilaAct, Columns.Count).End(xlToLeft).Column
For LaFila = 0 To UltFila - FilaAct
    If ActiveCell.Offset(LaFila).Value = Clave Then
        For LaColu = 0 To UltColu - ColuAct - ColANumero
        If IsNumeric(ActiveCell.Offset(LaFila, LaColu + ColANumero)) And ActiveCell.Offset(LaFila, LaColu + ColANumero).Value <> 0 Then
            ActiveCell.Offset(LaFila, LaColu + ColANumero).Value = ActiveCell.Offset(LaFila, LaColu + ColANumero).Value * Factor
        End If
        Next
    End If
Next
End Sub

Como verás, al principio del código le indicas cual es la clave para que multiplique por el factor, que -también- podrás variar. Podría ser multiplicar por 1/100 para dividir por 100, o lo que necesites.

Como no sabía si los números estarán siempre en la primera columna después de los ACCTYPE, dejé una variable para que modifiques indicando cuántas columnas entre ellas existen.

Luego, seleccionas la primera celda con los códigos y disparas la rutina.

Hasta podrías asignarle un atajo a esta macro ("PorFactor") de forma tal que puedas utilizarla más fácilmente.

Para lo del atajo, haz:

 "Vista" | "Macros" (o con atajo: Alt + F8)

Selecciona allí (un sólo click sobre) la nueva macro ingresada y presiona el botón "Opciones". En la pantalla siguiente ingresa una letra a la que quieres asociar la macro. Por supuesto evita aquellas que ya están siendo utilizadas por MS Excel como atajo (v.g. Ctrl + C, Ctrl + X, etc)

Luego de aceptar, cuando presiones Ctrl más la letra indicada, la macro se ejecutará instantáneamente. Si fuese una letra que ya usa MS Excel, tendrás que presionar Ctrl + [Shift o tecla para Mayúsculas] + [Letra asignada]

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas