Tengo un rango FLrange
que tiene celulas C3:E10
. Me gustaría verificar el valor en cada celda y si es cero, necesito ejecutar la fórmula SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)
(Esta es la fórmula en la celda C3, y otra celda tiene fórmulas relativas)
es decir,
C3: =SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)
D3: =SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,D$2)
E3: =SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,E$2)
C4: =SUMIFS(raw!$D:$D,raw!$A:$A,$A4,raw!$C:$C,C$2)
D5: =SUMIFS(raw!$D:$D,raw!$A:$A,$A4,raw!$C:$C,D$2)
etc ....
Nota: si nota arriba,
En cada fila, cambiará como, C $ 2, D $ 2, E $ 2 al final de la fórmula En cada columna, ¡cambiará en bruto! $ A: $ A, $ A3, crudo! $ A: $ A, $ A4, crudo! $ A: $ A, $ A5, etc.
He intentado con la siguiente fórmula
Sub Macro1()
Dim FLrange As Range
Set FLrange = Range("C3:E10")
For Each cell In FLrange
If cell.Value = 0 Then cell.Formula = "SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)"
Next cell
End Sub
Pero, está cargando la misma fórmula en todas las celdas, ¿Cómo puedo cambiarla a una relativa?
Respuestas
0 para la respuesta № 1los R1C1
El formato de rango se presta a esto.
En lugar de tu
cell.Formula = "SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)"
utilizar
cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
Tenga en cuenta la adición de un =
en = "=SUMIFS ...
, necassary para ingresarlo como fórmula
0 para la respuesta № 2
Si comprendo correctamente, desea que una macro rellene el formato como se mencionó anteriormente. La macro podría ser la siguiente:
Sub Macro1()
Dim FLrange As Range
Set FLrange = Range("C3:E10")
For Each cell In FLrange
If cell.Value = 0 Then
cell.Formula = "=SUMIFS(raw!$D:$D,raw!$A:$A,$A" & cell.Row & ",raw!$C:$C," _
& ConvertToLetter(cell.Column) & "$2)"
End If
Next cell
End Sub
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
¡Sin embargo, puede haber una solución más elegante!