Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
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
Inhaltsverzeichnis

VBA für tabelle sortieren

VBA für tabelle sortieren
28.04.2015 08:12:23
sandra
Hallo,
Brauche eure hilfe.
SPALTE....A..SPALTE.B
Lagerplatz...Feldtyp
9-76-76-60...Normal
9-76-76-61...Normal
9-76-76-62...Hoch
9-76-76-65...Normal
Jetzt hätte ich gerne das alle Plätze die Hoch sind in Spalte C und D aufgelistet sind. Und von Spalte A und B gelöscht.
Würde dann so aussehen:
SPALTE..A..SPALTE.B...SPALTE.C....SPALTE.D
Lagerplatz.....Feldtyp.....Lagerplatz...Feldtyp..
9-76-76-60.....Normal.....9-76-76-62...Hoch
9-76-76-61.....Normal
9-76-76-65.....Normal
Wäre es möglich?
Besten Dank und liebe Grüße
SANDRA

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ohne VBA gehts auch
28.04.2015 08:42:22
Matthias
Hallo
Du schreibst im Betreff von Sortieren im Beitrag aber dann von Löschen
Bin also nicht sicher was Du tatsächlich möchtest.
Filter doch einfach so, das nur "Hoch" angezeigt wird.
Nun markierst Du den Bereich und drückst Entfernen.
Filter ausschalten - fertig.
Evtl. dann noch die leeren Zeilen/Zellen löschen
Vorher
 AB
1LagerplatzFeldtyp
29-76-76-60Normal
39-76-76-61Normal
49-76-76-62Hoch
59-76-76-65Normal
69-76-76-67Hoch
79-76-76-68Normal


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gefiltert:
 AB
1LagerplatzFeldtyp
49-76-76-62Hoch
69-76-76-67Hoch


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Markierung gelöscht und alles anzeigen:
 AB
1LagerplatzFeldtyp
29-76-76-60Normal
39-76-76-61Normal
4  
59-76-76-65Normal
6  
79-76-76-68Normal


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Matthias
Gruß Matthias

Anzeige
AW: ohne VBA gehts auch
28.04.2015 09:24:30
sandra
Hallo Matthias,
Ich meinte mit dem sortieren das ich die normalen Plätzen mit Hochplätzen verschiebe.
Ich hatte vorher auch mit Filter gearbeitet.
Aber jetzt bräuchte ich es in VBA, weil ich einen anderen VBA code anbauen möchte.
Danke erstmal für deine Nette Hilfe
LG sandra

AW: VBA für tabelle sortieren
28.04.2015 10:31:18
Daniel
Hi
per VBA so:
1. Liste nach Spalte B sortieren
2. Zellbereich für Hoch nach Spalte C kopieren
3. Zellbereich für Hoch in Spalte A:B löschen, so dass die Zellen für Normal nach oben nachrutschen.
sieht als Makro so aus:
Dim Zelle as Range Range("A:B").Sort Key1:=Range("B1"), Order1:=xlascending, header:=xlyes set Zelle = Columns(2).Find(what:="Hoch", Searchdirection:=xlprevious) Range(Cells(1, 1), Zelle).Copy Destination:=Cells(1, 3) Range(Cells(2, 1), Zelle).Delete Shift:=xlup Gruß Daniel

Anzeige
AW: VBA für tabelle sortieren
28.04.2015 11:23:23
Werner
Hallo Sandra,
oder so?
Option Explicit
Public Sub Verschieben()
Dim Bereich As Range
Dim Zelle As Range
Dim i As Long
Dim z As Long
For i = Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 2).End(xlUp).Row To 2  _
Step -1
Set Bereich = Worksheets("Tabelle1").Range("B2:B" & i)
For Each Zelle In Bereich
If Zelle.Value = "Hoch" Then
z = Worksheets("Tabelle1").Cells(Worksheets("Tabelle1").Rows.Count, 3).End(xlUp).Row + 1
Worksheets("Tabelle1").Range(Cells(Zelle.Row, 1), Cells(Zelle.Row, 2)).Copy Worksheets(" _
Tabelle1").Cells(z, 3)
Worksheets("Tabelle1").Range(Cells(Zelle.Row, 1), Cells(Zelle.Row, 2)).Delete
End If
Next Zelle
Next i
Range("C:D").Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlYes
End Sub
Gruß Werner

Anzeige
danke, an alle ihr seit die Besten :-)
28.04.2015 13:20:34
sandra
.

AW: danke, an alle ihr seit die Besten :-)
28.04.2015 13:29:21
Werner
Hallo Sandra,
der Code von Daniel ist besser, da kürzer und schneller. Aber ich habe eine kleine Ergänzung. Sollten einmal in Spalte B keine Feldtypen "Hoch" vorhanden sein, dann läuft Daniels Code in einen Fehler. Mit meiner kleinen Ergänzung wird eine entsprechende Meldung ausgegeben und der Fehler verhindert.
Dim Zelle As Range
Range("A:B").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes
Set Zelle = Columns(2).Find(what:="Hoch", Searchdirection:=xlPrevious)
If Not Zelle Is Nothing Then
Range(Cells(1, 1), Zelle).Copy Destination:=Cells(1, 3)
Range(Cells(2, 1), Zelle).Delete Shift:=xlUp
Else
MsgBox "Ein Feldtyp ""Hoch"" ist in Spalte B nicht vorhanden."
End If
Gruß Werner

Anzeige
der code geht nicht.
29.04.2015 12:55:52
sandra
Hallo Werner,
Statt das Wort "hoch" wollte ich "KL_KKK2"
Leider geht das nicht.
Dim Zelle As Range Range("A:B").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlYes Set Zelle = Columns(2).Find(what:="KL_KKK2", Searchdirection:=xlPrevious) If Not Zelle Is Nothing Then Range(Cells(1, 1), Zelle).Copy Destination:=Cells(1, 3) Range(Cells(2, 1), Zelle).Delete Shift:=xlUp Else MsgBox "Ein Feldtyp ""KL_KKK2"" ist in Spalte B nicht vorhanden." End If
Woran könnte das liegen. Das wäre nämlich der Fachbegriff des feldes.
LG
Sandra

AW: der code geht nicht.
29.04.2015 13:08:26
Daniel
Hi Sandra
die beschreibung "geht nicht" ist leider nicht aussagekräftig genug, um daraus eine Fehlerursache und eine Abhilfe zu ermitteln.
Beschreibe bitte genauer, was passiert.
Gibt es eine Fehlermeldung, wenn ja, welche und welche Zeile im code wird markiert?
Wenn nein, was passiert? Nichts? oder werden falsche Zeilen kopier?
ich bin aufgrund deiner Beschreibung von den Feldinhalten "hoch" und "tief" ausgegangen.
in diesem Szenario beginnt nach einer Sortiertung der zu verschiebende Bereich "hoch" immer in Zeile 2.
Daher habe ich mir auch nicht die mühe gemacht, denn Startbereich der zu verschiebenden Zeilen zu suchen, sondern kopiere von der ersten Zeile an (Zeile 2 und Überschrift)
ob das bei KL_KKK2 als zu verschiebender bereich auch so ist, kann ich dir nicht sagen, weil ich nicht weiß, wie die anderen Werte lauten und ob diese in der Sortierung davor oder dahinter liegen.
Gruß Daniel

Anzeige
Beispiel
29.04.2015 19:12:38
Sandra
Hallo Daniel und Werner,
Sorry, war wengl dumm von mir :-(
Ich hab jetzt die Original Liste erstellt. Tabelle1 ist "fast" original, nur das ich einpaar Zeilen hinzugefügt habe, das als Test . Normal wären es ca. 12800 Zeilen.
Die Lagerplatzhöhe KL_KKK2 kommt nicht immer vor.
In der Tabelle 2 habe ich jetzt mal das fertige Projekt Manuell gemacht, so dass ihr ein Bild vom Ergebnis habt.
https://www.herber.de/bbs/user/97366.xlsx
Ich möchte mich noch mal ganz Lieb bei euch bedanken und hoffe ihr könnt mir weiterhelfen.
LG Sandra

Anzeige
AW: Beispiel
29.04.2015 20:01:01
Daniel
Hi
wieviele verschiedene Lagerplatzhöhen gibt es den?
sollen dann alle in eine eigene Spalte verschoben werden oder nur die eine?
du sprichst nur von KL_KKK2, aber im beispiel kommen noch mehr vor und es wird jede in eine eigene Spalte verschoben.
Beschreibe bitte die Aufgabenstellung so genau wie möglich, sonst bekommst du wieder eine Lösung, die nicht funktioniert.
Gruß Daniel

AW: Beispiel
29.04.2015 20:13:11
Sandra
Hallo Daniel,
ich hab zuerst nur zwei genannt, da ich gedacht habe, ich schaff den rest schon alleine. Leider nicht.
Insges. 3 Lagerhöhen und genau so wie in der Tabelle2 soll es aussehen.
Jeder eine eigene Spalte.
Hoffe du kommst zu recht
LG Sandra

Anzeige
AW: Beispiel
29.04.2015 20:26:44
Daniel
muss das Ergebnis zweispaltig sein oder reicht es wenn man die Lagerhöhe als Überschrift über die Spalte schreibt?
Gruß Daniel

AW: Beispiel
29.04.2015 20:32:52
Sandra
muß leider zweispaltig sein. genau wie in der Tabelle2 . So muss das aussehen
LG Sandra

AW: Beispiel
29.04.2015 21:10:39
Daniel
Hi
dann probier mal das.
ich gehe davon aus, dass in Tabelle1 die Überschrift (Lagerplatz, Feldtyp) in der ersten Zeile liegt.
Sub Aufteilen()
Dim SpalteZiel As Long
Dim Zelle1 As Range
Dim Zelle2 As Range
SpalteZiel = 1
With Sheets("Tabelle1")
.Range("A:B").Sort key1:=.Cells(1, 2), order1:=xlAscending, Header:=xlYes
Set Zelle2 = .Cells(1, 2)
Do
Set Zelle1 = Zelle2.Offset(1, 0)
If Zelle1.Value = "" Then Exit Sub
Set Zelle2 = .Columns(2).Find(what:=Zelle1.Value, searchdirection:=xlPrevious)
With Sheets("Tabelle2")
.Cells(1, SpalteZiel).Value = Zelle1.Value
.Cells(3, SpalteZiel).Resize(1, 2).Value = Zelle1.Worksheet.Range("A1:B1").Value
Range(Zelle1.Offset(0, -1), Zelle2).Copy Destination:=.Cells(4, SpalteZiel)
End With
SpalteZiel = SpalteZiel + 3
Loop
End With
End Sub
Gruß Daniel

Anzeige
AW: Beispiel
29.04.2015 21:30:58
Sandra
Hallo Daniel,
schau scho mal gut auch. ABER kann man die Reihenfolge so machen wie im Tabelle 2 von meinen Test machen.
Zuerst KP2_CCG2
Dann KP2_CCG1
Dann KL_KKK2
Und wichtig ist, es muß in einen Tabellenblatt ( Tabelle 1 ) sein.
Ich habe Tabelle 2 nur eingefügt, damit du siehst wie es zum Schluss aussehen sollte.
Danke erstmal für eine kostbare Zeit
LG Sandra

AW: Beispiel
30.04.2015 08:19:33
Daniel
Mach folgende Änderungen
order1:=xlAscending in order1:=xlDescending.
SpalteZiel = 1 in SpalteZiel = 4
With Sheets("Tabelle2") in With Sheets("Tabelle1")
Und fúge vor dem letzten End With noch die Zeile ein
.Range("A:C").Delete
Gruß Daniel

Anzeige
Ah Super Danke für ALLES :-)
30.04.2015 16:59:08
Sandra
.

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige