Autor
|
Thema: Excel-kopieren (1573 mal gelesen)
|
Demokrat2000 Mitglied
Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 27. Jan. 2005 11:04 <-- editieren / zitieren --> Unities abgeben:
Hallo q all, ich habe hier ne riesige Menge an Exceldaten. Jetzt muß ich jede 10.Zeile kopieren und die in einem neuen Excelblatt hintereinander einfügen. Leider habe ich bis es noch nicht herausfgefunden, wie das mit den beiden Laufvariablen funzt. Ich habe schon versucht mir ein Makro aufzuzeichnen und daher den Code zu übernhemen aber naja ich müßte das für jede Zeile schreiben und d a geht es wahrscheinlich schneller, wenn man es von hand macht. Kann mir einer von Euch nen Tipp geben. Ich möchte mich jetzt schon mal für Eure Hilfe bedanken :-) MfG Demokrat2000 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 27. Jan. 2005 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für Demokrat2000
Hi Martin, mit: Cells(Rows.Count, 1).End(xlUp).Row ermittelst Du die Zeilennummer der letzten belegten Zelle in Spalte A. HTH Nancy
Code:
Sub x() Dim i As Long Sheets.Add With Sheets("Tabelle1") 'Datentabelle For i = 10 To .Cells(Rows.Count, 1).End(xlUp).Row Step 10 'letzte belegte Zeile+1 in Activesheet = .Rows(i) Rows(Cells(Rows.Count, 1).End(xlUp).Row + 1) = .Rows(i).Value Next End With End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 27. Jan. 2005 14:30 <-- editieren / zitieren --> Unities abgeben:
Hey Nancy, mhh wie sage ich ihm denn, das er mir das in nem anderen Datenblatt reinschreiben soll?Bis jetzt habe ich noch Tabelle 1, wo die Daten drinne stehen und danach, soll er mir das in Tabelle2 schreiben? Ich dachte, das er es mir vielleicht mit Set Worksheets("Tabelle2").Range("A1")=rows.values(i) machen könnte aber Fehlanzeige. Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 27. Jan. 2005 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für Demokrat2000
> Set Worksheets("Tabelle2").Range("A1")=rows.values(i) Martin, na da würde ich aber auch nen Error melden ;-)) Okay, dann eben mal ohne ein neues Blatt einzufügen, und über eine Objectvariable brauchst Du hier nicht unbedingt gehen.
Code: Sub x() Dim i As Long With Sheets("Tabelle1") 'Datentabelle For i = 10 To .Cells(Rows.Count, 1).End(xlUp).Row Step 10 Sheets("Tabelle2").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 1) = .Rows(i).Value Next End With End Sub
Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 27. Jan. 2005 15:34 <-- editieren / zitieren --> Unities abgeben:
hallo Nancy, naja schon mal gar nicht so schlecht :-) ABER :-) er schreibt alles immer nur in eine zeile er geht nicht weiter. Dachte vielleicht,dass man das so schreiben könnte aber naja er überschreibt immer noch die selben Zeilen. Private Sub CommandButton1_Click() Dim i As Long With Sheets("Tabelle2") 'Datentabelle For i = 10 To .Cells(Rows.Count, 1).End(xlUp).Row Step 10 Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 1) = .Rows(i).Value If Worksheets("Tabelle1").Range("A280") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 2) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A280") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 3) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A280") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 4) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A280") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 5) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A280") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 6) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A280") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 7) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A286") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 8) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A287") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 9) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A288") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 10) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A289") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 11) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A290") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 12) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A291") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 13) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A292") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 14) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A293") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 15) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A294") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 16) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A295") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 17) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A296") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 18) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A297") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 19) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A298") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 20) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A299") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 21) = .Rows(i).Value End If If Worksheets("Tabelle1").Range("A300") <> 0 Then Sheets("Tabelle1").Rows(Cells(Rows.Count, 1).End(xlUp).Row + 22) = .Rows(i).Value End If Next End With Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 27. Jan. 2005 15:38 <-- editieren / zitieren --> Unities abgeben:
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 27. Jan. 2005 15:55 <-- editieren / zitieren --> Unities abgeben: Nur für Demokrat2000
Ehm ... *schluck* ;;-)) Martin, wenn ich das richtig sehe, bügelst Du 'zig mal Rows(i) nach Tabelle1 rüber??? Bin mir momentan nicht so ganz im Klaren, was Du erreichen möchtest? Wenn der i-Zähler mitgehen soll, dann aber auch jeweils Rows(i+1), Rows(i+2), Rows(i+x) ??? Vielleicht kannst Du aber mal eine kleine Beispielmappe uppen? Was die erste freie Zeile in der Kopietabelle angeht, würde ich am Ende der Prozedur quick 'n dirty: rows(1).delete machen ;-)) Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 27. Jan. 2005 16:16 <-- editieren / zitieren --> Unities abgeben:
|
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 27. Jan. 2005 17:07 <-- editieren / zitieren --> Unities abgeben: Nur für Demokrat2000
Ooooops, da im ersten Code mit Sheets.Add automatisch im Activesheet die Musik spielte, hab ich dann beim zweiten das tricky 2. Sheets("Tabelle2") vergessen, weil nicht probiert - sorry :-( Die Zeile hätte müssen heissen: Code:
Sheets("Tabelle2").Rows(Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1) = .Rows(i).Value
Hier nun trotzdem nochmal etwas anders, mal ohne with dafür mit zwei Zählern Gruss Nancy
Code:
Sub x() Dim i As Long, x As Long, y As Long 'letzte belegte Zeile im Datensheet x = Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row For i = 10 To x Step 10 'jeweils letzte belegte Zeile+1 in der Kopietabelle y = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1 Sheets("Tabelle2").Rows(y) = Sheets("Tabelle1").Rows(i).Value Next Sheets("Tabelle2").Rows(1).Delete End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002
|
erstellt am: 27. Jan. 2005 17:08 <-- editieren / zitieren --> Unities abgeben: Nur für Demokrat2000
Demokrat2000 probiers mal damit: Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then CopyRows 2, 10 End If End Sub Public Sub CopyRows(ByVal FirstRow As Long, _ ByVal RowDiff As Long) Dim Counter As Long On Error GoTo ErrorHandler Do Until ActiveWorkbook.Worksheets("Tabelle1").Cells(FirstRow, 1) = "" Counter = Counter + 1 ActiveWorkbook.Worksheets("Tabelle2").Rows(Counter).Value = _ ActiveWorkbook.Worksheets("Tabelle1").Rows(FirstRow).Value FirstRow = FirstRow + RowDiff Loop Exit Sub ErrorHandler: MsgBox "Fehler" End Sub HTH pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Systemplaner (m/w/d) ? Versorgungstechnik | GOLDBECK?realisiert zukunftsweisende Immobilien in Europa. Wir verstehen Gebäude als Produkte und bieten alle Leistungen aus einer Hand: vom Design über den Bau bis zu Services im Betrieb. Aktuell beschäftigt unser Familienunternehmen mehr als 12.000 Mitarbeitende an über 100 Standorten bei einer?Gesamtleistung von über 6 Mrd. Euro. Unser Anspruch ?building?excellence? steht dabei für Spitzenleistungen ... | Anzeige ansehen | Gebäude-, Versorgungs-, Sicherheitstechnik |
|
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 27. Jan. 2005 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für Demokrat2000
alternativ ohne Marko in einer freien Spalte =REST(ZEILE(1:1);10) eingeben zb Zelle M1 runterkopieren bis Datenbestandende Autofilter setzen, nach dem gewünschtem Rest filtern, markieren, kopieren und in ein neues Blatt einfügen ist halt Handarbeit aber in manchen Fällen unerlässlich... zb. man will nur die Zeilen Kopieren die die Primzahlbilden ... ...wer weiss was für unglückliche Arbeitsaufgaben einem so gestellt werden in einer freien Zelle der 2ten Zeile {=WENN(SUMME(WENN(REST(ZEILE(2:2);ZEILE(INDIREKT("2:"&ZEILE(2:2)-1)));0;1));"";"PRIMZAHL")} eingeben, filtern und Kopieren gruss Thomas [Diese Nachricht wurde von Thomas Harmening am 27. Jan. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |