/ / Excel IF-Anweisung mit Zellbereich - Excel, Excel-Vba, Vba

Excel IF-Anweisung mit Zellbereich - Excel, Excel-VBA, VBA

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

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