# Kennt sich jemand mit Excel aus? ("SUCHEN" nach mehreren Zeichen)



## ruyven_macaran (23. Juli 2013)

Moin.
Weiß jemand, wie man in der Funktion "Suchen" in Excel mehrere verschiedene Suchbegriffe verwenden kann?
Also so nach dem Motto "Finde '$' oder ']' ".

In OO kann man sowas mit regulären Ausdrücken regeln (wenn sie denn aktiviert sind...) und über Makros geht es auch, aber diese Datei soll für jeden xbeliebigen "ich kann .xls öffnen"-DAU verwendbar sein. Sie muss also ohne Makros(=Sicherheitswarnung) und ohne Einstellungsänderungen in allen (angeblich...) .xls-unterstützenden Programmen funktionieren.


Alternativ würde mir auch eine Lösung weiterhelfen, wie man den Namen eines Sheets per Formel ermittelt. Für die Tabellennummer gibt es X Lösungen, aber da die Seiten hier mit Monaten benannt werden, erlaubt das keine Zugriffe. Im Moment arbeite ich mit Zelle("Filenam"), was mir den kompletten Dateipfad einschließlich dem Tabellenblatt ausgibt. Aber genau das ist eben eine Funktion, die in MSO und OO unterschiedlich behandelt wird: Excel gibt ...[_Dateiname_.xls*]*_sheetname_ zurück, während OO ...._Dateiname_.xls*#$*_sheetname_ verwendet. Um den Namen des Sheets zu extrahieren muss ich also einmal ab "]" und einmal ab "$" zugreifen.

Die einzige Notlösung, die mir bislang eingefallen ist, wäre es, beide Varianten zu hinterlegen und mit WENN und ISTFEHLER zwischen beiden zu wechseln. Aber die längste Formel hat so schon 188 Zeichen und das Limit liegt iirc bei 256. Ich müsste also auch noch anfangen, mit multiplen Zellen zu arbeiten, was entweder zu einem grottigen Layout führt, oder dazu, dass irgend ein DAU sich Notizen in eine Zelle mit einer weiß-auf-weiß geschriebenen Hilfsformel macht


----------



## Low (23. Juli 2013)

Meinst du jetzt das Suchen per STRG+F oder das Suchen über eine Funktion?


----------



## ruyven_macaran (23. Juli 2013)

Ich meine die Funktion "Suchen".


----------



## Low (24. Juli 2013)

ruyven_macaran schrieb:


> Alternativ würde mir auch eine Lösung weiterhelfen, wie man den Namen eines Sheets per Formel ermittelt. Für die Tabellennummer gibt es X Lösungen, aber da die Seiten hier mit Monaten benannt werden, erlaubt das keine Zugriffe. Im Moment arbeite ich mit Zelle("Filenam"), was mir den kompletten Dateipfad einschließlich dem Tabellenblatt ausgibt. Aber genau das ist eben eine Funktion, die in MSO und OO unterschiedlich behandelt wird: Excel gibt ...[_Dateiname_.xls*]*_sheetname_ zurück, während OO ...._Dateiname_.xls*#$*_sheetname_ verwendet. Um den Namen des Sheets zu extrahieren muss ich also einmal ab "]" und einmal ab "$" zugreifen.


 
Also per VBA ist es möglichen


> Sub sheets()
> Dim i As Integer
> For i = 1 To ThisWorkbook.Sheets.Count
> MsgBox ThisWorkbook.Sheets(i).Name
> ...


----------



## ruyven_macaran (24. Juli 2013)

Jup - da gäbs noch einige Möglichkeiten mehr. Aber wie gesagt: Das ganze muss in eine Zelle passen, keine Makros


----------



## guss (29. Juli 2013)

ruyven_macaran schrieb:


> (...)Alternativ würde mir auch eine Lösung weiterhelfen, wie man den Namen eines Sheets per Formel ermittelt.(...)



Das kannst Du mit dieser Formel machen (Die Excel Datei muss aber bereits gespeichert sein.):

*=ERSETZEN(ZELLE("dateiname";A1);1;FINDEN("]";ZELLE("**dateiname";A1));"")*


----------



## ruyven_macaran (29. Juli 2013)

Eben nicht - bzw. ausschließlich in MS Excel. Wie im Eingangspost geschrieben wird ZELLE("Filenam") in unterschiedlichen Office unterschiedlich behandelt und in Open oder Libre Office hat man nunmal kein "]", nachdem man suchen könnte.


----------



## guss (29. Juli 2013)

Ah sorry, die Kompatibilität zu OO habe ich überlesen. Ich hatte die Funktion vor einigen Jahren mal gebraucht und die Excel Formel war noch im meiner Sammlung. Mit OO hatte ich beruflich noch nie zu tun. Keine Ahnung ob es da per Formel überhaupt möglich ist den Blattnamen auszulesen.


----------



## ruyven_macaran (29. Juli 2013)

Es genau mit der gleichen Formel möglich - nur OO verwendet eben andere Zeichen, um Datei- und Sheetname voneinander zu trennen.


----------



## ruyven_macaran (8. August 2013)

Habe das Problem jetzt übrigens zwar nicht gelöst, aber doch etwas eleganter umgangen, als mit einer kompletten Fehler-Kontrollabfrage:
Mit der Funktion WECHSELN das von Excel für die Abtrennung von Datei- und Sheetname verwendete "$" durch die "]" von Calc ersetzen (oder umgekehrt), und schon kann man in beiden Office-Suiten die gleiche Formel verwenden. Zumindest solange, wie niemand ein "$" bzw. "]" in Datei- oder Verzeichnisnamen verwendet. Aber diese Einschränkung hat man für eins von beiden Zeichen sowieso, jetzt halt für beide. Für Leute, die so eine Formel kopieren möchten, noch einmal die Komplettfassung:

Den Sheetnamen in MS Office erhält man mit:
=RECHTS(ZELLE("Filename";H1);LÄNGE(ZELLE("Filename";H1))-SUCHEN("]";(ZELLE("Filename";H1))))

Den Sheetnamen in OpenOffice erhält man mit:
=RECHTS(ZELLE("Filename";H1);LÄNGE(ZELLE("Filename";H1))-SUCHEN("$";(ZELLE("Filename";H1))))

Den Sheetnamen in beiden Office Suiten erhält man mit:
=RECHTS(ZELLE("Filename";H1);LÄNGE(ZELLE("Filename";H1))-SUCHEN("$";WECHSELN(ZELLE("Filename";H1);"]";"$")))

Da längere Formeln immer unübersichtlich sind, hier von vorne nach hinten erklärt:
Man nimmt den kompletten Pfad samt Datei- und Sheetnamen.
_ZELLE("Filename";H1)_
Dann ersetzt man darin alle "]" durch "$". "]" steht hierbei bei Anwendung der Formel _ZELLE("Filename";H1)_ in MS Excel unmittelbar vor Sheetnamen, in  OO Calc steht "$" an gleicher Stelle. Durch _Wechseln(*kompletterPfad*; "]"; "$") wird die eckige Klammer von Excel ebenfalls durch ein Dollar-Symbol ausgetauscht, man erhält mit
WECHSELN(ZELLE("Filename";H1);"]";"$"))
also in beiden Office Suiten eine Textzeile, die auf "...$sheetname" endet. In der sucht man dann mit
SUCHEN("$"; *besagte Textzeile*)
die Position des Dollarzeichens, und zieht diese von der Gesamtlänge der Textzeile
( LÄNGE(ZELLE("Filename";H1)) )
ab. Das Ergebnis ist die Länge des Sheetnamens selbst und da der immer ganz hinten steht, kann man ihn mit Rechts(*kompletter Pfad* ; *Länge des Sheetnamen* )
extrahieren._


----------

