Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

EXCEL-Tabelle mit VBA "Vier-Teilen"





Frage

Hallo an Alle, da man hier schon das ein oder andere Mal sehr gut weitergeholfen hat und ich von VBA in EXCEL kaum Ahnung habe, möchte ich hier mal ein weiteres Problem posten: Ich habe ein EXCEL.-Datei die folgendermaßen aufgebaut ist:: A B C D E F G H 1 x x x x x x x x 2 x - - - - - - - 3 - y - - - - - - 4 x x x x x x x x 5 x - - - - - - - 6 - y - - - - - - 7 x x x x x x x x 8 x - - - - - - - 9 - y - - - - - - usw. In der Zelle B3 (B6, B9 usw. -die Größe variert) können folgende Ausprägungen stehen: "2000" "5000" "1000" oder eine andere 4-stellige Zahl. Ich muss nun jeweils die beiden Zeilen über der Zahl (also Zeile1 +2 gehören zu B3, Zeile 4 + 5 gehören zu B6 usw.) auschneiden und in ein seprate Mappe in der ECXCEL Tabelle speichern. Alle "2000"er sollen in die Mappe:"Renten" Alle "5000"er sollen in die Mappe:"Fonds" Alle "1000"er sollen in die Mappe:"Aktien" Alle anderen sollen in dei Mappe:"Sonstige" Dies möchte ich gerne mit einem Makro lösen, da ich das jeden Tag machen muss und die Datenmenge recht umfangreich werden kann. Ich hoffe, ich habe mein Problem verständlich beschrieben. Vielen Dank schonmal für Eure Hilfe Grüße

Antwort 1 von yast2000

Unter Extras kannst Du Makros aufzeichnen, abspeichern und sogar einen Befehl im Menü bzw. ein Icon ablegen.

Hat den Vorteil, dass man sich das VBA anschauen kann, ohne zu programmieren.

St.B.

Antwort 2 von sven0207

Hallo,

ja, ich kenne die Makro-Aufzeichnung, aber in meinem Fall hilft mir das nicht weiter. Die Tabelle ist ziemlich umfangreich und ich muss ja auf jeden Fall das Makro dann anpassen.

Antwort 3 von yast2000

Nein, musst Du nicht! Du musst bloß den Copybereich von vornherein so groß wählen, dass nichts übrigbleibt.

Leere Zellen zu kopieren ist ja nicht verboten.

St.B.

Antwort 4 von sven0207

Sorry, aber ich versteh nicht, wie ich das mit copy und paste machen soll!
Deshalb hab ich mich ja hier ans Forum gewandt!

Antwort 5 von sven0207

Ich weiß z.B. nicht, wie ich diese Bedingungen, als das "2000" in "Renten" usw. bei der Aufzeichnung eines Makros berücksichtigen kann.

Antwort 6 von hjghjgjhgjk

Hallo

Ich wuerde vorschlagen Spalte B einem Array zu uebergeben und dieses abzufahren mit Abtastung auf die Zahlenwerte und anschliessenden Duplizierung in die entsprechende Tabelle

Gruss gast

@yast2000
Das möcht ich doch mal gerne Sehen mit der Makroaufnahme,das geht wohl eher nicht bzw ist unmoeglich

Antwort 7 von sven0207

Hallo Gast,

dein Ansatz klingt nett, aber ich habe leider keine Ahnung, wie ich das programmieren kann, ich bin VBA-Laie!

Kann mir jemand weiter helfen??

Antwort 8 von gast123

hallo Sven

Tabellenname Tabelle1=Quelle
Tabellenname sonstige=rausfallende daten

1 zeile ueberschrift vorrausgesetzt

cu gast

Option Explicit
Sub Auffuellen()
Call EventsOff
Dim zaehler As Long, zeile As Long
Worksheets("Tabelle1").Select
zeile = Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
ReDim matrix(zeile, 3) As Variant
matrix() = Range(Cells(1, 2), Cells(zeile, 2))
For zaehler = 4 To zeile Step 3
If matrix(zaehler, 1) = "1000" Then
zeile = Worksheets("1000").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("1000").Rows(zeile)
End If
If matrix(zaehler, 1) = "2000" Then
zeile = Worksheets("2000").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("2000").Rows(zeile)
End If
If matrix(zaehler, 1) = "5000" Then
zeile = Worksheets("5000").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("5000").Rows(zeile)
End If
If matrix(zaehler, 1) <> "1000" And matrix(zaehler, 1) <> "2000" And matrix(zaehler, 1) <> "5000" Then
zeile = Worksheets("sonstige").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("sonstige").Rows(zeile)
End If
Next zaehler
Call EventsOn
End Sub
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub


Antwort 9 von sven0207

Hallo Gast 123,

super, das war genau das, was ich brauche. Scheint zu funktionieren. Vielen Vielen Dank.

Ein kleines Problem hab ich noch, in der Usprungs-Tabelle sind alle Zellen als Text formatiert, gibt es ein Makro, welches als Text formatierte Zahlen in Zahlen umformatiert?

Vielen Dank an alle für die Hilfe!1

Antwort 10 von sven0207

So, das mit den Zahlen formatiereb hab ich ausnahmsweise selbst hinbekommen.
Vielen Dank noch mal an Alle und speziel gast123.

Grüße

Antwort 11 von gast123

hi sven

korrigierung in diesem abschnitt

aus zeile wird zeile1

gruss gast

zeile1 = Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
ReDim matrix(zeile, 3) As Variant
matrix() = Range(Cells(1, 2), Cells(zeile, 2))
For zaehler = 4 To zeile1 Step 3

Antwort 12 von gast123

hi sven

besser das ganze nochmal

gruss gast 123

Option Explicit
Sub Auffuellen()
Call EventsOff
Dim zaehler As Long, zeile As Long, zeile1 As Long
Worksheets("Tabelle1").Select
zeile1 = Worksheets("Tabelle1").Cells(Rows.Count, 2).End(xlUp).Row
ReDim matrix(zeile1, 3) As Variant
matrix() = Range(Cells(1, 2), Cells(zeile1, 2))
For zaehler = 4 To zeile1 Step 3
If matrix(zaehler, 1) = "1000" Then
zeile = Worksheets("1000").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("1000").Rows(zeile)
End If
If matrix(zaehler, 1) = "2000" Then
zeile = Worksheets("2000").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("2000").Rows(zeile)
End If
If matrix(zaehler, 1) = "5000" Then
zeile = Worksheets("5000").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("5000").Rows(zeile)
End If
If matrix(zaehler, 1) <> "1000" And matrix(zaehler, 1) <> "2000" And matrix(zaehler, 1) <> "5000" Then
zeile = Worksheets("sonstige").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Worksheets("Tabelle1").Rows(zaehler - 2 & ":" & zaehler - 1).Copy Worksheets("sonstige").Rows(zeile)
End If
Next zaehler
Call EventsOn
End Sub
Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub
Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub


Antwort 13 von sven0207

Hallo gast 123,

bisher hat das Makro bei den Tests gut funktioniert.
Was bewirkt denn deine vorgeschlagene Änderung von "zeile" in "zeile1"?

Danke und Grüße
Sven

Antwort 14 von gast123

hi sven

die abtastung des ende der spalte b ist so nicht korrekt,sie wird durch den fehler(der jetzt korrigiert ist) verkuerzt

gruss gast123