2017-10-17 5 views
0

Ich versuche, Daten nur zu indizieren/übereinstimmen, wenn ein bestimmtes Kriterium erfüllt ist.Dynamische Referenzierung in VBA-Formel

Ich könnte dies mit zwei Arrays tun, aber ich hoffe, es gibt eine einfache Antwort hier.

Mein Code ist wie folgt:

Sub Nozeroleftbehind(lengthRow As Integer) 
For i = 2 To lengthRow 
    If Cells(1, i) = 0 Then Cells(1, i) = "TBD" 
Next i 

For i = 2 To lengthRow 
    If Cells(1, i) = "#N/A" Then 
     Cells(2, i) = "=INDEX(Forecast!L:L,MATCH('AA - Inbound Orders Weekly Rep'!H113,Forecast!A:A,0))" 
End if 
Next i 

    End Sub 

Und dann diese Unter zur Hauptroutine zurück passieren.

Was ich versuche, dynamisch zu werden, ist diese "H113" -Zelle. Ich kann nicht scheinen, einen Offset zu bekommen, um richtig zu arbeiten, da es bereits in einer Formel ist.

EDIT: Entschuldigung, H113 bewegt sich nach unten. Die nächste Zelle wäre H114.

Grüße

+0

Bitte klarstellen: Wie würde H113 aussehen, wenn die Schleife fortschreitet, wenn sie "dynamisch" wäre? I113, J113 oder H114, H115 ...? – Excelosaurus

+0

H114. Tut mir leid, dass ich das nicht eingeschlossen habe. –

Antwort

1

Bitte diesen Code versuchen.

Sub NoZeroLeftBehind(lengthRow As Integer) 
    ' 18 Oct 2017 

    Dim lengthRow As Long 
    Dim Tmp As Variant 
    Dim C As Long 

    lengthRow = 4 
    For C = 2 To lengthRow 
     ' bear in mind that the Cell is a Range 
     ' and you want to refer to its Value & Formula property 
     With Cells(1, C) 
      Tmp = .Value 
      ' using the Val() function will interpret a blank cell as zero value 
      If Val(Tmp) = 0 Then 
       .Value = "TBD" 
      ElseIf IsError(Tmp) Then 
       .Formula = "=INDEX(Forecast!L:L,MATCH('AA - Inbound Orders Weekly Rep'!H" & _ 
          (113 + C - 2) & ",Forecast!A:A,0))" 
      End If 
     End With 
    Next C 
End Sub 
+0

Vielen Dank! Musste es etwas ändern, aber anders als, es hat perfekt funktioniert! Sehr geschätzt. –

0

Zu wissen, dass Sie H113 gehen wollen, H114:

Cells(2, i) = "=INDEX(Forecast!L:L,MATCH('AA - Inbound Orders Weekly Rep'!H" & CStr(111 + i) & ",Forecast!A:A,0))"