Zellen auschneiden wenn...

  • Excel

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Dark_Eagle.

    Zellen auschneiden wenn...

    hallo ihr da draußen.
    Ich habe die Boardsuche zwar schon verwendet, auch was gefunden bin damit jedoch net so ganz zurecht gekommen und auf nachfrage wurde leider nicht mehr reagiert (der letzte Post war ü 2 Jahre her...)

    Deshalb Probier ichs nochmal hier und hoffe das ihr mir helfen könnt da alle meine Versuche bisherher ins leere gelaufen sind.


    Ich habe hier folgendes Problem:
    Ich soll die Datei "Reklamationen_für_2012" sheet"Reklamationen" Auswerten. Da diese Datei aber noch weiter Verwendet wird will ich die Sachen die ich brauche Ausschneiden und in einem seperaten "Auswertung"s-Excel (Sheet"Datengrundlage") weiter verwenden. Folgendes Problem:
    Im bereich der Zeilen 6-1000 stehen (von "Reklamationen") Daten. Diese werden wenn sie fertig eingetragen sind in der Spalte A mit einem "x" markiert. Ich will jetzt nur die mit einem x Versehenen Daten Kopieren und die Zeilen dann löschen so das das was verbleibt schön übersichtlich zusammen rutscht. Dazu muss gesagt werden, dass die zeilen die fertig sind nicht aufeinander folgen. Es kann also die Reihe 7, 9,15,16 usw sein. Das ganze soll aus der Datei "auswertung" gestartet werde.
    Auswertung und Reklamationen_für_2012 stehen im gleichen Ordner und das verändert sich auch nicht.


    Hab gedacht das ganze könnte etwa so funktionieren:


    Dim i as Integer
    Dim z as Integer
    z=3
    Windows("Reklamationen_für_2012.xls").Activate
    for i=6 to 1000
    if Zell(i,1) = "x"
    Row(i:i).copy
    Windows("Auswertung.xls").Activate
    Row(z:z).paste (Werte Einfügen)
    z=z+1
    Windows("Reklamationen_für_2012.xls").Activate
    Selection.Delete Shift:=xlUp
    End if
    i=i+1
    end for

    Hoffe ist verständlich was ich meine. Bevor ihr mich alle jetzt Steinigt muss ich sagen ich hab von VBA nicht so wirklich Ahnung bin nur mit dem Makrorecorder groß geworden...

    Hoffe ihr könnt mir weiter helfen.

    lg Dark_Eagle
    Wenn du etwas ausschneidest, dann rutschen die nachfolgenden Zeilen nach oben und dann stimmt der Zähler deines Makros nicht mehr. Besser ist es, wenn du von hinten nach vorn arbeitest. So stören die ausgeschnittenen Zeilen die Zählung nicht.

    Edit:
    Okay. oder einfach das i=i+1 gegen i=i-1 tauschen. Dann bleibt die Reihenfolge erhalten
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Danker Peterfido!!!! Den Anstoß hab ich gebraucht. Habs hinbekommen. Anbei der Code falls mal wieder jemand so ein Problem hat. Schön ist er nicht aber er Funktioniert.

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Sub Copy_Paste(i As Integer, z As Integer)
    2. Windows("reklam.xls").Activate
    3. Rows(i & ":" & i).Select
    4. Selection.Copy
    5. Windows("auswertzung.xls").Activate
    6. Rows(z & ":" & z).Select
    7. Selection.PasteSpecial
    8. Paste:=xlPasteValues,
    9. Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
    10. z = z + 1
    11. Windows("reklam.xls").Activate
    12. End Sub
    13. Sub test()
    14. Dim i As Integer
    15. Dim z As Integer
    16. Dim n As Integer
    17. Windows("reklam.xls").Activate
    18. n = Cells(Cells.Rows.Count, 2).End(xlUp).Row '1=Spalte A
    19. z = 3
    20. For i = n To 6 Step -1
    21. If Cells(i, 1) = "x" Then
    22. Call Copy_Paste(i, z)
    23. Selection.Delete Shift:=xlUp
    24. End If
    25. Next i
    26. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dark_Eagle“ ()

    ja in deiner CopyPaste sub
    das ganze selektieren und Window aktivieren kannste dir schenken
    setze deine workbooks als globale Variablen.

    Visual Basic-Quellcode

    1. Dim wbHierkommtsHer, wbDaSollsHin as workbook

    in deiner

    Visual Basic-Quellcode

    1. sub Test
    2. set wbHierkommtsHer = workbooks("reklam.xls")
    3. set wbDa.....
    4. .
    5. .
    6. .
    7. end sub

    Visual Basic-Quellcode

    1. sub CopyPaste(byval i as integer, byval j as integer)
    2. 'Hier die direkte Zuweisung
    3. wbDaSollsHin.rows(...) = wbHierKommtsHer.paste ....
    4. end sub

    mal so grob als Richtung.. musste noch sauber ausarbeiten.

    Btw... schau mal da rein... schöne Seite zum guten Umgang mit VBA
    online-excel.de/excel/singsel_vba.php?f=78
    Huhu werde ich nachher gleich Ausprobieren, dank dir!!! Aber eine Frage habe ich noch: in "dakommtsher" stehen Formeln, ich will aber nur die Werte kopieren (Inhalte einfügen.Werte). Geht das mit dem zuweisen (= )auch?

    Gruß und Danke schonmal/nochmal

    Darky
    Hab das jetzt wie in der von petaod verlinkten Beschreibung mal Testweise Probiert. Problem: Es werden die Formeln mitkopiert. Wie muss ich den Code anpassen das er nur die Werte übernimmt? (Stichwort: Inhalte Einfügen.Werte)

    Sieht zur zeit so aus:

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim wbHierkommtsHer, wbDaSollsHin As Workbook
    3. Set wbHierkommtsHer = Workbooks("Mappe1.xls")
    4. Set wbDaSollsHin = Workbooks("Mappe2.xls")
    5. wbHierkommtsHer.Worksheets("Tabelle1").Range("A1:e4").Copy _
    6. Destination:=wbDaSollsHin.Worksheets("Tabelle1").Range("A1:e4")
    7. End Sub


    Und das ist ja das eigentliche Problem warum ich net
    wbdasollshin = wbhierkommtsher machen konnte weil der ?( ??? Akzeptiert kein Range ???? ?(
    Wichtig ist halt das nur Werte und KEINE Formeln kopiert werden.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dark_Eagle“ ()

    Darf er sie nicht kopieren oder sollen sie hinterher nicht mehr drin sein?
    Mach doch einfach am Schluss

    Visual Basic-Quellcode

    1. wbDaSollsHin.Worksheets("Tabelle1").Range("A1:e4").Formula = wbDaSollsHin.Worksheets("Tabelle1").Range("A1:e4").Value
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    was bedeutet das ".value"?

    Sie sollen nicht mehr drinn sein. Weil wenn ich die Formeln kopiere ohne die Felder wo sie drauf verweisen, dann kommt ja nur noch murks raus.

    Aber ich probier das ".value" gleich mal aus^^

    Dank dir auf jeden Fall für die Antwort!!!



    Gruß Darky
    Erst mal Großes Danke an Euch beide, Ihr seid genial!!!! Läuft jetzt wunderbar. Dankeschön!!!!

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim wbHierkommtsHer, wbDaSollsHin As Workbook
    3. Dim i As Integer
    4. Dim z As Integer
    5. Dim n As Integer
    6. Set wbDaSollsHin = ActiveWorkbook
    7. Set wbHierkommtsHer = Workbooks("Mappe1.xls")
    8. n = wbHierkommtsHer.Worksheets("1").Cells(Cells.Rows.Count, 2).End(xlUp).Row '1=Spalte A
    9. z = 3
    10. For i = n To 6 Step -1
    11. If wbHierkommtsHer.Worksheets("1").Range("A" & i) = "x" Then
    12. wbDaSollsHin.Worksheets("3").Range("A" & z & ":E" & z) = wbHierkommtsHer.Worksheets("1").Range("a" & i & ":E" & i).Value
    13. z = z + 1
    14. wbHierkommtsHer.Worksheets("1").Range("a" & i & ":E" & i).Delete Shift:=xlUp
    15. End If
    16. Next i
    17. End Sub


    Eine Frage hab ich aber noch. (bzw 2):

    Und zwar wenn Mappe1 nicht geöffnet ist kommt ja jetzt ein Fehler.(Verständlicher Weise) Und da kommen wir zu meiner Frage. Weil die Mappe1 heißt nicht immer Mappe1 sondern immer anders (zb.MappeMai,MappeJuli,MappeJuli2...) was dem Anwender halt immer so einfällt. Ich hab mal irgentwo ein Macro gesehen, da wurde beim Start abgefragt aus welcher Datei die Daten kopiert werden sollen. Nicht als Messegebox, sondern als "Datei.Öffnen" und das die dann "leerkopiert" wird. Weis jemand wie das funktioniert?



    Gruß Darky
    Schau dir mal folgendes an...

    Visual Basic-Quellcode

    1. Application.Dialogs(xlDialogOpen).Show

    Da solltest du dein Problem mit bewältigen können. ALso musste noch bissle was dazu basteln... schau dir Beispiele in der Hilfe an.. is da recht gut beschrieben.
    Hallo FloFuchs

    Kleines Problem große Wirkung. Mit "Application.Dialogs(xlDialogOpen).Show" kann ich jetzt zwar die Mappe öffenen aber wie kann ich diese jetzt weiter verwende? Weil "Application.Dialogs(xlDialogOpen).Show" gibt ja nur ein True zurück, aber keinen Namen den ich verwenden kann. Habs dann so versucht

    Visual Basic-Quellcode

    1. Datei = Application.Dialogs(xlDialogOpen).Show
    2. Set wbHierkommtsHer = ActiveWorkbook


    bzw so:

    Visual Basic-Quellcode

    1. Datei = Application.Dialogs(xlDialogOpen).Show
    2. Set wbHierkommtsHer = worksheet(datei)

    führte aber alles nicht zum erfolg
    Danke jetzt läufts :D das hat mir noch gefehlt^^



    [Edit] ok noch ne kleinigkeit^^

    ".value" übernimmt ja nur die Werte, aber nicht die Formatierung, kann man die auch noch irgentwie mit übertragen?

    Also ein ".Werteübertragen & Formatierung" übertragen?

    [/Edit]

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Dark_Eagle“ ()

    ZielRange = SourceRange.Value
    ist unsauber und bedeutet eigentlich

    Visual Basic-Quellcode

    1. ZielRange.Formula = SourceRange.Value
    Wie leicht ersichtlich ist werden nur die Values kopiert, also ohne Format.

    Wenn du mit Range.Copy arbeitest, wird das Format mitkopiert.

    Visual Basic-Quellcode

    1. SourceRange.Copy ZielRange 'kopiert Formeln und Formate und alles mögliche mehr, eben alles
    2. ZielRange.Formula = ZielRange.Value 'ersetzt die Formeln durch den Wert
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --