Hilfe, bitte! Zeile einfügen über bestimmtem Wert innerhalb eines Zellbereichs

  • Excel

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Carteloni.

    Hilfe, bitte! Zeile einfügen über bestimmtem Wert innerhalb eines Zellbereichs

    Hallo zusammen

    Ich würde mich um Untersützung freuen bei meinem aktuellen Problem:

    habe ein makro aufgesetzt (das scheint mir aber verkehrt zu laufen, oder besser gesagt gar nicht)

    möchte wie im bild ersichtlich via Klick auf die rote schaltfläche eine zeile über jener Zeile wo die 3 drin steht einfügen

    Ich bekomms aber leider partout nicht hin.

    Hier noch mein Code bis anhin (das next am schluss ist da, weil ich das ganze prozedere später in einer anderen spalte auch noch machen will):

    Sub Rechteck1_BeiKlick()
    '
    ' Rechteck1_BeiKlick Makro
    ' Makro am 10.09.2010 von Cartel aufgezeichnet
    '

    '
    Sheets("Tabelle1").Select
    ActiveSheet.Unprotect

    Dim wksA As Worksheet
    Dim lngLetzteZeile As Long
    Dim lngZeile As Long
    Set wksA = ActiveSheet

    lngLetzteZeile = wksA.Cells(wksA.Rows.Count, 2).End(xlUp).Row
    For lngZeile = 12 To 1 Step -1
    If wksA.Cells(lngZeile, 2).Value = 3 Then
    wksA.Rows.Select
    Selection.Insert Shift:=xlUp
    End If
    Next

    ActiveSheet.Protect
    Bilder
    • Zelle einfügen über der 3.jpg

      65,68 kB, 392×316, 201 mal angesehen
    Das sollte dann meine Zeile mit der 3 drin sein, und oberhalb von dieser zeile soll eine neue eingefügt werden.

    Die 2. Variante, die ich mir vorstellen könnte wäre auch, dass das gelbmakrierte mein Zellenbereich x ist, und dass ich mein makro auf diesen Bereich auslegen könnte um den bereich in der untersten Zeile um 1 zeile zu erweitern. Aber bei dieser variante bin ich von vorn herein zu keinem zwischenergebnis gekommen

    hab jetzt noch ein buch gekauft und versucht mehr über bedingtes einfügen herauszufinden, aber iergendwie komm ich da trotzdem nicht vom fleck, bin eigentlich auch eher ein neuling im gebiet vba.

    wüsstest du evtl. eine lösung?
    Ich hatte gehofft meine Anspielungen hätten dir weiter geholfen.

    Hier selektierst du alle Zeilen. Das ist bestimmt nicht deine Absicht

    Quellcode

    1. wksA.Rows.Select


    Damit würdest du vor die erste Zeile deine zusätzliche Zeile einfügen.




    Vielleicht ist das hier eher das was du erreichen wolltest?

    Quellcode

    1. Sub test()
    2. Sheets("Tabelle1").Select
    3. ActiveSheet.Unprotect
    4. Dim wksA As Worksheet
    5. Dim lngLetzteZeile As Long
    6. Dim lngZeile As Long
    7. Set wksA = ActiveSheet
    8. lngLetzteZeile = wksA.Cells(wksA.Rows.Count, 2).End(xlUp).Row
    9. For lngZeile = lngLetzteZeile To 1 Step -1
    10. If wksA.Cells(lngZeile, 2).Value = 3 Then
    11. Rows(lngZeile & ":" & lngZeile).Select
    12. Selection.Insert Shift:=xlDown
    13. End If
    14. Next
    15. ActiveSheet.Protect
    16. End Sub


    Die Programmzeile
    Rows(lngZeile & ":" & lngZeile).Select
    lässt sich bestimmt auch eleganter schreiben, war jetzt aber zu faul nachzulesen.
    Zuerst mal, danke vielmal!! das makro funktioniert wie ein frisch geöltes getriebe.

    Die Passage mit dem "wksA.Rows.Select" hätte ich sehen müssen, da hast du recht.

    Habe deine Arbeit noch ein wenig erweitert, weil die 3 will ich eigentlich auf dem tabellenblatt nicht sehen, sie soll mir nur als referenz/Orientierungspunkt helfen, somit lass ich die jeweils ausblenden


    Falls du mir bei einem 2. vba problem noch helfen könntest wäre ich dir sehr dankbar, hab da nämlich noch was weiteres was mich juckt und ich nicht auf die reihe kriege, und bin jetzt bis halb 2 morgens schon an diesem werk:

    Sub Rechteck1_BeiKlick()
    '
    ' Rechteck1_BeiKlick Makro
    ' Makro am 13.09.2010 von Cartel aufgezeichnet
    '

    Sheets("Tabelle1").Select
    ActiveSheet.Unprotect

    Dim werte As Range
    Dim Anz As Integer
    Dim wksA As Worksheet
    Dim lngLetzteZeile As Long
    Dim lngZeile As Long
    Set wksA = ActiveSheet
    Set werte = wksA("Tabelle1").Range("xxx1" And "xxx2") (ich kann da iergendwie nicht beide Zellbereiche markieren)

    Anz = Application.WorksheetFunction.CountIf(werte, <> 0)

    Sheets("Tabelle2").Select
    ActiveSheet.Unprotect

    Selection.Insert Shift:=AnzDown (müsste das so gehen?)
    End If

    Next

    End Sub

    -------------------

    Bemerkung zum makro: xxx1 und xxx2 sind zwei gleich grosse zellbereiche in 2 verschiedenen spalten

    Was ich da genau erreichen möchte ist folgendes:

    1. das makro zählt in tabelle1 in den Zellbereichen xxx1 und xxx2 die Anzahl Zeilen, wo auf der selben höhe nicht zwei 0 vorkommen

    2. das makro nimmt jetzt die erhaltene Anzahl und fügt soviele Zeilen in tabelle2 ab zeile 10 neu ein.

    Könntest du mich da noch beraten?

    Besten Dank nochmals für deine Hilfe!!

    Carteloni schrieb:

    Set werte = wksA("Tabelle1").Range("xxx1" And "xxx2")

    Nimm statt AND ein Komma vielleicht geht das bei deinem Problem

    Carteloni schrieb:

    Selection.Insert Shift:=AnzDown (müsste das so gehen?)
    bei mir gibt es nur

    xlDown
    xlToLeft
    xlToRight
    xlUp

    Aber AnzDown kennt das System bei mir nicht.
    Wie wäre es, wenn du die Macroaufnahmefunktion von Excel mal studieren würdest.
    Damit kannst du am meisten lernen. Denn VBA funktioniert meist so, wie man es
    auch 'per Hand' machen würde.
    Ja genau Lightsource, das Auswählen der Zellen stimmt dann so auch mit dem Komma (,), also ich krieg beide Spalten zur Selektion.

    was bei mir aber noch immer nicht geht ist das Folgende, nämmlich dass mir das Makro in diesen augewählten Spalten die Zeilen durchsucht auf Wertbereiche die ungleich Null sind (vgl. Beispiel)

    @Fonsi: Das mit dem Recorder bin ich fleissig am Ausprobieren, nur da krieg ich das eben auch nicht hin, wie ich mit dem Makro am Ende mehrere Zellen auf einemal einfügen kann, und im besten Fall wären diese mehreren Zellen eben das Resultat aus der Anzahl, die ich durch das Vergleichen der beiden Spalten erhalte

    Danke bereits im Voraus für eure Bemühungen und weitere konstruktive Antworten
    Bilder
    • Spaltenbeispiel.jpg

      81,98 kB, 542×347, 199 mal angesehen

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

    Schreibe als Formel in F3 bis F7
    =ODER(B3;D3)
    =ODER(B4;D4)
    etc.
    bis =ODER(B7;D7)

    In F9 schreibe
    =ZÄHLENWENN(F3:F7;WAHR)

    Das wäre zumindest das, was ich aus deinem Satz auf deinem Bild verstanden hatte.
    Ich denke das müsste auch auf deiner "nicht Originalsoftware" funktionieren. :S
    die version ist für mich zum üben :) - da kann ich wüten drauf, was mir manchmal das ganze programm ein wenig durch den wind schiesst..



    eine funktion einbauen wäre schon recht gut, aber mit der ODER Funktion von dir, krieg ich leider immer ein resultat wenn da iergendwo eine null steht.

    Mein Ziel wäre, dass ich unterscheiden kann ob da auf der selben Zeile in den beiden Spalte iergendwo zwei Nullen vorkommen. Wenn iergendwo auf der Zeile in einer der beiden Spalte eine Zahl (ungleich 0) steht, so soll die Zeile gezählt werden. Und mit diesem Ergebnis am Schluss, die Anzahl Zeilen, mit denen möchte ich dann weiterarbeiten.

    Konkret möchte ich ja dann die Anzahl verwenden um zu sagen, jetzt soll mir das Makro gemäss gezählten Zeilen, soviele Zeilen im anderen Tabellenblatt einfügen.

    Denkt ihr da lässt sich noch was machen?
    Natürlich lässt sich da etwas machen.
    Versuche dich mal mit den 'WENN' Funktionen von Excel.
    Da kannst du dann alles so zusammenknoten wie du es gerne hättest.
    Vor allem schreib dir selbst erst mal formelartig auf was du willst:
    Wenn B2 und F2 <> 0, dann Ergebnis: 1
    oder ähnlich...
    Dann lässt es sich später leichter umsetzen.