Hallo Helmut,
das Problem ist folgendes: Ich möchte pro Zeile aus einigen bestimmten Spalten, die Zelle nach Spalte B kopieren, die nicht leer ist.
Die Spaltenzahlen, in denen der Wert gesucht werden soll, sind in globalen Variablen abgespeichert.
In der vorigen Variante waren die Spalten, in denen sich der Wert befinden kann, fix. Nun habe ich in Spalte B alle in Frage kommenden Spalten addiert, da nur eine Spalte einen Wert enthalten kann, brauchte ich nicht jede Spalte überprüfen.
Range("B2").Select
ActiveCell.FormulaR1C1 = "=RC[1]+RC[3]+RC[13]+RC[16]+RC[18]+RC[20]+RC[22]+RC[29]+RC[31]+RC[37]+RC38"
Selection.AutoFill Destination:=Range("B2:B" & lDataRows), Type:=xlFillDefault
Hier ist ausgehend von Spalte B Spalte C (RC[1]), Spalte E (RC[3]), Spalte M (RC[13]) etc addiert worden, da alle Spalten bis auf eine leer sind, wird somit der gesuchte Wert nach B kopiert.
In der aktuellen Variante können sich die Spalten ändern, in denen der zu kopierende Wert steht. Die Spaltenzahlen sind in globalen Variablen gespeichert, wenn sie den Wert -1 enthält, ist die entsprechende Spalte nicht relevant, oder aber sie enthält den Wert einer Spaltenzahl. Für jede mögliche Spalte gibt es eine globale Variable.
Meine Frage war nun, ob man die Methode .FormulaR1C1 auch hier auf Spalte B anwenden kann, wenn man einen String enstsprechend der Werte der globalen Variablen baut; also nicht so:
ActiveCell.FormulaR1C1 = "=RC[1]+RC[3]+RC[13]+RC[16]+RC[18]+RC[20]+RC[22]+RC[29]+RC[31]+RC[37]+RC38"
sondern so:
ActiveCell.FormulaR1C1 = sFormel,
wobei hier der String sFormel noch zusammengebaut werden müsste:
(Hier im Text giVar1 etc. als globale Variablen)
Dim sFormel As String
sFormel = "=RC["
If giVar1 <> -1 Then
sFormel = sFormel & giVar1 & "]+RC["
ElseIf giVar2 <> -1 Then
sFormel = sFormel & giVar2 & "]+RC["
ElseIf giVar3 <> -1 Then
sFormel = sFormel & giVar3 & "]"
End If
Ich hoffe, ich habe das Problem einigermassen verständlich beschrieben.
Danke und Gruß
Erne