Rango variable para una fórmula "sum"

Estoy desarrollando un programa para EXCEL. En su momento dominaba bastante el lenguaje MACRO y ahora estoy "migrando" a VISUAL. Mi problema es que en una instrucción, quiero que me cree una fórmula de suma tal como esta ...
ActiveCell.FormulaR1C1 = "=SUM(R[-16]C:R[-1]C)", pero quiero que el rango sea variable, de acuerdo a las celdas que quiera sumar, variables y contadores definidos, etc ... .
He probado mil formas de sintaxis para sustituir el -16 y -1 de los corchetes por contadores y valores de variables y no ha habido manera.
¿Me puedes ayudar?
Saludos y gracias,
Jorge
Zaragoza
España

1 Respuesta

Respuesta
2
La explicación sencilla seria...
strFormula = "=SUM(R[" & Format(intFila1) & "]C[" & Format(intCol1) & "]:R[" & Format(intFila2) & "]C[" & Format(intCol2) & "])"
ActiveCell.FormulaR1C1 = strFormula
En donde:
IntFila1 = Número de filas hacia arriba o hacia abajo
intCol1 = Número de columnas hacia la derecha o hacia la izquierda
infFila2 e intCol2 los mismo pero del otro extremo del rango a sumar
debes de tener cuidado de no hacer referencias circulares...
La explicación más larga, pero más efectiva seria...
Public Sub Sumas_Con_Variables()
'El secreto esta en construir de forma correcta la "cadena" de texto
'que le estas pasando a la propiedad FormulaR1C1
'R = Rows (Filas)
'C = Columns (Columnas)
'Despues entre corchetes el número de filas o columnas que quieras
'que haga referencia, tanto para arriba (negativo), abajo (positivo)
'izquierda (negativo), derecha (positivo)
'Primero un ejemplo con cada uno
'Sumando desde ocho filas arriba hasta una fila arriba de la celda activa
' ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
'Sumando desde una fila abajo hasta seis filas abajo de la celda activa
' ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[6]C)"
'Sumando desde dos columnas a la izquierda y hasta una columna a la
'izquierda de la celda activa
' ActiveCell.FormulaR1C1 = "=SUM(RC[-2]:RC[-1])"
'Sumando desde una columna a la derecha y hasta cuatro columnas a la
'izquierda de la celda activa
' ActiveCell.FormulaR1C1 = "=SUM(RC[1]:RC[4])"
'Sumando un rango combinado de de filas y columnas
' ActiveCell.FormulaR1C1 = "=SUM(R[-6]C[-1]:R[-2]C[1])"
'Ahora usaremos una cadena construida con variables, supongamos que tenemos
'los siguientes datos...
' | A | B | C |
' 1| 10 | 10 | 10 |
' 2| 10 | 10 | 10 |
' 3| 10 | 10 | 10 |
' 4| 10 | 10 | 10 |
' 5| 10 | 10 | 10 |
' 6| 10 | 10 | 10 |
' 7| 10 | 10 | 10 |
' 8| 10 | 10 | 10 |
' 9| 10 | 10 | 10 |
'10| 10 | 10 | 10 |
'11|
'12|=Suma(??????)
'La formula, en la celda A12 la introduciremos con codigo, el final
'siempre será el mismo en este ejemplo la celda C10, pero el usuario
'podra seleccionar desde que fila o columna quiere empezar,
'por supuesto el limite es C10
Dim strFormula As String
Dim intFila As Integer
Dim strCol As String
'Solicitamos el número de la fila, el InputBox siempre te regresa
'una cadena, con el Val convertimos a valor y con el Int lo
'convertimos a entero y con Abs lo ponemos en positivo
intFila = Abs(Int(Val(InputBox("Desde la fila?", "Número de fila", "1"))))
'Validamos que este dentro del rango permitido (1 al 10)
If intFila >= 1 And intFila <= 10 Then
intFila = (12 - intFila) * -1
Else
'Si el valor no esta dentro del rango, ponemos el predeterminado
'o sea desde la fila 1
intFila = -11
End If
'Solicitamos la columna
strCol = UCase(Trim(InputBox("Desde que columna?", "Columna", "A")))
Select Case strCol
Case "B"
strCol = "1"
Case "C"
strCol = "2"
Case Else
strCol = ""
End Select
strFormula = "=SUM(R[" & Format(intFila) & "]C[" & strCol & "]:R[-2]C[2])"
ActiveCell.FormulaR1C1 = strFormula
End Sub
Muchísimas gracias. Te informo de que en otros mail´s que había circulado por ahí, me habían dicho que tirara la tolla. Me gustaría conocer como has conseguido o que base documental tienes para saber TANTO ... . Lo dicho, muchísimas gracas y alguna vez más me temo que vas a ver mi nombre en tu e-mail. JORGE

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas