Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: el método .ConvertFormula

Hablaremos hoy de los estilos de referencia A1 y F1C1 / R1C1 en Excel... pero desde la perspectiva de nuestras macros.

Expondré hoy el método .ConvertFormula que con sus sintaxis:
.ConvertFormula(Formula, FromReferenceStyle, ToReferenceStyle, ToAbsolute, RelativeTo)
que nos permitirá convertir las referencias de celda en una fórmula entre los estilos de referencia A1 y F1C1/R1C1, y entre referencias relativas y absolutas, o ambas...


Veamos el siguiente ejemplo:



Se observa como en el rango B7:D8 aparecen nuestras fórmulas SUMA y PROMEDIO en forma relativa:
=SUMA(B3:B6)
=PROMEDIO(B3:B6)


Aplicando el método .ConvertFormula a ese rango B7:D8 veremos el aspecto que tendrían dichas fórmulas cambiando a un estilo de referencia R1C1 y en modo absoluto.

Abrimos la ventana de código de nuestro módulo estándar y añadimos el siguiente código:

Sub ConvirtiendoEstilosReferencia()
Dim celda As Range
Dim TextoFormula As String, NuevaFormula As String

For Each celda In Range("B7:D8")
If celda.HasFormula = True Then
TextoFormula = celda.FormulaLocal
'Sintaxis método:
'.ConvertFormula(Formula, FromReferenceStyle, ToReferenceStyle, ToAbsolute, RelativeTo)
'Convierte las referencias de celda en una fórmula entre los estilos de referencia A1 y F1C1,
'entre referencias relativas y absolutas, o ambos.

'Al aplicar el método, en este ejemplo, convertimos a referencia R1C1 y en tipo Absoluta
NuevaFormula = Application.ConvertFormula(TextoFormula, _
fromReferenceStyle:=xlA1, _
toReferenceStyle:=xlR1C1, _
ToAbsolute:=xlAbsolute)
'mostramos la fórmula en estilo R1C1 cambiado
MsgBox NuevaFormula
End If
Next celda
End Sub


Al ejecutar nuestra macro vemos una ventana para cada celda del rango y cómo ha sido convertida:


Por ejemplo:
=SUMA(B3:B6) queda convertido a =SUMA(R3C2:R6C2)
y
=PROMEDIO(B3:B6) queda convertido a =PROMEDIO(R3C2:R6C2)


Otro ejemplo consiste en aplicar un cambio previo, desde nuestra macro, del estilo de referencia empleado (A1 o F1C1 / R1C1).
Abrimos nuestra ventana de código de nuestro módulo estándar y añadimos el siguiente código:

Sub Convirtiendo2()
Dim TxtFormula As String
Dim originalReferenceStyle
'Para aplicar un estilo u otro de referencia...
'Application.ReferenceStyle = xlA1 'xlR1C1 'xlA1

'guardamos el estilo de referencia definido (A1 o R1C1)
EstiloReferencia = Application.ReferenceStyle

TxtFormula = "=SUM(R2C2:R6C4)"
MsgBox Application.ConvertFormula( _
Formula:=TxtFormula, _
fromReferenceStyle:=xlR1C1, _
toReferenceStyle:=xlA1, _
ToAbsolute:=xlRelative)

'retornarmos el estilo predefinido
Application.ReferenceStyle = EstiloReferencia
End Sub


Con este ejemplo vemos como empleamos el cambio de estilo:
Application.ReferenceStyle = xlA1
o con
Application.ReferenceStyle = xlR1C1

o como recuperamos el existente asociándolo a una variable:
EstiloReferencia = Application.ReferenceStyle

En el ejemplo pasamos una fórmula escrita en forma R1C1 y modo absoluto:
"=SUM(R2C2:R6C4)"
a estilo A1 en modo relativo!.



This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: el método .ConvertFormula

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×