Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeichenausgabe aus String mit bestimmter Position
#1
Question 
Hallo zusammen,

mal eine kurze Frage: Ich möchte aus einem bestehenden String einzelne Zeichen (evtl. mit direkt anschließendem Zeichen ohne Leerschrittseparierung) auslesen, bei der ich die Position bereits kenne, hier ein konkretes Beispiel:

Bekannter String in einer Zelle: "E F# G A B C D#"

Bekannte Position der Zeichen in einer andere Zelle: 1,7

Gewünschte Ausgabe in neuer Zelle: E, D#

Hat das jemand eine Idee, wie ich das konkret umsetzen könnte?

Auf die Schnelle habe ich mal die Funktionen SUCHEN, FINDEN & TEIL probiert aber bin leider nicht ans gewünschte Ergebnis gekommen.

Vielleicht hat einer von euch ja eine Idee Smile
Antworten Top
#2
Jim,

ein erster Wurf.
 ABCDEFG
1E F# G A B C D#1#WERT!E$F# G A B C D#02E
2 7E F# G A B C$D#E F# G A B C D#$1316D#

ZelleFormel
C1=WECHSELN(A$1&" ";" ";"$";B1-1)
D1=WECHSELN(A$1&" ";" ";"$";B1)
E1=WENNFEHLER(SUCHEN("$";C1);0)
F1=SUCHEN("$";D1)
G1=TEIL(A$1;E1+1;F1-E1-1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • Jim90
Antworten Top
#3
Hallo

ja, probier mal:   =TEIL(A4;1;1) & ", " &TEIL(A6;8;2)   =  E, D#
Formelaufbau:    = TEIL(Text; Erstes_Zeichen; Anzahl_Zeichen)

mfg  Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Jim90
Antworten Top
#4
Wenn jeder Buchstabe nur ein mal vorkommt.
 ABCDEF
1E F# G A B C D#E F G A B C D1E E
2  7D#D#

ZelleFormel
B1=WECHSELN(Tabelle1!A1;"#";"")
D1=TEIL(B$1;C1*2-1;1)
E1=WENN(ISTZAHL(SUCHEN(D1&"#";A$1));"#";"")
F1=D1&E1
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • Jim90
Antworten Top
#5
Hallo Jim,

eine Variante mit einer UDF:

ABC
2E F# G A B C D#1,7E, D#
Formeln der Tabelle
ZelleFormel
C2=ZweiAusText(A2;B2)

' **************************************************************
'  Modul:  Modul1  Typ = Allgemeines Modul
' **************************************************************


Option Explicit

Function ZweiAusText(rngText As Range, rngPositionen As Range)
 Dim varS As Variant
 Dim varP As Variant
 varS = Split(rngText.Value, " ")
 varP = Split(rngPositionen.Value, ",")
 ZweiAusText = varS(varP(0) - 1) & ", " & varS(varP(1) - 1)
End Function

Code eingefügt mit: Excel Code Jeanie


Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Jim90
Antworten Top
#6
Hi,

1. wieso eigentlich "E, D#"? Das D steht an Position 8
2. wo kommt der # her? Wenn ich nur ein Zeichen separiere, dann nur das D

Dann würde nämlich das reichen:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABC
1E F# G A B C D#1E, C
2 7 

ZelleFormel
C1=TEIL(WECHSELN(A1;" ";"");B1;1)&", "&TEIL(WECHSELN(A1;" ";"");B2;1)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Jim90
Antworten Top
#7
A1: E F #G A B C D#
B1: 2,7,4
Wunschergebnis: F D# A

1) ohne Hilfsspalten:

a) Google Spreadsheet (völlig kostenlos; dort wird ARRAYFORMULA statt {} verwendet):

=ARRAYFORMULA(
TEXTJOIN(" ";;
TRIM(MID(SUBSTITUTE($A1;" ";REPT(" ";99));
TRIM(MID(SUBSTITUTE($B1;",";REPT(" ";99));ROW(INDIRECT("1:"&LEN($B1)-LEN(SUBSTITUTE($B1;",";))+1))
*99-98;99))
*99-98;99)))
)


b) xl2016+ und evtl. xl365 (mit Nr. 5):

{
=TEXTVERKETTEN(" ";;
GLÄTTEN(TEIL(WECHSELN($A1;" ";WIEDERHOLEN(" ";99));
GLÄTTEN(TEIL(WECHSELN($B1;",";WIEDERHOLEN(" ";99));ZEILE(INDIREKT("1:"&LÄNGE($B1)-LÄNGE(WECHSELN($B1;",";))+1))
*99-98;99))
*99-98;99)))

}

2) mit Hilfsspalten (für Excel Online bzw. Excel 2007+): ebenfalls in der Datei (wo man auch mit der o.g. Formel spielen kann) genannt.

Meine (aus 2012) darin enthaltene universelle Stringaufteilungsformel kann man hier verstehen.
[-] Folgende(r) 1 Nutzer sagt Danke an lupo1 für diesen Beitrag:
  • Jim90
Antworten Top
#8
Moin zusammen und wow! Ich bin echt überrascht, wie viel Hilfe man hier in dem Forum bekommt! Smile

1000 Dank an alle, die sich für mich den Kopf zerbrochen haben!

Ich habe jetzt mal alle Ansätze durchprobiert und finde die von Lupo1 am elegantesten da ohne Hilfsspalten und die UDF Lösung finde ich auch super aber da meine VB Kenntnisse doch ziemlich bescheiden sind, bleib ich bei der Lösung von Lupo1.

Ich wünsche euch allen ein tolles Wochenende! Smile
Antworten Top
#9
Hier noch eine "günstige" Lösung auch für alte Excels (getestet mit 2000 und 2010), mittels {=MEHRFACHOPERATION()}:

Code:
Sub TEXTVERKETTENmitUraltExcel(): Workbooks.Add xlWorksheet
'http://www.clever-excel-forum.de/Thread-Zeichenausgabe-aus-String-mit-bestimmter-Position
[A1].FormulaR1C1 = "E F #G A B C D#": [A2].FormulaR1C1 = "'2,7,4"
[A3:A12].FormulaR1C1 = "=IF(ROW(R[-2]C)>LEN(R2C)-LEN(SUBSTITUTE(R2C,"","",))+1,""""," & _
"TRIM(MID(SUBSTITUTE(R1C,"" "",REPT("" "",99)),MID(SUBSTITUTE(R2C,"",""," & _
"REPT("" "",99)),ROW(R[-2]C)*99-98,99)*99-98,99)))"
[A13].FormulaR1C1 = "=TRIM(R[-10]C&"" ""&R[-9]C&"" ""&R[-8]C&"" ""&R[-7]C&"" ""&" & _
"R[-6]C&"" ""&R[-5]C&"" ""&R[-4]C&"" ""&R[-3]C&"" ""&R[-2]C&"" ""&R[-1]C)"
[D1:F1].FormulaR1C1 = "=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXT(RAND()*88888889+11111111," & _
"""0\,0\,0\,0\,0\,0\,0\,0"")&"", "",""9,"",),""0,"",),"", "",)"
r = "SUBSTITUTE(ADDRESS(1,RAND()*256+1,4),1,)": q = r & "&"" ""&"
[C2:C9].FormulaR1C1 = "=" & q & q & q & q & q & q & q & r
[C1:F9] = [C1:F9].Value 'Mehrfachoperation mag aktive Zufallszahlformeln nicht!
[C:F].ColumnWidth = 26: [C1].FormulaR1C1 = "=R[12]C[-2]"
[C1:F9].Table RowInput:=Range("A2"), ColumnInput:=Range("A1")
End Sub

__|_______A_______|B|_____________C____________|___________D___________|__________E_________|__________F__________|CODETab von lupo1
 1|E F #G A B C D#| |F D# A                    |3,2,2,6,2,2            |1,4,4,2,1,1         |2,3,8,6,3,5          |
 2|2,7,4          | |AIS US WJ QP ZW ABW ABL EP|WJ US US ABW US US     |AIS QP QP US AIS AIS|US WJ EP ABW WJ ZW   |
 3|F              | |WK AD BB WR AK FC DS ZJ   |BB AD AD FC AD AD      |WK WR WR AD WK WK   |AD BB ZJ FC BB AK    |
 4|D#             | |GU WF BU VN FU Q NY TD    |BU WF WF Q WF WF       |GU VN VN WF GU GU   |WF BU TD Q BU FU     |
 5|A              | |XG VB DB AIV EF TU IC IR  |DB VB VB TU VB VB      |XG AIV AIV VB XG XG |VB DB IR TU DB EF    |
 6|               | |AF QT ADJ RM JD TT ABM FZ |ADJ QT QT TT QT QT     |AF RM RM QT AF AF   |QT ADJ FZ TT ADJ JD  |
 7|               | |SW VH HU MU EW AKL OV ADR |HU VH VH AKL VH VH     |SW MU MU VH SW SW   |VH HU ADR AKL HU EW  |
 8|               | |HG CM AAL AKO LH DI UJ AFK|AAL CM CM DI CM CM     |HG AKO AKO CM HG HG |CM AAL AFK DI AAL LH |
 9|               | |MY AJG AFZ YQ GI AKC EJ XQ|AFZ AJG AJG AKC AJG AJG|MY YQ YQ AJG MY MY  |AJG AFZ XQ AKC AFZ GI|
10|               | |                          |                       |                    |                     |
11|               | |                          |                       |                    |                     |
12|               | |                          |                       |                    |                     |
13|F D# A         | |                          |                       |                    |                     |

Die Mehrfachoperation findet in C1:F9 statt. Aus den Strings in der Vorspalte C werden nach Anweisung in Zeile 1 die Bestandteile im Feld D2:F9 zusammengesetzt. Zuerst dachte ich, Excel sei damit überfordert, aber dann fand ich heraus, dass man die ZUFALLSZAHL()-Berechnungen nicht als Parameter-Einsteuerung für MEHRFACHOPERATION verwenden darf (fangen nämlich derweil erneut an zu rechnen). Deshalb .Value = .Value!
Antworten Top
#10
Code:
Function F_snb(c00, c01)
   sn = Split(c00)
   
   For Each it In Split(c01, ",")
      F_snb = F_snb & Left(sn(-1 + it) & Space(2), 2)
   Next
End Function


in A1:     E F #G A B C D#
In A2:    2,7,4
In B1:    =F_snb(A1;A2)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste