Forum: PC-Programmierung Excel Problem


von Fritz (Gast)


Lesenswert?

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?

von Jumpy (Gast)


Lesenswert?

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)

von Fritz (Gast)


Lesenswert?

Jumpy schrieb:
> ob Zahl 29

???

ich will nicht nach 29 suchen sondern nach Duplikaten...

von Carlo (Gast)


Lesenswert?

excel Finding compare multiples Duplicates in two columns

von Erich (Gast)


Lesenswert?


von Jumpy (Gast)


Lesenswert?

Fritz schrieb:
> Jumpy schrieb:
>> ob Zahl 29
>
> ???
>
> ich will nicht nach 29 suchen sondern nach Duplikaten...

Warum erwähnst du das nicht?

von Schlaumaier (Gast)


Lesenswert?

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.

von Hugo H. (hugohurtig1)


Lesenswert?

Fritz schrieb:
> wie bekomm ich sowas hin?

Durch Lesen und Nachdenken.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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 ;-)

von Hugo H. (hugohurtig1)


Lesenswert?

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"?

von Axel (Gast)


Lesenswert?

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.

von Axel (Gast)


Lesenswert?

Schlaumaier schrieb:
> Bindestrich

Was für ein Bindestrich denn?

von Yalu X. (yalu) (Moderator)


Lesenswert?

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?

von Schlaumaier (Gast)


Lesenswert?

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. :)

von Sascha W. (sascha-w)


Lesenswert?

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

von Schlaumaier (Gast)


Lesenswert?

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. ;)

von Josef L. (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

: Bearbeitet durch Moderator
von Schlaumaier (Gast)


Lesenswert?

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.

von Schlaumaier (Gast)


Lesenswert?

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 ;)

von Schlaumaier (Gast)


Lesenswert?

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.

von ge-nka (Gast)


Lesenswert?

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.

von Josef L. (Gast)


Lesenswert?

@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 :-)

von Mucky F. (Gast)


Lesenswert?

Fritz schrieb:
> wie bekomm ich sowas hin?

Ein Weg wäre der Menüpunkt Daten-> Konsolidieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.