/ / Declaración de Excel IF con rango de celdas - excel, excel-vba, vba

Declaración de Excel IF con rango de celdas - excel, excel-vba, vba

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 № 1

los 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!