Hi
Folgende Aufgabenstellung: Es soll der Text der Spalte B zusammengefügt
werden, wenn in der Spalte A die gleiche Referenz steht. Beispiel:
25 Fritz
26 Hans
27 Paul
27 Manfred
28 Robert
29 Norbert
29 Alexander
29 Walter
30 Udo
Das Resultat sollte nun sein
25 Fritz
26 Hans
27 Paul Manfred
28 Robert
29 Norbert Alexander Walter
30 Udo
wie bekomm ich sowas hin?
Wenn eine Hilfsspalten kein Problem sind:
In Spalte C: =WENN(A1="29";A1;"")
In Spalte D: =TEXTVERKETTEN(" "; WAHR; C1:C1000)
Spalte C: Prüft dann immer A1....A1000 ob Zahl 29 eingetragen, und trägt
wenn ja den Namen in Spalte C ein.
Spalte D: Verkettet alle Texte die in Spalte C stehen. Wenn die Zahl in
die gleiche Zelle soll, bei Textverketten einfach: =TEXTVERKETTEN(" ";
WAHR; A1; C1:C1000)
Geht auch alles in einer Funktion mit Index (einfach mal bei Google
suchen, ist aber komplexer)
Jumpy schrieb:> In Spalte C: =WENN(A1="29";A1;"")> In Spalte D: =TEXTVERKETTEN(" "; WAHR; C1:C1000)
funktioniert nicht.
wenn überhaupt dann muss du LINKS(a1,2) abfragen, da A1 niemals 29 ist
in der Liste. Der TO schreibt ja, das die Nr und der Name in a1 steht.
Den Name alleine bekommst du mit =teil(a1,4,länge(a1)-4) heraus.
Das geht nur wenn du zahlen alle 2 stellig sind, und nach den
bindestrich ein Leerzeichen kommt. Einfach gesagt, der name IMMER an der
4 Stelle im Text beginnt.
Ansonsten musst du nach den Bindestrich suchen und dann von da aus mit
einer Trim-Funktion den Namen berechnen.
Jumpy schrieb:>> ich will nicht nach 29 suchen sondern nach Duplikaten...>> Warum erwähnst du das nicht?
Das hat er doch, und sogar gleich noch anhand eines Beispiels erläutert.
Meiner Meinung nach ist die Problemstellung klar und eindeutig
formuliert.
Wäre das in Excel nicht so unendlich schwierig, hätte ich dem TE auch
gleich einen Lösungsvorschlag geliefert ;-)
Yalu X. schrieb:> Wäre das in Excel nicht so unendlich schwierig, hätte ich dem TE auch> gleich einen Lösungsvorschlag geliefert ;-)
Schon mal etwas von "Teile ein Problem in Teil-Probleme gehört"?
Schlaumaier schrieb:> Jumpy schrieb:>>=teil(a1,4,länge(a1)-4) heraus.
oder gleich
=teil(a1,4,1000)
einfach alles ab der 4. Stelle, egal wie viele Zeichen.
Hugo H. schrieb:> Schon mal etwas von "Teile ein Problem in Teil-Probleme gehört"?
Ja.
Ich befürchte aber, dass sich mindestens eines der dabei entstehenden
Teilprobleme nur mit VBA lösen lässt, sonst hätte sicher irgendein
Excel-Experte schon eine Lösung gepostet (üblicherweise geht das hier im
Forum recht schnell).
Da die Problemlösung mit Excel aber nicht ganz trivial zu sein scheint,
programmiere ich solche Dinge lieber gleich in einer dafür geeigneteren
Sprache wie bspw. Awk, Python oder Haskell.
Danach hat der TE aber nicht gefragt, somit steht nach wie vor die Frage
im Raum, wie man das mit Excel macht. Vielleicht hast ja du eine Idee?
Das ist nix anderes wie eine doppelte WENN abfrage.
Hier mal ein Beispiel.
c7 = 25 Fritz
c8 = 26 Hans
c9 = 27 Paul
In D7 folgendes kopieren.
=WENN(LINKS(C7;2)=LINKS(C6;2);WENN(LINKS(C6;2)=LINKS(C7;2);VERKETTEN(D6&
" "&TEIL(C7; 4; LÄNGE(C7)-3));TEIL(C7; 4; LÄNGE(C7)-3));TEIL(C7; 4;
LÄNGE(C7)-3))
Ein gefiltertes Ergebnis bekommt man wenn man DANACH in E7 folgendes
kopiert
=WENN(LINKS(C7;2)<>LINKS(C8;2);D7;"")
Nun noch D7 + E6 herunterkopieren bis an das ende der Liste von C
Das war's.
Kein Hexenwerk.
Einzige Besonderheit ist das er nur die ersten 2 Zeichen von C
vergleicht.
Dies kann mich mit Hilfe der FINDEN Funktion umgehen. Aber ich mag die
Formel nicht noch schwerer machen als sie eh schon ist ;) für Anfänger
;);)
Falls doch gewünscht einfach die ;4; gegen ;finden(" ",D7);
und die -3 gegen finden(" ";d7)-1 austauschen. :)
Schlaumaier schrieb:> Das ist nix anderes wie eine doppelte WENN abfrage.>> Hier mal ein Beispiel.>> c7 = 25 Fritz> c8 = 26 Hans> c9 = 27 Paul
Wie kommst du jetzt darauf das Referenz und Text in der selben Spalte
steht?
Eine Frage an den TO währe eher mal noch folgende:
- gibt es maximal 2 Zeilen mit der selben Referenz
- sind die Zeilen mit gleicher Referenz immer direkt aufeinander folgend
Sascha
Sascha W. schrieb:> Wie kommst du jetzt darauf das Referenz und Text in der selben Spalte> steht?Fritz schrieb:> Es soll der Text der Spalte B zusammengefügt> werden, wenn in der Spalte A die gleiche Referenz steht. Beispiel:> 25 Fritz
Der TO schreibt einwandfrei SPALTE A für ALLES. Ansonsten wäre das viel
zu leicht und meine Formel bedeutend kleiner. ;)
Sollte das wirklich getrennt sein, kann er ja alle Links + Teil Bereiche
löschen in meiner Formel. ;)
Was TE fritz schreibt und daher vorausgesetzt werden kann:
- Es liegt eine Tabelle in Excel vor
- und es handelt sich um Daten in den 2 Spalten A und B
Was TE fritz nicht schreibt und daher nicht vorausgesetzt werden kann:
- dass in Spalte A immer zweistellige Zahlen stehen
- dass die in aufsteigender Reihenfolge angeordnet sind
- dass in Spalte B immer Text steht
- ob die Anzahl der Datenzeilen endlich ist
- und wo das Ergebnis ausgegeben werden soll
So wie die Aufgabe gestellt ist (Lösung in Excel) ist auch nicht gesagt
dass die der Spalte A entsprechende Ergebnisspalte die Daten in
irgendeiner Reihenfolge sortieren soll (also "first in first out" ist
auch erlaubt), aber bei mindestens 1 Doublette ist die Ergebnistabelle
kürzer als die Ausgangstabelle. Wo soll das Ergebnsi dargestellt werden?
Neue Tabelle?
Ich weiß ja nicht warum viele für Datenbankaufgaben immer Excel nehmen,
vllt weil die Office-Version mit Access teurer ist? Vielleicht kommt es
daher dass ich die eine oder andere Blockade bei der Aufgabe habe.
Yalu X. schrieb:> Wäre das in Excel nicht so unendlich schwierig
Das ist in Excel natürlich nicht "unendlich schwierig". Es ist halt
keine Sache, die vom Standardumfang der leicht benutzbaren Funktionen
abgedeckt wird, also muss man eine eigene programmieren.
Und das ist in der eingebauten Sprache VBA so leicht oder schwer, wie in
jeder anderen Sprache auch.
Nur ist halt VBA in Excel eingebaut und wenn man Quelle und das Ziel in
einer Excel-Tabelle hat, dann ist es allein deshalb in VBA viel
einfacher als jeder andere Sprache umzusetzen, weil man sich über den
Zugriff auf die Daten erst gar keine Gedanken machen muss. Das geht
einfach so.
Letzlich kommen drei triviale for-Schleifen raus, mit einer
if-Verzweigung als Nutzcode in der innersten. Insgesamt also satte 10
Zeilen VBA.
Meine Katze könnte das fast programmieren. Für Yalu X. ist es unendlich
schwierig?
Nein, Yalu X. stellt es nur aus rein ideologischen Gründen als unendlich
schwierig dar...
So sieht es in Wirklichkeit aus.
c-hater schrieb:> Yalu X. schrieb:>>> Wäre das in Excel nicht so unendlich schwierig>> Das ist in Excel natürlich nicht "unendlich schwierig". Es ist halt> keine Sache, die vom Standardumfang der leicht benutzbaren Funktionen> abgedeckt wird, also muss man eine eigene programmieren.>> Und das ist in der eingebauten Sprache VBA so leicht oder schwer, wie in> jeder anderen Sprache auch.
Für mich ist es deswegen unendlich schwierig, weil ich kein VBA kann.
Der TE kann offensichtlich auch kein VBA (sonst würde er hier nicht
nachfragen), deswegen ist es für ihn ebenfalls unendlich schwierig.
Wobei der Schlaumaier ja auch ohne VBA schon ziemlich weit gekommen ist:
Schlaumaier schrieb:> Das ist nix anderes wie eine doppelte WENN abfrage.> ...
Was hier noch fehlt, ist das Zusammenschrumpfen der Ergebnisspalte, so
dass sie keine leeren Felder mehr enthält. Vielleicht geht ja auch das
irgendwie ohne VBA.
@Schlaumaier:
Warum hast du eigentlich zwei WENN-Aufrufe mit gleicher Bedingung und
gleichem Else-Argument verschachtelt? Das innere WENN alleine sollte
doch genügen?
Edit:
Das Zusammenschrumpfen könnte man mit Daten/Filtern machen. Unschön ist
nur, dass dabei nicht nur die unerwünschten Felder, sondern jeweils die
kompletten Zeilen ausgeblendet werden. Wenn das Excel-Sheet noch weitere
Spalten enthält, die von der Filterung nicht betroffen sein sollen, ist
das somit keine Lösung.
Josef L. schrieb:> Ich weiß ja nicht warum viele für Datenbankaufgaben immer Excel nehmen,> vllt weil die Office-Version mit Access teurer ist? Vielleicht kommt es> daher dass ich die eine oder andere Blockade bei der Aufgabe habe.
Weil Access einfach gesagt MIST ist. In Excel hast du eine einfach
Übersicht über die Datensätze. Kannst Abfrage relativ einfach machen.
Und das editieren einzelner Daten ist 1000 x schneller.
Da ich bei gewissen Anwendungen Access nutzen muss, mache ich meist
folgendes. Ich nutze in Access die Funktion "Datenanalyse mit Excel".
Dann bekomme ich in Excel eine Tabelle mit den Daten. Da kann ich sie
wundervoll bearbeiten. Und wenn sie fertig sind, importiere ich sie
wieder nach Access, damit meine Anwendung ihre MDB Datenbank hat.
ABER : Viele Anwender können kein Access und machen keine komplizierten
Abfragen. Was einfach gesagt heißt. Den reicht der Sverweis-Befehl und
ein paar WENN abfragen. Der Kostenfaktor spielt logoweis auch eine
Rolle.
Meiner Meinung nach ist Access ein "Totes Kind". Zu langsam, zu
kompliziert und zu nervig. Bei meinen privaten Projekten reicht ein
SQLite völlig aus.
Ist schneller und einfacher zu handhaben.
Yalu X. schrieb:> Warum hast du eigentlich zwei WENN-Aufrufe mit gleicher Bedingung und> gleichem Else-Argument verschachtelt? Das innere WENN alleine sollte> doch genügen?
Leider nicht. WENN-Befehle schreibe ich immer von Innen nach außen. Was
bedeutet, Wenn der 1 Wenn Befehl nicht das Resultat erzeugt, wird er in
einen weitere Wenn-Abfrage gekapselt und somit spezialisiert.
Allerdings gebe ich zu, das ich obige Sache nicht optimiert habe sondern
mal eben "auf die schnelle" runter gesaut habe.
Ich optimiere allerdings auch nur Software wenn sie Zeitintensiv im
regelmäßigen Einsatz ist. Und auch nur dann, wenn ich der Meinung bin
das es sich lohnt.
Yalu X. schrieb:> Was hier noch fehlt, ist das Zusammenschrumpfen der Ergebnisspalte, so> dass sie keine leeren Felder mehr enthält. Vielleicht geht ja auch das> irgendwie ohne VBA.
Nein, das geht nicht ohne VBA. Aber man kann es mit ein paar Klicks von
Hand machen.
Dazu einfach die Tabelle kopieren, in einen neue Tabelle mit den Befehl
"INHALTE EINFÜGEN ->NUR WERTE" in die neue Tabelle einfügen und dann
DATEN SORTIEREN aufrufen.
Danach den unteren Bereich löschen.
Ein gängiges Verfahren was ich sogar mit einen Trick optimieren.
Ich schreibe in A1 eine 1, in A2 schreiben ich =a1 + 1. Dann kopiere ich
a2 herunter bis an das Ende der Tabelle. Danach markieren ich die Spalte
A und kopiere sie. Die Markierung NICHT aufheben, sondern mit den Befehl
"INHALTE EINFÜGEN ->NUR WERTE" die Berechneten Zahlen überschreiben.
Wenn man nun irgend was anders sortieren und dann Zeilen löscht, kann
man durch sortieren von A1 wieder die alte Saubere Reihenfolge
herstellen.
Nur so als Excel-Tipp für Anfänger.
Der Befehl :INHALTE EINFÜGEN ist nämlich SEHR mächtig wenn man damit
umgehen kann.
Und Kopieren unter Excel ist sowieso eine Funktion mit Weitblick. Man
beachte z.b. das $ Zeichen in einer Formel. Und die Tatsache das man
besagtes $ Zeichen auch mit Suchen+Ersetzen wieder entfernen kann. ;)
Sehr wichtig wenn man Tabellen-Berechnungen machen muss, mit einen
Grundwert in einer Spalte ;)
Schlaumaier schrieb:> Yalu X. schrieb:>> Was hier noch fehlt, ist das Zusammenschrumpfen der Ergebnisspalte, so>> dass sie keine leeren Felder mehr enthält. Vielleicht geht ja auch das>> irgendwie ohne VBA.>> Nein, das geht nicht ohne VBA. Aber man kann es mit ein paar Klicks von> Hand machen.
Es geht deshalb nicht, weil Excel in einer Zelle nur EINS von 2 Sachen
haben darf. Entweder Wert ODER Formel aber KEINE Befehle. Und Excel
kennt keinen Befehl sich selbst zu verändern. Das höchstmaß der Gefühle
die Excel bei so was kennt ist der Befehl INDIREKT, was ein ermöglicht
die Zelle die man ansprechen will zu berechnen aus den Ergebnis einer
anderen Zelle.
Ein Befehl wie z.b. Excel.rows(10).remove und Zeile 10 zu löschen geht
in einer Zelle nicht. Da musst dann wirklich VBA ran. Vor allen Dingen
würden so Befehle rekursiv sein u./o. Zirkelbezüge auslösen.
Schlaumaier schrieb:> Ich schreibe in A1 eine 1, in A2 schreiben ich =a1 + 1. Dann kopiere ich> a2 herunter bis an das Ende der Tabelle. Danach markieren ich die Spalte> A und kopiere sie.
Nun das geht aber wirklich einfacher:
in A1 eine 1, in A2 eine 2.
Dann A1:A2 markieren, rechte untere Ecke der Markierung schnappen und
bis benötigter Position runterziehen. (evti. STRG Taste dabei halten,
das invertiert das Befehl Kopieren und Datenreihe ausfüllen)
Falls die Werte nur kopiert worden sind kann man im danach erscheinendem
Dropdownmenü wählen Datenreihe ausfüllen.
@Schlaumeier
> Weil Access einfach gesagt MIST ist.
ist etwas arg überspitzt ausgedrückt, jedes Programm hat seine
Berechtigung. Ich habe über 30 Jahre lang Datenbankanwendungen
programmiert (nicht in der M$ Welt). Access ist halt das eine Extrem,
Schwerpunkt Datenverwaltung und Sortierung, Auswertung nur sehr bedingt;
Excel fast reine Auswertung, für größere Datenmengen ungeeignet. Privat
nutze ich dasselbe was du machst - größere Datenmengen in Access
speichern, zur Auswertung nach Excel rüber.
Aber das gestellte Problem wäre mit einer SQL-Abfrage viel eleganter zu
lösen. Aber wie schon mehrfach von anderen betont, das war ja nicht die
Ausgangsfrage. Aber das sollte nicht in jedem Fall das Argument sein.
Wenn der TO das Problem nur mit bestimmten Hilfsmitteln lösen darf
(Hausaufgabe, Vorgabe des Chefs / der Firma) ist das klar; wenn es nur
das erste ist was ihm eingefallen ist und er für jede Hilfe dankbar ist
und lernwillig, wäre auch ein alternativer Lösungsweg möglich. Es soll
ja Freeware SQL Lösungen geben :-)