我有一个范围FLrange
,其中包含单元格C3:E10
。我想检查每个单元格中的值,如果它是零,则需要运行公式SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)
(这是单元格C3中的公式,其他单元格具有相对公式)
即,
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)
等...
注意:如果您注意到上述内容,
在每一行中,它会在公式结束时改变,如C $ 2,D $ 2,E $ 2 在每一栏中,它会改变原始!$ A:$ A,$ A3,原始!$ A:$ A,$ A4,原始!$ A:$ A,$ A5等
我尝试过以下公式
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
但是,它在所有单元格中加载相同的公式,如何将其更改为相对的
答案 0 :(得分:0)
R1C1
范围格式适用于此。
而不是你的
cell.Formula = "SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)"
使用
cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
请注意在=
中添加= "=SUMIFS ...
,必须将其作为公式输入
答案 1 :(得分:0)
如果我理解正确,你想要一个宏来填充上面的formalae。宏可以如下:
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
然而,这可能是一个更优雅的解决方案!