Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
952to956
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
952to956
952to956
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Spalten in richtige Reihenfolge sortieren

Spalten in richtige Reihenfolge sortieren
21.02.2008 08:15:54
Thomas
einen schönen guten Morgen (nur mehr 107 Tage bis zur Euro 2008...)
ich habe weiter untenstehenden Code schon einmal in das Forum gestellt, das damalige problemchen wurde mir gelöst, ganz tolles danke dafür....
Mit diesem Code werden die Spalten nach gewissen Kriterien sortiert (ABER >> leider noch nicht ganz richtig)
Ausgangsituation:
Aus einer Datenbank werden Daten ins Excel (über eine Vorlage) exportiert. Mittels Makro werden `mal unnötige Spalten (können bis zu 100 sein, je nachdem was der einzelne User in seiner DB eingestellt hat, das heißt die Spaltenreihenfolge ist von Export zu Export unterschiedlich) gelöscht. Danach soll folgender Code die Spalten "richtig" sortieren.

Sub richtigeReihenfolge()
Dim i As Integer
Dim y As Integer
Dim rng As Range
Application.ScreenUpdating = False
Sheets("Anschrift").Activate
Rows("3:6").Select
Selection.Clear
With Sheets("Anschrift")
Set rng = Rows("7:7")
rng.Select
y = Application.WorksheetFunction.CountA _
(Rows(ActiveCell.Row))
For i = y To 1 Step -1
Cells(7, i).Select
Select Case Cells(7, i).Value
Case "Vertrag Nr."
With Columns(i)
If Not Cells(7, 1).Value = "Vertrag Nr." Then
.Select
.Cut
Range("A:A").EntireColumn.Insert
End If
End With
Case "Spartengruppe"
With Columns(i)
If Not Cells(7, 2).Value = "Spartengruppe" Then
.Select
.Cut
Range("B:B").EntireColumn.Insert
End If
End With
Case "Sparte"
With Columns(i)
If Not Cells(7, 3).Value = "Sparte" Then
.Select
.Cut
Range("C:C").EntireColumn.Insert
End If
End With
Case "Risiko1"
With Columns(i)
If Not Cells(7, 4).Value = "Risiko1" Then
.Select
.Cut
Range("D:D").EntireColumn.Insert
End If
End With
Case "ZW"
With Columns(i)
If Not Cells(7, 5).Value = "ZW" Then
.Select
.Cut
Range("E:E").EntireColumn.Insert
End If
End With
Case "FGP"
With Columns(i)
If Not Cells(7, 6).Value = "FGP" Then
.Select
.Cut
Range("F:F").EntireColumn.Insert
End If
End With
Case "Ablauf"
With Columns(i)
If Not Cells(7, 7).Value = "Ablauf" Then
.Select
.Cut
Range("H:H").EntireColumn.Insert
End If
End With
End Select
Next i
End With
Application.ScreenUpdating = True
End Sub


Sortieren tut das Makro, aber fast "irgendwie" >> ;-(
Das Problem wird sein, dass wenn mittels vba z.B. die Spalte "Vertrag-Nr." gefunden wird, diese richtigerweise in die Spalte A verschiebt. Sollte nun als nächstes, zum Beispiel, die Spalte "Sparte" gefunden werden, wird diese sicherlich auch richtig in die Spalte C verschoben.
Nun kommt das große ABER, wird erst jetzt die Spalte "Spartengruppe" gefunden, dann verschiebt das makro diese - richtigerweise - in Spalte B, JEDOCH wird damit automatisch die vorher in Spalte C eingefügte Datenreihe (Sparte) um eins nach rechts (also Sparte D) verschoben.
Wie kann man dies richtig gestalten (leider können wir beim DB-Export nix umstellen...)? Denn die richtige Reihenfolge ist für das "Weiterverarbeiten" notwendig.
Als Lösung habe ich mir gedacht, dass ich die Spalte in der die Datenreihe sich zum vVrschieben befindet nach dem Befehl "Ausschneiden" noch "Lösche" und über den Befehl .Insert Shift:=xlTo Right in die richtige Spalte verschiebe. Ist das sinnvoll? gibt es elgantere Möglichkeite. Grundsätzlich soll das Makro so "dynamisch" wie möglich bleiben, ausgenommen die richtige Spaltenreihefolge.
Ich bitte um Hilfestellung bzw. Tipp wie ich das Problemchen am besten löse.
Jedenfalls ein herzliches Dankeschön im Voraus....

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten in richtige Reihenfolge sortieren
21.02.2008 08:31:43
Beverly
Hi Thomas,
versuche das Sortieren mal nach diesem Prinzip

Sub sortieren()
' Code von jinx
Dim strSearch As Variant
Dim intColumn As Integer
Dim bytCounter As Byte
strSearch = Array("Test1", "Test2", "Test3", "Test4") '




AW: Spalten in richtige Reihenfolge sortieren
21.02.2008 08:35:00
Ramses
Hallo
Probier mal
Option Explicit

Sub Sort_Columns()
Dim srcWks As Worksheet, tarWks As Worksheet
Dim srcRange As Range, tarRange As Range
Dim i As Integer, colCounter As Integer, sortArr() As Variant
sortArr = Array("Vertragsnummer", "Spartengruppe", "Anderer Eintrag", "test")
Set srcWks = Worksheets("Sheet1") '("Tabellenname mit ImportDaten")
Set tarWks = Worksheets.Add
Set srcRange = srcWks.Range("A1:IV1")
colCounter = 1
With tarWks
.Name = "Sortierte Spalten"
For i = 0 To UBound(sortArr())
Set tarRange = srcRange.Find(sortArr(i), srcRange.Cells(1, 1))
If Not tarRange Is Nothing Then
srcWks.Columns(colCounter).Copy tarWks.Cells(1, colCounter)
colCounter = colCounter + 1
End If
Next i
End With
End Sub


Du musst in der Variablen "sortArr()" die Reihenfolge deiner Spalten definieren
Danach wird ein neues Blatt erstellt, das genau die Reihenfolge deiner Vorgabe hat.
Es ist hierbei unerheblich wieviele Spalten oder welche Daten importiert werden, das Ergebnis entspricht genau deinen Vorgaben
Gruss Rainer

Anzeige
AW: Spalten in richtige Reihenfolge sortieren
21.02.2008 08:50:04
Thomas
Hallo Rainer,
ganz vielen Dank für die rasche Antwort!

Du musst in der Variablen "sortArr()" die Reihenfolge deiner Spalten definieren


Da ich - ja - Anfänger bin wie muß ich in der Variable "sortArr()" in den Klammern die Spalten definieren?
.... (sortArr("Vertragsnummer", "Spartengruppe" ...)) ?
bitte noch kleine Hilfestellung, dann tu ich mir leichter und bitte zu verzeihen, dass ich mich - so - unbeholfen anstelle, DANKE!
thowe

AW: Spalten in richtige Reihenfolge sortieren
21.02.2008 08:52:00
Ramses
Hallo
Das hat mit Anfänger nichts zu tun, ... allenfalls mit ein klein wenig lesen und Nachdenken.
Du hast eine Vorgabe der Spalten,.. also definiere sie entsprechend.
Du musst sie einfach wie im Beipsiel weiterführen
sortArr = Array("Vertragsnummer", "Spartengruppe", "Anderer Eintrag", "Andere Spalte", "Noch eine Spalte")
Gruss Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige