Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1596to1600
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 12:16:34
Jürgen
Hallo zusammen und ein gutes Neues Jahr erstmals!
Doch das neue fängt mit Excel-Fragen an, so wie das alte geendet hat ;)
Vielleicht für einen alten Excel-Profi ein klacks, für mich leider ohne Erfolf geblieben.
Ich versuche folgendes:
Ich habe in Spalten verschiedene Textinhalte. In Abhängigkeit zu diesen soll nun die über die "WENN" Funktion in Spalte "G" was als Text eingetragen werden.
mein Beispiel:
1) wenn in E3 leer ist, dann soll in G3 nichts
2) wenn in I3 das Textfragment ".mp3" beinhaltet, dann soll in G3 "Play..."
3) wenn in E3 das Textfragment ".aup" beinhaltet, dann soll in G3
" "
Leider krieg ich das nur mit Fehlermeldungen gebacken. Ist das überhaupt möglich, dass die WENN Abfrage über mehre Spalten geht!?
Danke & Gruss,
Juergen

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 12:51:08
Werner
Hallo Jürgen,
meinst du hier
2) wenn in I3 das Textfragment ".mp3" beinhaltet, dann soll in G3 "Play..."
auch E3 und nicht I3 ?
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 13:12:47
Jürgen
Hallo Werner,
ja es soll einmal auch aus I3 ausgelesen werden.
Also über verschiedene Spalten. Wird nicht gehen, oder?
Danke & Gruss,
Juergen
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 13:26:27
Werner
Hallo Jürgen,
ist noch nicht eindeutig:
-wenn E3 leer, dann G3 leer (egal was in I3 steht)
-wenn E3 = .mp3 dann G3 = Play
-wenn I3 = .aup dann G3 = Dein Textstring
und was machen wir wenn in E3 .mp3 und in I3 = .aup vorhanden ist?
Gruß Werner
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 13:42:39
Jürgen
Hallo Werner,
das ist aufgrund der Datenstruktur ausgeschlossen.
Die betreffenden txt-Fragmente als Zellinhalte sind ausschliesslich in den benannten Spalten vorhanden. Das Szenario kann nicht vorkommen.
Danke & Gruss,
Juergen
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 13:56:37
Werner
Hallo Jürgen,
was ist mit dem Lösungsvorschlag von Sepp?
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 14:22:05
Jürgen
Hallo Werner,
das muss ich erste testen. Es ist immer recht umständlich und langwierig bis die CSV online eingelesen werden kann und um das Ergebnis letztendlich unter real Bedingungen in WordPress zu sehen. Aber das mache ich heute Abend noch.
btw: ich hab noch so ne Sache wo ich nicht weiterkomme, so darf ich noch ne "WENN" Geschichte in diesem Zusammenhang als neuen Fred aufmachen...bitte nicht wundern. Danke.
Danke & Gruss,
Juergen
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 14:33:08
Werner
Hallo Jürgen,
hier noch meine Version mit Zählenwenn
=WENN(E3"";WENN(ZÄHLENWENN(E3;"*.aup*");"
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 19:00:36
Jürgen
Hallo Werner,
es verblüfft mich immer wieder, was es da für tolle Wege über die Zellformeln gibt. Es muss anscheinend nicht immer VBA sein. Vielen Dank für deine Mühe, auch diese Formel geht einwandfrei wies scheint.
btw:
ich kopier ja immer die Zellformeln runter in der Spalte....so nach Gefühl. Meistens bis 10.000ste Zeile. Manchmal führt das zu Problemen. Gibts eigentlich eine Möglichkeit oder Anweisung, dass die Zellformel beim Tabellenfuß automatisch stoppt?
Danke & Gruss,
Juergen
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
02.01.2018 07:40:21
Werner
Hallo Jürgen,
du könntest ja die Formel per Makro in die Zellen schreiben. An welcher Spalte soll den die letzte belegte Zelle (Zeile) ermittelt werden, bis zu der die Formel dann rein soll?
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
02.01.2018 10:47:14
Jürgen
Hallo Werner,
ich habe jetzt in der "A" Spalte folgende Anweisung stehen:
=WENN(ISTZAHL(FINDEN(".aup";E2)); " "; WENN(ISTZAHL(FINDEN(".mp3";I2));" -";""))
Ich finde nun keinen logischen Ansatz, den letzten Zelleneintrag zu ermitteln. Eigentlich könnte man sagen, wenn kein ".mp3" oder".aup" mehr in der Zeile gefunden wird, dann ist das Tabellen-Ende erreicht. Da schlägt mir abber der Umstand dazwischen, dass es in der Tabelle Leerzeilen gibt. Diese würden dann quasi fälschlicherweise das Ende der Tabelle vorgaugeln.
Was meinst du?
Danke & Gruss,
Juergen
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
02.01.2018 11:44:54
Werner
Hallo Jürgen,
benutzt wird die letzte belegte Zelle (Zeile) in Spalte E oder I, je nachdem welche größer ist.
Ich hab dann noch mit drin, dass die Formeln durch ihre Werte ersetzt werden. Falls das nicht gewünscht/gebraucht wird, dann Codezeile löschen oder auskommentieren.
Public Sub bbb()
Dim loLetzte As Long, loLetzte1 As Long, loLetzte2 As Long
With Worksheets("Tabelle1") 'Blattname anpassen
loLetzte1 = .Cells(.Rows.Count, 5).End(xlUp).Row
loLetzte2 = .Cells(.Rows.Count, 9).End(xlUp).Row
loLetzte = WorksheetFunction.Max(loLetzte1, loLetzte2)
.Range(.Cells(2, 1), .Cells(loLetzte, 1)).FormulaLocal = _
"=WENN(ISTZAHL(FINDEN("".aup"";E2)); "" ""; WENN(ISTZAHL(FINDEN("".mp3"";I2));"" -"";""""))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(2, 1), .Cells(loLetzte, 1)).Value = _
.Range(.Cells(2, 1), .Cells(loLetzte, 1)).Value
End With
End Sub
Gruß Werner
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
02.01.2018 17:52:53
Jürgen
Hallo Werner,
das ist ja ein geiles Ding!! Genau das ist es, was ich suchte. Aber meine VBA Kenntnisse sind leider gegen null. Doch für copy + paste hats grad gereicht :) Toll, vielen Dank!!
Ich möchte ja nicht übermütig werden, aber weil das so super funktioniert noch ne Frage obendrauf:
Mein Tabellenblatt hat das gleiche Problem mit den zu kopierenden Zellformeln in weiteren Spalten, welche ich alle händisch immer runterkopieren muss. Könnte man auf das Makro noch weitere Aktionen draufhängen (verknüpfen)?
Hier wären meine Zellformeln aus Tabelle 1, welche alle incl. 3. Zeile beginnen sollen und bis ans Ende sich erstrecken sollen. Hier ein Download-Link, da leider irgendwas blockiert wenn ich es im Klartext schreib:
https://www.herber.de/bbs/user/118629.txt
Könnte man das so in einer makro-Ausführung wie von dir gestaltet alles unter einen Hut bringen!?
Das wäre ja genial!
Danke + Gruss,
Juergen
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
02.01.2018 19:47:15
Werner
Hallo Juergen,
dabei handelt es sich um das gleiche Blatt?
die Formeln müssen genau so weit rein kopiert werden wie für die Formel in Spalte A ?
sollen die Formeln stehen bleiben oder durch ihre Werte ersetzt werden ?
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
02.01.2018 21:13:04
Werner
Hallo Juergen,
da gäbe es noch weiteren Klärungsbedarf.
1. im Code den du bereits hast, wird die Formel in Spalte A ab Zelle A2. Die übrigen Formeln willst du jetzt am Zeile 3 haben. Ich hab das jetzt mal geändert, so dass auch die Formel in Spalte A ab Zeile 3 geschrieben wird.
2. im Code den du bereits hast, wird die letzte belegte Zeile anhand der Spalten E und I ermittelt, je nachdem welche weiter befüllt ist. Jetzt willst du aber in Spalte I eine Formel rein schreiben. Dort sind also zunächst mal wohl gar keine Daten vorhanden, so dass dort auch nicht die letzte belegte Zeile ermittelt werden kann. Du hast diverse Formeln, die sich auf die Spalte C beziehen. Ich ermittle die letzte belegte Zeile einfach in Spalte C. Ich hoffe das passt so, ansonsten müsstest du mir nochmal mitteilen, in welcher Spalte die letzte belegte Zeile ermittelt werden soll/kann.
Im Code werden jeweils die Formeln in die Spalten geschrieben und dann durch den jeweiligen Formelwert ersetzt.
Public Sub bbb()
Dim loLetzte As Long
With Worksheets("Tabelle1") 'Blattname anpassen
loLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range(.Cells(3, 1), .Cells(loLetzte, 1)).FormulaLocal = _
"=WENN(ISTZAHL(FINDEN("".aup"";E3)); "" ""; WENN(ISTZAHL(FINDEN("".mp3"";I3));"" -"";""""))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 1), .Cells(loLetzte, 1)).Value = _
.Range(.Cells(3, 1), .Cells(loLetzte, 1)).Value
'Formeln Spalte B
.Range(.Cells(3, 2), .Cells(loLetzte, 2)).FormulaLocal = _
"=WENN(ANZAHL(C3:D3)=2;--LINKS(F3;FINDEN(""_"";F3)-1);"""")"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 2), .Cells(loLetzte, 2)).Value = _
.Range(.Cells(3, 2), .Cells(loLetzte, 2)).Value
'Formeln Spalte G
.Range(.Cells(3, 7), .Cells(loLetzte, 7)).FormulaLocal = _
"=WENN(ISTZAHL(FINDEN("".aup"";E3));"" "";WENN(ISTZAHL(FINDEN("".mp3"";I3));""[Play…]"";""""))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 7), .Cells(loLetzte, 7)).Value = _
.Range(.Cells(3, 7), .Cells(loLetzte, 7)).Value
'Formeln Spalte H
.Range(.Cells(3, 8), .Cells(loLetzte, 8)).FormulaLocal = _
"=WENN((C3="""")+(D3="""");"""";(""../wp-content/audio-database/" _
& """&WECHSELN(F3;"".aup"";""/"")))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 8), .Cells(loLetzte, 8)).Value = _
.Range(.Cells(3, 8), .Cells(loLetzte, 8)).Value
'Formeln Spalte I
.Range(.Cells(3, 9), .Cells(loLetzte, 9)).FormulaLocal = _
"=WENN(((C3="""")*(D3=""""))+((C3
Gruß Werner
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 13:36:07
Jürgen
Hallo Werner,
was soll ich sagen: GENIAL GENIAL GENIAL!
Ich fang mal an, was du mir in Zukunft alles an Zeit und Mühe erspart hast:
a) durch das Makro wurde die Dateigröße meiner xlsm um 100% reduziert durch Wegfall der unnötigen Zellformeln!!!
b) jetzt kann ich zentral im Code Änderungen durchführen bzgl Werte,
c) kein händisches runterkopieren in jeder einzelnen Spalte mehr,
d) der Daten Import aus meinen TXT-Files geht nun viel schneller (warum auch immer....)
Happy Happy Happy ....als Excelprofi kann man vll das nicht nachvollziehen. Aber für mich ist das toll!
Dennoch hier in Ergänzung Antworten auf deine Fragen, wenn auch mittlerweile überholt, weil es passt nach meinen ersten Tests ja alles:
a) dabei handelt es sich um das gleiche Blatt?
[ja]
b) die Formeln müssen genau so weit rein kopiert werden wie für die Formel in Spalte A ?
[ja]
c) sollen die Formeln stehen bleiben oder durch ihre Werte ersetzt werden ?
[Werte sollen ersetzt werden]
d) 1. im Code den du bereits hast, wird die Formel in Spalte A ab Zelle A2. Die übrigen Formeln willst du jetzt am Zeile 3 haben. Ich hab das jetzt mal geändert, so dass auch die Formel in Spalte A ab Zeile 3 geschrieben wird.
[das war ein Versehen von mir. Das Script, was den Import der txt-Daten macht, macht immer eine Leerzeile bevor es mit den Daten losgeht. Hätte sich mit deiner Lösung erübrigt, da die Zellformeln nun ja dynamisch eingesetzt werden. Aber egal, das passt so.]
e) 2. im Code den du bereits hast, wird die letzte belegte Zeile anhand der Spalten E und I ermittelt, je nachdem welche weiter befüllt ist. Jetzt willst du aber in Spalte I eine Formel rein schreiben. Dort sind also zunächst mal wohl gar keine Daten vorhanden, so dass dort auch nicht die letzte belegte Zeile ermittelt werden kann. Du hast diverse Formeln, die sich auf die Spalte C beziehen. Ich ermittle die letzte belegte Zeile einfach in Spalte C. Ich hoffe das passt so, ansonsten müsstest du mir nochmal mitteilen, in welcher Spalte die letzte belegte Zeile ermittelt werden soll/kann.
[ja das ist richtig. Aber du hast eine gute Wahl mit "C" getroffen. Das ist die erste Spalte wo immer befüllt wird und als Level dienen kann. Neben "C" wären es noch d, E und F.]
Ich muss jetzt aber noch zum Verständnis zu einer Kleinigkeit fragen, welche mir total unlogisch vorkommt:
Ich habe dein Makro (wie andere) in meinem Formen-panell abgebildet und zugewiesen als "2. Zellformeln platzieren". Meine Vorgehensweise ist nun wie folgt für einen Datenimport:
1. Ich löse das 1. makro Daten-Import aus. Dadurch werden die Spalten C bis F befüllt.
2. dann löse ich dein Makro aus "2. Zellformeln platzieren". Jetzt wird alles in jeder Spalte eingelesen, ausser! in Spalte "A" und "G" unvollständig.
In Spalte A un d G wird zuerst einmal NUR der Hyperlink eingelesen. Wenn ich das Makro "2. Zellformeln platzieren" ein zweitesmal ausführe, fügt es den Rest in den Spalten hinzu (A="-", und in G=[Play...]). Das ist eigenartig aber nicht schlimm, wenn man es beachtet.
Hier zur besseren Verdeutlichung noch Screenshots dazu:
1. Stepp:

2. Stepp:

3. Stepp:

Danke & Gruss,
Juergen
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 14:17:22
Werner
Hallo Juergen,
das liegt an der falschen Reihenfolge des Eintrags der Formeln. Zuerst werden die Formeln in Spalte A eingetragen. Diese Formel bezieht sich u.A. auf Spalte I. Zu diesem Zeitpunkt ist die Formel in Spalte I die Formel aber noch nicht eingetragen. Dort sind also zu diesem Zeitpunkt noch keine Daten vorhanden, weshalb die Formel in Spalte A auch kein entsprechendes Ergebnis liefern kann.
Ich habe jetzt mal die Reihenfolge der Formeleinträge verändert, sollte laufen.
Public Sub bbb()
Dim loLetzte As Long
With Worksheets("Tabelle1") 'Blattname anpassen
loLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
'Formeln Spalte B
.Range(.Cells(3, 2), .Cells(loLetzte, 2)).FormulaLocal = _
"=WENN(ANZAHL(C3:D3)=2;--LINKS(F3;FINDEN(""_"";F3)-1);"""")"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 2), .Cells(loLetzte, 2)).Value = _
.Range(.Cells(3, 2), .Cells(loLetzte, 2)).Value
'Formeln Spalte H
.Range(.Cells(3, 8), .Cells(loLetzte, 8)).FormulaLocal = _
"=WENN((C3="""")+(D3="""");"""";(""../wp-content/audio-database/" _
& """&WECHSELN(F3;"".aup"";""/"")))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 8), .Cells(loLetzte, 8)).Value = _
.Range(.Cells(3, 8), .Cells(loLetzte, 8)).Value
'Formeln Spalte I
.Range(.Cells(3, 9), .Cells(loLetzte, 9)).FormulaLocal = _
"=WENN(((C3="""")*(D3=""""))+((C3 ""; WENN(ISTZAHL(FINDEN("".mp3"";I3));"" -"";""""))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 1), .Cells(loLetzte, 1)).Value = _
.Range(.Cells(3, 1), .Cells(loLetzte, 1)).Value
'Formeln Spalte G
.Range(.Cells(3, 7), .Cells(loLetzte, 7)).FormulaLocal = _
"=WENN(ISTZAHL(FINDEN("".aup"";E3));"" "";WENN(ISTZAHL(FINDEN("".mp3"";I3));""[Play…]"";""""))"
'Formeln durch Werte ersetzen, wenn nicht gewünscht/benötigt dann löschen
.Range(.Cells(3, 7), .Cells(loLetzte, 7)).Value = _
.Range(.Cells(3, 7), .Cells(loLetzte, 7)).Value
End With
End Sub
Zudem brauchst du für das Eintragen der Formeln keine separate Schaltfläche. Das kannst du auch über die Schaltfläche zum Importieren deiner Daten erledigen.
Einfach in deinem Makro mit dem du deine Daten importierst ganz am Ende vor dem End Sub das Makro zum Einfügen der Formeln aufrufen mit:
Call bbb
Das bbb mußt du natürlich ändern wenn du einen anderen Namen für die Prozedur vergeben hast.
Gruß Werner
Anzeige
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 14:47:33
Jürgen
Hallo Werner,
vielen Dank für die Hilfe!
Das mit dem kompletten einlesen klappt jetzt einwandfrei.
Mein Versuch das Makro in das erste zu fügen, scheitert leider. Ich hab da noch ne Msg Box nach dem einlesen, kollidiert das mit dem irgendwie? Setzte wie im Screenshot ersichtlich den CALL Befehl hinter einen anderen.

Danke & Gruss,
Juergen
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 14:59:50
Werner
Hallo Juergen,
zwei Möglichkeiten:
1. Call Zellformeln einfach nach der MessageBox, also wirklich als letzte Codezeile vor dem End Sub setzen.
2. Meinen kompletten Code einfach dort rein kopieren, wo Call Zellformeln steht, Natürlich ohne _

Public Sub Zellformeln() und End Sub
und das Call Zellformeln raus löschen. Die Dim Anweisungen gehören aber in den Modulkopf auch dein Dim lngLastUsedRow As Long.
Der Code läuft zwar auch so aber innerhalb des Codes haben die Dim Anweisungen eigentlich nichts zu suchen.
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 15:13:35
Werner
Hallo Jürgen,
mit der MsgBox hat das wohl eher nichts zu tun. Sicher, dass der Makroname richtig ist?
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 15:34:18
Jürgen
Hallo Werner,
ja, der Name stimmt.
Aber könnte es damit zu tun haben, dass das Makro in Abschnitt "Tabelle1 (Tabelle1)" steht, und das Import Makro in "DieseArbeitsmappe". Also quasi getrennt voneinander?

Danke & Gruss,
Juergen
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 15:51:37
Werner
Hallo Jürgen,
ob dein Makro für den Import in diese Arbeitsmappe gehört kann ich dir nicht sagen, ich kenne es nicht. Wenn ich sehe, dass du das Makro mit einer Schaltfläche aufrufst, dann würde ich sagen wohl eher nicht. Das gehört eher in ein allgemeines Modul.
Mein Makro muss auf alle Fälle in ein allgemeines Modul.
Gruß Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
03.01.2018 16:08:14
Jürgen
Hallo Werner,
ja, das war's.
Ich habe es nun umkopiert in den "Allgemeinen Teil" und nun funktionierst.
Nochmals vielen herzlichen Dank für die tolle Hilfe von dir!!!
Gruss,
Juergen
Gerne u.Danke für die Rückmeldung. o.w.T.
03.01.2018 16:12:55
Werner
AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 13:21:40
Sepp
Hallo Jürgen,
in G3
=WENN(ISTZAHL(FINDEN(".aup";E3));"
Gruß Sepp

AW: Funktion WENN kaskadieren bei TXT-Zellinhalten
01.01.2018 18:56:30
Jürgen
Hallo Sepp,
das funzt astrein!!!
Super Sache, herzlichen Dank für deine Hilfe!
Danke & Gruss,
Juergen

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige