2017-07-05 5 views
0

Ich versuche, eine Formel statt filldown Schleife, weil ich zwei Formeln je nach der Länge des Textes in Zelle der Zelle A haben.Loop-Formel in Excel VBA

meine beiden Formeln sind wie

.Range("C2").Formula = "=CHAR(83)&CHAR(45)&LEFT(A2,LEN(A2)-9)&CHAR(45)&UPPER(MID(A2,4,LEN(A2)-8))&CHAR(32)&D2&E2"

.Range("C2").Formula = "=LEFT(A2,LEN(A2)-9)&CHAR(45)&UPPER(MID(A2,8,LEN(A2)-12))&CHAR(32)&D2&E2"

Dies ist, was ich bisher haben.

Sub AddFormulas() 
Application.ScreenUpdating = False 

Dim aCell As String 
Dim cCell As String 
Dim dCell As String 
Dim eCell As String 
Dim rowStart As Integer 
Dim aCol As Integer 
Dim cCol As Integer 
Dim dCol As Integer 
Dim eCol As Integer 
Dim LastRow As Long 
LastRow = Range("A" & Rows.Count).End(xlUp).Row 

rowStart = 2 
aCol = 1 
cCol = 3 
dCol = 4 
eCol = 5 
'Range("A2") 
aCell = Cells(rowStart, aCol).Address(RowAbsolute:=False, _ 
           ColumnAbsolute:=False) 
'Range("C2") 
aCell = Cells(rowStart, cCol).Address(RowAbsolute:=False, _ 
           ColumnAbsolute:=False) 
'Range("D2") 
dCell = Cells(rowStart, dCol).Address(RowAbsolute:=False, _ 
           ColumnAbsolute:=False) 
'Range("E2") 
eCell = Cells(rowStart, eCol).Address(RowAbsolute:=False, _ 
           ColumnAbsolute:=False) 

With ThisWorkbook.Sheets("Sheet1") 
     .Range(cCell).Formula = "=CHAR(83)&CHAR(45)&LEFT(aCell,LEN(aCell)-9)&CHAR(45)&UPPER(MID(aCell,4,LEN(aCell)-8))&CHAR(32)&(dCell)&(eCell)" 
End With 
Application.ScreenUpdating = True 
End Sub 

Thx

+0

Ersetzen Sie in der '.Formula'-Anweisung jede' aCell' durch '" & aCell & "'. Machen Sie das Gleiche für 'dCell' und' eCell'. –

+0

Und ändern Sie "aCell" zu "cCell" direkt unter Ihrem '' Bereich ("C2") 'Kommentar. – YowE3K

+0

re: * weil ich zwei Formeln habe, abhängig von der Länge des Textes in der Zelle von Zelle Zelle * - das ist was nicht vollständig beschrieben wurde. Sie sollten leicht in der Lage sein, eine Formel für alle zu verwenden. – Jeeped

Antwort

1

Sie haben nicht die Anzahl der Zeichen erklärt, die Formel zu bestimmen, verwenden Sie eine IF-Anweisung verwenden, um die Zeichenlänge einer Zelle mit LEN Dann können Sie Ihre Formel schreiben, um zu bestimmen mit nur einer Codezeile für den gesamten Bereich, da Excel intelligent genug ist, um nach Zeilen zu erhöhen. Hier ein Beispiel:

Range("B1:B" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "=IF(LEN(A1)=2,123,987)" 

Dies wird in Spalte B gesetzt 123, wo die entsprechende Zeile in der Spalte A eine Länge von 2 Zeichen sonst wird es 987.

Ändern der LEN(A1)=2 die Länge geben Trigger Ändern Sie 123 zur ersten Formel und ändern Sie 987 in die zweite Formel, die Sie möchten. Wenn Sie eine andere Zelle als Spalte A testen, ändern Sie diese auch im LEN Teil der Formel.

Schließlich, warum auf der Erde machen Sie das so komplex? Warum wird CHAR(83)&CHAR(45) anstelle von "S-" es schwieriger sein, zu warten, wenn Sie alles durch seinen ASCII-Code einfügen.