Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
828to832
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
828to832
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Liste ohne Lücken anzeigen

Liste ohne Lücken anzeigen
11.12.2006 14:29:19
Daniel
Hallo Zusammen,
ich weiß nicht wie ich das angehen soll.
Ich habe in Tabelle2 in Spalte W eine Formel stehen. Diese zeigt
entweder einen Wert an oder eine leere Zelle.
In Tabelle1 will ich die Werte angezeigt bekommen, ohne selbst irgendwas tun zu müssen. Allerdings ohne Leerzellen dazwischen.
Im Prinzip brauche ich also die Spalte W in Tabelle1. Jedoch kompakt ohne Leerzellen.
Wie kann ich das machen?
Grüße,
Daniel

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Liste ohne Lücken anzeigen
11.12.2006 14:59:36
Ptonka
Hallo,
das geht mit der Funktion WECHSELN, also z.B.: =WECHSELN(C1;" ";"")
Wenn Dein Text in C1 steht.
Gruß,
Ptonka
AW: Liste ohne Lücken anzeigen
11.12.2006 15:13:57
Daniel
Hallo Ptonka,
kannst du das genauer erklären?
Diese Formel verstehe ich nicht.
Grüße,
Daniel
AW: Liste ohne Lücken anzeigen
11.12.2006 15:36:37
Daniel
Hallo,
ja, das ist es. Danke.
Bei solchen Formeln gibt es einen Trick bei der Eingabe, oder?
Was muss ich da nochmal drücken?
Grüße,
Daniel
Anzeige
AW: Liste ohne Lücken anzeigen
11.12.2006 16:31:05
Fred
strg + shift + enter
mfg Fred
AW: Liste ohne Lücken anzeigen
11.12.2006 16:50:53
Daniel
Hallo,
vielen Dank.
An sich funktioniert das so.
Mein Problem ist, dass sich das Sheet ständig ändert.
Wenn ich dir Formel in 30 Zeilen habe, dann ist mein CPU laufend
zu 100% ausgelastet. Meine "normale" Auslastung liegt bei ca. 30%.
Gibt es eine Lösung, die weniger auf die Performance schlägt?
Grüße,
Daniel
AW: Liste ohne Lücken anzeigen
11.12.2006 20:51:15
Fred
Hi,
das ist nun mal der Fluch der Matrixformeln, wenn du das vermeiden willst, hilft nur VBA.
mfg Fred
AW: Liste ohne Lücken anzeigen
12.12.2006 08:26:58
Daniel
Hallo Fred,
wie geht das per VBA?
Kannst Du mir da helfen?
Grüße,
Daniel
AW: Liste ohne Lücken anzeigen
12.12.2006 11:20:40
Reinhard
Hi Daniel,
Wertänderungen durch eine Formel in W lösen kein Ereignis aus. Man kann aber diejenigen Zellen "überwachen" die durch manuelle Änderung eine Änderung in W auslösen.
Anenommen im W1 steht die Formel =A1+D1
dann kann man Spalte A und D "überwachen" und bei Änderungen dort Tabelle1 aktualisieren.
Demenstprechend musst du das Makro noch anpassen. Spalte 1= A, Spalte 2= B usw.
Alt+F11, Doppelklick auf "Tabelle2", Code reinkopieren, Anpassen, Editor schliessen.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 1 And Target.Column <> 4 Then Exit Sub '1 und 4 anpassen
Dim Spalte, Zei As Long, n As Long
Spalte = Range("W1:W" & Range("W65536").End(xlUp).Row)
Worksheets("Tabelle1").Columns(1).ClearContents ' 1 anpassen
For n = 1 To UBound(Spalte)
If Spalte(n, 1) <> "" And Spalte(n, 1) <> 0 Then
Zei = Zei + 1
Worksheets("Tabelle1").Range("A" & Zei) = Spalte(n, 1) ' A anpassen
End If
Next n
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Liste ohne Lücken anzeigen
12.12.2006 12:42:44
scharade
Hallo Reinhard,
erstmal vielen Dank. so sollte die Lösung aussehen.
Leider habe ich aber ein Problem damit:
Die Änderungen in den Spalten aus denen das Ergebnis in W berechnet wird,
stammen selbst auch aus einer Formel. Überhaupt ist alles aus Formeln,
da ich Daten über eine DDE empfange.
Allerdings lösen Änderungen Worksheet_Calculate aus.
Vielleicht kann man das entprechend anpassen?
Das wäre toll!
Danke,
Daniel
AW: Liste ohne Lücken anzeigen
12.12.2006 13:12:33
Reinhard
Hi Daniel,
allerdings wird dann für jede Zelle die berechnet wird, das Makro durchlaufen.
Vielleicht dann eine reine Excellösung ohne Vba.
z.B Hilfsspalte mit =WENN(ODER(W1=0;W1="");"";ZEILE())
und die dann in Tabelle auslesen mittels kkleinste usw.
Private Sub Worksheet_Calculate()
Dim Spalte, Zei As Long, n As Long
Spalte = Range("W1:W" & Range("W65536").End(xlUp).Row)
Worksheets("Tabelle1").Columns(1).ClearContents ' 1 anpassen
For n = 1 To UBound(Spalte)
If Spalte(n, 1) <> "" And Spalte(n, 1) <> 0 Then
Zei = Zei + 1
Worksheets("Tabelle1").Range("A" & Zei) = Spalte(n, 1) ' A anpassen
End If
Next n
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Liste ohne Lücken anzeigen
12.12.2006 13:20:27
Daniel
Hallo Reinhard,
achso. Das kann man nicht auf die Spalten begrenzen?
Gruß,
Daniel
"...für jede Zelle, die berechnet wird...", das...
12.12.2006 15:54:56
Luc:-?
...ist die Spalte, Daniel!
Gruß Luc :-?
AW: "...für jede Zelle, die berechnet wird...", das...
12.12.2006 16:37:00
Daniel
Hallo Luc,
verstehe dein Posting nicht.
Worksheet_Calculate prüft doch das ganze Arbeitsblatt auf Änderungen.
Das ändert sich teilweise mehrmals die Sekunden. Im Gegensatz dazu ändern sich die Spalten die für die eigentlich Berechnung stattfinden weniger oft.
Deshalb wäre es sinnvoll sich auf diese vier Spalten zu begrenzen. Diese sind
dann für das Ergebnis in W verantwortlich.
Grüße,
Daniel
AW: Liste ohne Lücken anzeigen
12.12.2006 16:01:32
Reinhard
Hi Daniel,
dann lösche den Claculte wieder und nimm diesen, jetzt wird bei nur jedem Klick in C1 Tabelle1 aktualisiert.
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Address <> "$C$1" Then Exit Sub ' $C$1 anpassen
Dim Spalte, Zei As Long, n As Long
Spalte = Range("W1:W" & Range("W65536").End(xlUp).Row)
Worksheets("Tabelle1").Columns(1).ClearContents ' 1 anpassen
For n = 1 To UBound(Spalte)
If Spalte(n, 1) <> "" And Spalte(n, 1) <> 0 Then
Zei = Zei + 1
Worksheets("Tabelle1").Range("A" & Zei) = Spalte(n, 1) ' A anpassen
End If
Next n
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Liste ohne Lücken anzeigen
13.12.2006 08:30:22
Daniel
Hallo Reinhard,
sehr gut, danke.
Eine Kleingkeit noch:
Beim ersten Aufruf des Blattes oder in Ausnahmefällen auch zwischendruch kann
es dazu kommen, dass in manchem Spalten ein #NV die Formeln "stört".
Wie baue ich das noch ein, dass der Code nicht ausgeführt wird wenn von C3:W1000 ein #NV steht in einer Zelle?
Besten Dank für die gute Hilfe,
Daniel
AW: Liste ohne Lücken anzeigen
13.12.2006 09:36:12
Reinhard
Hi Daniel,
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Address <> "$C$1" Then Exit Sub ' $C$1 anpassen
Dim Spalte, Zei As Long, n As Long
Spalte = Range("W1:W" & Range("W65536").End(xlUp).Row)
Worksheets("Tabelle1").Columns(1).ClearContents ' 1 anpassen
For n = 1 To UBound(Spalte)
If Spalte(n, 1) <> "" And Spalte(n, 1) <> 0 And TypeName(Spalte(n, 1)) <> "Error" Then
Zei = Zei + 1
Worksheets("Tabelle1").Range("A" & Zei) = Spalte(n, 1) ' A anpassen
End If
Next n
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Liste ohne Lücken anzeigen
13.12.2006 09:50:52
Daniel
Hallo Reinhard,
sorry, ich muss nochmal nachhaken.
Kann man das auch auf das ganze Blatt ausweiten?
Also das Makro soll nicht ausgeführt werden, falls irgendwo #NV steht.
Tut mir Leid, manches fällt erst im Einsatz auf.
Grüße,
Daniel
P.S.: Das dürfte es dann aber endgültig sein :-)
AW: Liste ohne Lücken anzeigen
13.12.2006 10:16:47
Reinhard
Hi Daniel,
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Address <> "$C$1" Then Exit Sub ' $C$1 anpassen
Dim Zelle, Spalte, Zei As Long, n As Long
For Each Zelle In Worksheets("Tabelle2").UsedRange
If TypeName(Zelle.Value) = "Error" Then
MsgBox "Fehler in " & Zelle.Address(0, 0)
Exit Sub
End If
Next Zelle
Spalte = Range("W1:W" & Range("W65536").End(xlUp).Row)
Worksheets("Tabelle1").Columns(1).ClearContents ' 1 anpassen
For n = 1 To UBound(Spalte)
If Spalte(n, 1) <> "" And Spalte(n, 1) <> 0 Then
Zei = Zei + 1
Worksheets("Tabelle1").Range("A" & Zei) = Spalte(n, 1) ' A anpassen
End If
Next n
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
Danke, Reinhard. Perfekt!
13.12.2006 10:38:02
Daniel
...
Nochmal eine Sache...
14.12.2006 14:10:52
Daniel
Hallo Reinhard,
wie kann ich denn eine zweite Spalte hinzufügen, z.B. X und B zusätzlich zu W und A?
Ich danke Dir!
Daniel
Normalerweise wäre ein neuer Thread besser,...
15.12.2006 04:44:52
Luc:-?
...aber da es sich hier um eine Erweiterung handelt, wäre es noch besser gewesen, Daniel,
du hättest das gleich gesagt, dann hättest du die Lösung schon!
Wenn es sich nur um die genannte Erweiterung handelt (und später nicht noch mehr hinzukommen sollen...), müsstest du den 2.Teil des Pgms (ab Spalte =...) nur 2x aufschreiben und beim 2. die entsprechenden Änderungen vornehmen. Ansonsten wäre es sinnvoller eine Überschleife über diesen Codeteil zu konstruieren, die alle Spaltenpaare (W/A, X/B,...) nacheinander abhandelt. Dazu wären am Anfang des Pgms (übrigens: Die Dim-Anweisungen wdn stets als erste abgearbeitet und sollten deshalb auch am PgmAnfang stehen! - eine Frage des PgmStils) entweder 2 korrespondierende VariantVariablen mit Arrays von Spaltenbezeichnungen zu bilden, z.B...

Dim i as Long, spp1, spp2
spp1 = Array("W", "X", ...): spp2 = Array("A", "B", ...)
..., und die Spaltenbuchstaben in den betroffenen Zeilen entsprechend auszutauschen...

For i = 0 To UBound(spp1)
Spalte = Range(spp1(i) & "1:" & spp1(i) & Range(spp1(i) & "65536").End(xlUp).Row)
Worksheets("Tabelle1").Range(spp2(i) & Zei) = Spalte(n, 1)
Next i 
...(auch für unzusammenhängende Spaltenbereiche gut geeignet) oder (bei zusammenhängenden Spaltenbereichen) den Überzyklus gleich auf einen Bereich "W:..." zu beziehen, dessen einzelne Spalten nacheinander abgearbeitet wdn (For Each sp in Range("W:X").Columns). Dann müsste das Folgende aber stärker geändert wdn (...das kann ja Reinhard machen ;-) ).
Gruß Luc :-?
Anzeige
AW: Normalerweise wäre ein neuer Thread besser,...
15.12.2006 11:14:22
Daniel
Hallo Luc,
Du hast natürlich Recht. Von vornherein wäre das besser gewesen.
Oft ist es aber eher eine Arbeit am offenen Hirn...und da kommen
mir manche Einfälle erst wenn im Nachhineinen (leider).
Grüße,
Daniel
Verstehe! Und war's das? - FWn/Gruß owT
15.12.2006 12:30:48
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige