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

Forumthread: 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
Anzeige

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.
Anzeige
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

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige