Ich habe eine Auswahl FLrange
welche hat zellen C3:E10
. Ich möchte den Wert in jeder Zelle überprüfen und wenn es Null ist, muss die Formel ausgeführt werden SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)
(Dies ist die Formel in Zelle C3 und andere Zelle hat relative Formeln.)
dh,
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)
usw....
Hinweis: Wenn Sie oben feststellen,
In jeder Zeile ändert es sich am Ende der Formel wie C $ 2, D $ 2, E $ 2 In jeder Spalte ändert sich der Wert roh! $ A: $ A, $ A3, roh! $ A: $ A, $ A4, roh! $ A: $ A, $ A5 usw
Ich habe es mit folgender Formel versucht
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
Es wird jedoch in allen Zellen dieselbe Formel geladen. Wie kann ich sie in eine relative ändern?
Antworten:
0 für die Antwort № 1Das R1C1
Range-Format bietet sich dafür an.
Anstelle deiner
cell.Formula = "SUMIFS(raw!$D:$D,raw!$A:$A,$A3,raw!$C:$C,C$2)"
benutzen
cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
Beachten Sie das Hinzufügen von a =
im = "=SUMIFS ...
Es ist notwendig, es als Formel einzugeben
0 für die Antwort № 2
Wenn ich es richtig verstanden habe, möchte ich, dass ein Makro die Formale wie oben auffüllt. Das Makro könnte wie folgt aussehen:
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
Es könnte jedoch eine elegantere Lösung sein!