2016-03-25 22 views
3

ich die Anwendung einer Formel: enter image description hereWie ändert man den Bereich innerhalb der Formel dynamisch?

textuelle Repräsentation der Formel:

=(SUBSTITUTE((LEFT(A2;(FIND("htt";A2;1))-3));";";";"))&RIGHT(A2;(LEN(A2)-(FIND("htt";A2;1))+3)) 

an alle Zellen in einem Bereich A2: A10, ein Ergebnis, das Schreiben auf einen Bereich B2: bzw. B10.

Um dies zu tun, verwende ich das folgende Makro:

Sub ColumnsFormat() 
    Dim s As String 
    Dim i As Integer, j As Integer 
    'Set wb = Workbooks("CSV_File.xlsm") 
    Application.ScreenUpdating = False 
    j = 1 

    For i = 2 To 10 
     s = "=(SUBSTITUTE((LEFT(R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],(FIND(""htt"",R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],1))-3)),"","","";""))&RIGHT(R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],(LEN(R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "])-(FIND(""htt"",R[" & Trim(Str(i)) & "]C[" & Trim(Str(j - 2)) & "],1))+3))" 
     Sheets("Sheet1").Cells(i, 2).Value = s 
    Next i 
End Sub 

Das Problem ist, dass eine Zeilennummer in der Formel aus irgendeinem Grunde in einem For Zyklus falsch ist. Anstatt A2 zu nehmen; A3; A4 ... A10-Zellen, (wobei die Zeilennummer jedesmal um 1 geändert wird), Makro läuft durch A2; A4; A6 usw. (Erhöhung der Zeilennummer um jeweils 2).

Was mache ich falsch?

Antwort

1

Durch Ändern der Zeile in der Formel auf 0 funktioniert der Code einwandfrei. Ich schätze, das Problem ist, dass in Ihrer Formel die Zeile relativ zu der spezifischen Zelle berechnet wurde, auf die die Formel anschließend angewendet wurde. Daher sah die Formel in B2 A (2 + 2), in B3 bei A (3 + 3) und so weiter.

Sub ColumnsFormat() 

Dim s As String 
Dim i As Integer, j As Integer 
'Set wb = Workbooks("CSV_File.xlsm") 
Application.ScreenUpdating = False 
j = 1 

For i = 2 To 10 
    s = "=(SUBSTITUTE((LEFT(R[" & 0 & "]C[" & j - 2 & "],(FIND(""htt"",R[" & 0 & "]C[" & Trim(Str(j - 2)) & "],1))-3)),"","","";""))&RIGHT(R[" & 0 & "]C[" & Trim(Str(j - 2)) & "],(LEN(R[" & 0 & "]C[" & Trim(Str(j - 2)) & "])-(FIND(""htt"",R[" & 0 & "]C[" & Trim(Str(j - 2)) & "],1))+3))" 
    Sheets("Sheet1").Cells(i, 2).Value = s 
Next i 

End Sub 
+0

ja, Sie haben Recht. Danke vielmals! – Ale

Verwandte Themen