AW: Verkettungsfunktion über Kriterium
17.03.2016 17:28:53
Michael
Hallo Jens,
ich habe zwei Änderungen an Deiner Datei vorgenommen:
a) Tabelle 2 umsortiert, damit die Spaltenbuchstaben mit SVerweis verfügbar gemacht werden und
b) eine Function Kette3 angelegt, die als Parameter die beiden Spaltenbuchstaben "frißt":
Function Kette3(SpLi As String, SpRe As String, Ketten As Range)
Dim Zelle As Range
Dim T(1 To 2) As String
Dim i As Long
'Application.Volatile
T(1) = SpLi: T(2) = SpRe
For i = 1 To 2
Select Case T(i)
Case "leer"
Kette3 = Kette3 & " "
Case ""
Kette3 = Kette3 & ""
Case Else
If T(i) Like "[A-Z]" Or T(i) Like "[A-Z][A-Z]" Then
Kette3 = Kette3 & Ketten.Worksheet.Cells(Ketten.Row, T(i)).Text
Else
Kette3 = Kette3 & T(i)
End If
End Select
Next
End Function
Aufgerufen dann in Zeile 5 etwa mit:
=Kette3(SVERWEIS(E5;Tabelle2!$D$1:$F$5;2);SVERWEIS(E5;Tabelle2!$D$1:$F$5;3);A5:P5)
Das funktioniert solange gut, wie die beiden Spaltenbuchstaben nebeneinander liegen (das tun sie ja in allen Beispielen). Hier eingesetzt in Zeile 5...
Eigentlich wäre es noch viel einfacher, nur EINE Angabe zu verwenden, das skizziere ich noch schnell:
Function Kette4(Spalten As String, Ketten As Range)
Dim Zelle As Range
Dim T As Variant
Dim i As Long
'Application.Volatile
T = Split(Spalten, ",")
For i = LBound(T) To UBound(T)
Select Case T(i)
Case "leer"
Kette4 = Kette4 & " "
Case ""
Kette4 = Kette4 & ""
Case Else
If T(i) Like "[A-Z]" Or T(i) Like "[A-Z][A-Z]" Then
Kette4 = Kette4 & Ketten.Worksheet.Cells(Ketten.Row, T(i)).Text
Else
Kette4 = Kette4 & T(i)
End If
End Select
Next
End Function
Aufruf mit =Kette4(SVERWEIS(E6;Tabelle2!$H$1:$I$5;2);A6:P6)
Im Beispiel (Zeile 6) steht "Vorgabe 3" und SVerweis gibt den String "K,F,D" zurück - so kannst Du beliebig viele Spalten verwenden. Ein "von-bis" könnte man auch programmieren, aber das scheint ja erst mal nicht gefragt zu sein.
Die Datei: https://www.herber.de/bbs/user/104427.xlsm
Ach, ob das app.volatile sein muß... ich hab's auskommentiert.
Schöne Grüße,
Michael