Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

String aus einer Zahlenreihe generieren

String aus einer Zahlenreihe generieren
10.04.2017 19:24:23
Erwin
Hallo Excelfreunde,
bin auf der Suche nach einer benutzerdefinierten Funktion
"Ergbnis(S,E)", die aus der Zahlenreihe 2,3,4,5,6,7,1
als Ergebnis ein String ergibt, s. Datei:
https://www.herber.de/bbs/user/112787.xlsx
Danke
Gruß Erwin

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String aus einer Zahlenreihe generieren
10.04.2017 21:32:17
onur
Public Function Ergebnis2(ByVal s As Integer, ByVal e As Integer) As String Dim a, b As String Dim v, e2 As Integer If s > e Then e2 = 7 a = "1234567123456" For v = s - 1 To e - 1 + e2 If v s - 1 Then Ergebnis2 = Ergebnis2 + "," Ergebnis2 = Ergebnis2 + Mid(a, v + 1, 1) Next v End Function
Ergebnis als Name ist nicht zulässig (da schon von Excel belegt), deswegen Ergebnis2.
AW: String aus einer Zahlenreihe generieren
10.04.2017 22:23:12
Erwin
danke, bin zwischenzeitlich auf diese Lösung gekommen:
Function Ergebnis2(ByVal S As String, ByVal E As String) As String
Dim GBlock As String
Dim Block As String
GBlock = "S1,2,3,4,5,6,7S2,3,4,5,6,7,1S3,4,5,6,7,1,2S4,5,6,7,1,2,3S5,6,7,1,2,3,4S6,7,1,2,3, _
4,5S7,1,2,3,4,5,6"
Block = Mid(GBlock, InStr(1, GBlock, "S" & S) + 1, 13)
Ergebnis2 = Mid(Block, 1, InStr(1, Block, E))
End Function

Anzeige
AW: String aus einer Zahlenreihe generieren
10.04.2017 23:10:23
fcs
Hallo Erwin,
hier ein Vorschlag mit Function und Standardformeln.
Tabelle1

 ABCDEFGHIJKLMNO
1         mit Functionohne Hilsspaltenmit HilfspaltenHilfs-Werte 
2Beispiel2345671ErgebnisErgebnisErgebnisErgebnisPos-SPos-E2,3,4,5,6,7,1,
31 S   E "3,4,5,6,7""3,4,5,6,7""3,4,5,6,7""3,4,5,6,7"412 

Formeln der Tabelle
ZelleFormel
O2=VERKETTEN($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;",")
J3=fncTextSpezial($B$2:$H$2;B3:H3)
K3="""" & WENN(VERGLEICH("*E*";$B3:$H3;"0")>=VERGLEICH("*S*";$B3:$H3;"0"); TEIL(VERKETTEN($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;","); VERGLEICH("*S*";$B3:$H3;"0")*2-1;(VERGLEICH("*E*";$B3:$H3;"0")-VERGLEICH("*S*";$B3:$H3;"0"))*2+1); TEIL(VERKETTEN($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;","); VERGLEICH("*S*";$B3:$H3;"0")*2-1;LÄNGE(VERKETTEN($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;","))-VERGLEICH("*S*";$B3:$H3;"0")*2+2)&LINKS(VERKETTEN($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;","); VERGLEICH("*E*";$B3:$H3;"0")*2-1))& """"
L3="""" & WENN(N3>=M3;TEIL($O$2;M3-1;(N3-M3)+1); TEIL($O$2;M3-1;LÄNGE($O$2)-M3+2)&LINKS($O$2;N3-1))& """"
M3=VERGLEICH("*S*";$B3:$H3;"0")*2
N3=VERGLEICH("*E*";$B3:$H3;"0")*2


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
LG
Franz
Option Explicit
Public Function fncTextSpezial(rngWerte As Range, rngSuche As Range, _
Optional sStart As String = "S", Optional sEnde As String = "E") As String
Dim Ergebnis As String, Vergleich As String, Vergleich_SE As String
Dim PosS As Integer, PosE As Integer
Dim Spalte As Integer
On Error GoTo Fehler
For Spalte = 1 To rngWerte.Columns.Count
Vergleich = Vergleich & rngWerte.Cells(1, Spalte) & ","
Vergleich_SE = rngSuche.Cells(1, Spalte).Text
If InStr(1, Vergleich_SE, sStart) > 0 Then
PosS = Spalte * 2
End If
If InStr(1, Vergleich_SE, sEnde) > 0 Then
PosE = Spalte * 2
End If
Next
If PosE >= PosS Then
Ergebnis = """" & Mid(Vergleich, PosS - 1, PosE - PosS + 1) & """"
Else
Ergebnis = """" & Mid(Vergleich, PosS - 1)
Ergebnis = Ergebnis & Left(Vergleich, PosE - 1) & """"
End If
fncTextSpezial = Ergebnis
Exit Function
Fehler:
fncTextSpezial = "#!Fehler#"
End Function

Anzeige
String aus Zahlenreihe - Vergleich
11.04.2017 03:04:21
Luc:-?
Morrn, Folks;
habe mir erlaubt, die direkten bisherigen Ergebnisse miteinander und mit meiner Fml-UDF-Lösung zu vgln. Dabei wird sichtbar, dass die einfachen UDFs von onur und Erwin nicht über die Zeilen der BspTabelle gezogen wdn können. Das mag ggf auch nicht erfor­der­lich sein, wäre aber uni­ver­seller. Außerdem gehen beide UDFs, die somit nahezu gleich­wertig sind, von einer fixen Zahlen­folge aus, die der UDF nicht über­geben wdn kann. Das entspricht nicht dem Prinzip von Xl-Fktt! Dahin­gegen hat Franz (wie erwar­tet!) das alles be- und sogar noch an ggf andere Marken gedacht → so macht man das…! ;-)
Darüber hinaus bietet er auch noch 2 Standard-Fml-Lösungen an! Diese Mühe habe ich mir erspart, vor­nehm­lich, weil ich testen wollte, ob ich das mit uni­ver­sellen UDFs hin­bekomme. Und wie man sieht, hat das auch geklappt…
Wenn man nun Franz' Fml mit meiner vglt, sieht man auch, welche Text-Fktt in Xl noch dringend erfor­derlich wären, obwohl eine davon bereits in Xl-Folge­ver­sionen exis­tiert, aber weniger leis­tungs­fähig und nicht jedem zugäng­lich ist.
In der nfolgd Tabelle habe ich mir erlaubt, Erwins UDF umzubenennen (sonst Konflikt mit onurs) und Franz' UDF vom unnö­tigen UN-Vor­satz und den anschei­nend nicht benö­tigten "…" zu befreien. Letzteres habe ich natürlich auch mit Franz' Fml getan:
 ABCDEFGHIJKLMN
2
Beispiel2345671ErgebnisErgebnis2Ergebnis1TextSpezialStandardonurs/Erwins UDF1 S   E 3,4,5,6,73,4,5,6,73,4,5,6,73,4,5,6,73,4,5,6,7⇒Ergebnis2/1(C2;G2)2  E S  6,7,1,2,3,46,7,1,2,3,46,7,1,2,3,46,7,1,2,3,46,7,1,2,3,4⇒Ergebnis2/1(F2;D2)3SE     2,32,32,32,32,3⇒Ergebnis2/1(B2;C2)4   E  S1,2,3,4,51,2,3,4,51,2,3,4,51,2,3,4,51,2,3,4,5⇒Ergebnis2/1(H2;E2)5  SE    44444⇒Ergebnis2/1(D2;D2)6    ES  66666⇒Ergebnis2/1(F2;F2)7   ES  6,7,1,2,3,4,56,7,1,2,3,4,56,7,1,2,3,4,56,7,1,2,3,4,56,7,1,2,3,4,5⇒Ergebnis2/1(F2;E2)8   SE  5,65,65,65,65,6⇒Ergebnis2/1(E2;F2)I3[:I10]: =VJoin(Splint(GLÄTTEN(WIEDERHOLEN(" "&VJoin(B$2:H$2);2));;SPALTE(INDIREKT("ZS"&VERGLEICH("*S*";B3:H3;0);0));SPALTE(231)(INDIREKT("ZS"&VERGLEICH("*E*";B3:H3;0)+ANZAHL(B$2:H$2)*(VERGLEICH("*S*";B3:H3;0)>VERGLEICH("*E*";B3:H3;0));0)));",")M3[:M10]: =WENN(VERGLEICH("*E*";$B3:$H3;"0")≥VERGLEICH("*S*";$B3:$H3;"0"); TEIL(VERKETTEN($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2; ",";$H$2;","); VERGLEICH("*S*";$B3:$H3;"0")*2-1;(VERGLEICH("*E*";$B3:$H3;"0")-VERGLEICH("*S*";$B3:$H3;"0"))*2+1); TEIL(VERKETTEN ($B$2;",";$C$2;",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;","); VERGLEICH("*S*";$B3:$H3;"0")*2-1;LÄNGE(VERKETTEN($B$2;",";$C$2; ",";$D$2;",";$E$2;",";$F$2;",";$G$2;",";$H$2;","))-VERGLEICH("*S*";$B3:$H3;"0")*2+2)&LINKS(VERKETTEN($B$2;",";$C$2;",";$D$2;",";(588)$E$2;",";$F$2;",";$G$2;",";$H$2;","); VERGLEICH("*E*";$B3:$H3;"0")*2-1))L3[:L10]:=TextSpezial(B$2:H$2;B3:H3)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
VJoinhttps://www.herber.de/bbs/user/99024.xlsm (UDF in BspDatei enthalten)
Splinthttps://www.herber.de/forum/archiv/864to868/865813_Texte_per_VBA_in_einzelne_Teile_aufteilen.html#865877
Letztere habe ich anstelle der flexibleren VSplit gewählt, weil sie auch eine Aus­wahl­mög­lich­keit bietet, die sonst nur mühsam zu errei­chen wäre.
🙈 🙉 🙊 🐵 Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: String aus einer Zahlenreihe generieren
11.04.2017 17:47:37
Daniel
Hi
wenn die Texte für die Reihe aus den Zellen übernommen werden sollen, dann probiere mal diese
Funktion:
Function Folge(Texte As Range, Kennung As Range, Optional TrKz As String = ",") As String
Dim i As Long, j As Long
Dim VerkettenEin As Boolean
For j = 1 To Kennung.Cells.Count * 2
i = ((j - 1) Mod Kennung.Cells.Count) + 1
Select Case Kennung(i)
Case "SE", "ES"
Folge = Texte(i)
Exit Function
Case "S"
Folge = Texte(i)
VerkettenEin = True
Case "E"
If VerkettenEin Then
Folge = Folge & TrKz & Texte(i)
Exit Function
End If
Case Else
If VerkettenEin Then
Folge = Folge & TrKz & Texte(i)
End If
End Select
Next
End Function
die Formel in der Zelle I3 lautet dann:
=folge($B$2:$H$2;B3:H3,",")

Gruß Daniel
Anzeige

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige