Office: Maximalgröße von CurrentRegion?

Helfe beim Thema Maximalgröße von CurrentRegion? in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, in meinen Tabellen ändern sich ständig die Daten, mal stehen mehr, mal weniger untereinander usw. Da ist CurrentRegion sicherlich die beste... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von CreatorX, 4. Januar 2009.

  1. Maximalgröße von CurrentRegion?


    Hallo, in meinen Tabellen ändern sich ständig die Daten, mal stehen mehr, mal weniger untereinander usw. Da ist CurrentRegion sicherlich die beste Möglichkeit um ganze Datensätze dynamisch auszusuchen. Aber gibt es die Möglichkeit festzulegen bis zu welcher Spalte mein Datensatz markiert/kopiert wird?

    :)
     
    CreatorX, 4. Januar 2009
    #1
  2. Moin, CreatorX,

    per se reicht der die angegebene Zelle umgebende Bereich bis zur ersten durchgängigen Leerzeile bzw -spalte.

    Code:
     
  3. Ok ich habs versucht zu verstehen. So wie der Code ist, kopiert er aber nur eine, die aktuelle, Zeile.
    Ich denke mir, du möchtest auf den Befehl Offset herraus. Könntest du mir das eventuell genauer erklären?
     
    CreatorX, 6. Januar 2009
    #3
  4. Maximalgröße von CurrentRegion?

    Moin, CreatorX,

    von einer Zelle aus kann man sowohl die Anzahl der Zeilen (Angabe hier 0, daher die Zeile der aktiven Zelle) als auch die Anzahl der Spalten (hier 5) festlegen. Dazu kann man von der aktiven Zelle aus die Vorgehensweisen

    Code:
    Code:
    entweder als Variablen verwenden oder direkt im Code mit einer With-Anweisung einsetzen...
     
  5. Ok, ich hab den Code jetzt angepasst und hoffe das es so gemeint war:
    Code:
    Jetzt wär nur noch die Frage, wie ich die Variablen anwenden kann, also wie weiß Excel jetzt wie groß der zu markierende/kopierende Bereich sein muss, bzw. wie funktionieren die Variablen richtig? Bis jetzt kopiert er mir nur eine, die markierte, Zelle.
     
    CreatorX, 6. Januar 2009
    #5
  6. Hallo CreatorX,

    versuch mal folgendes:

    Code:
    Kopiert wird der Bereich von der Zeile der aktiven Zelle bis zum letzten Datensatz, bei dem in Spalte A in ununterbrochener Reihenfolge noch etwas drinsteht, und von Spalte B bis Spalte F.

    Gruß Ingolf
     
  7. Super, das ist genau das was ich gesucht habe. Das löst auch gleich ein paar andere Probleme die ich bisher nur manuell beheben konnte.
    Jetzt hätte ich nur noch das Problem, dass ich zwischen der letzten zu kopierenden Spalte und der die rechts daneben liegt, einen Rahmen habe, der nicht mitkopiert bzw. nicht mit ausgedruckt werden soll.
    Also nachdem ich den Code für meine Tabelle angepasst habe, sieht er jetzt so aus:
    Code:
    So ist also zwischen K und L eine Linie die nach unten fürht. Wie kann diese beim Kopieren ausgelassen werden?
     
    CreatorX, 7. Januar 2009
    #7
  8. Maximalgröße von CurrentRegion?

    Hallo CreatorX,

    das müsste in der Kopie dann die Spalte R/S sein, oder? Mit folgender Erweiterung wird der rechte Rahmen der gesamten Spalte R wieder gelöscht.

    Code:
     
  9. Vielen dank, genau das ist es! Ihr seit die Besten.
     
    CreatorX, 7. Januar 2009
    #9
  10. Ok, jetzt muss ich doch noch mal nerven, da ich zwar meine Auswahl dynamisch bestimmen kann, aber das Aussuchen immernoch manuell einstellen muss. Ist es auch möglich den Startpunkt oben und den Endpunkt unten zu bestimmen?

    Zum Startpunkt oben:
    Also es wird ja jetzt mit der ersten Zeile die ich markiert habe begonnen. Das heißt ich bräuchte in VBA immer nur die Zeile markieren in der es Los geht. Ändert sie sich nicht oder ist der Startpunkt immer die 1. Zeile , ist das auch kein Problem. Wenn sich aber der Startpunkt nach unten verschiebt, weil darüber ein paar mehr Zellen hinzugefügt wurden, wie mache ich Excel nun klar das der Startpunkt jetzt wo anders ist?
    Ich habe dazu mal ein Beispiel angehängt. Datensatzt 1 wäre da ja kein Problem aber wie mache ich das wenn ich Datensatzt 2 kopieren möchte, unter der Vorraussetztung, dass sich Datensatzt 1 immer wieder vergrößert/verkleinert?

    Zum Endpunkt unten:
    Dieser wird ja jetzt mit
    Code:
    bestimmt, also der ersten "freien Stelle" nach dem Startpunkt in A. Ist es auch möglich da, die zweite oder dritte usw. freie Stelle auszuwählen? Alternativ währe hier auch genauso eine Lösung wie ich sie zum Startpunkt bräuchte.
    Danke schonmal und ich hoffe das mir hier nochmal geholfen werden kann.
     
    CreatorX, 7. Januar 2009
    #10
  11. Hallo CreatorX,

    mit folgendem Makro wirst du aufgefordert, eine Zelle in der ersten und der letzten zu kopierenden Zeile zu markieren:

    Code:
     
  12. Ich danke dir für deine Bemühungen, allerdings bräuchte ich eine Lösung die selbständig erkennt wo Datensatz 1 aufhört und besonders wo Datensatz 2 anfängt und dass auch dann wenn sich Datensatz 1 von der Länger her ändert.
     
    CreatorX, 8. Januar 2009
    #12
  13. OfficeUser Neuer User

    Maximalgröße von CurrentRegion?

    Hallo CreatorX,

    wenn ich es richtig verstanden habe, suchst Du in der Tabelle den "Datensatz 2", möchtest den gesamten zusammenhängenden Block (jedoch nur bestimmte Spalten) kopieren und den Zielbereich umrahmen ?!?

    Genau DAS macht folgendes Makro :
    VBA-Code:
    Sub KopierenDatensatz()
        '09.01.2009, NoNet
        Dim rngQuellbereich As Range
        Dim rngZielbereich As Range
        Dim rngSpalten As Range
        Dim intSeite As Integer     'die 4 Seiten xlEdgeLeft,xlEdgeTop, xlEdgeBottom, xlEdgeRight

        Set rngSpalten = [G:K]      'nur die Daten dieser Spalten werden kopiert
        Set rngZielbereich = [N1]   'Hierhin wird der Datenblock kopiert

        Set rngQuellbereich = rngSpalten.Find("Datensatz 2") 'Überschrift "Datensatz 2" wird gesucht
        If Not rngQuellbereich Is Nothing Then
            Intersect(rngQuellbereich.CurrentRegion, rngSpalten).Copy rngZielbereich
            'Kopierten Datenblock mit einfacher Linie umrahmen :
            With rngZielbereich.Resize( _
                    rngQuellbereich.CurrentRegion.Rows.Count, rngSpalten.Columns.Cou nt)
                For intSeite = xlEdgeLeft To xlEdgeRight 'links oben, unten, rechts
                    With .Borders(intSeite)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                        .ColorIndex = xlAutomatic
                    End With
                Next
            End With
        Else
            MsgBox "Überschrift des Quellbereiches wurde nicht gefunden !", vbOKOnly, "Fehler : nichts kopiert"
        End If

        'Speicher für Variablen in umgekehrter Reihenfolge wieder freigeben :
        Set rngQuellbereich = Nothing
        Set rngZielbereich = Nothing
        Set rngSpalten = Nothing
    End Sub
    Code eingefügt mit Syntaxhighlighter 4.15
     
    OfficeUser, 8. Januar 2009
    #13
  14. Das sieht wirklich gut aus. Super. Zwischen "With" und "End With" war übrigens ein Syntaxfehler. Aber nicht weiter schlimm. Ich glaube jetzt bleiben keine Fragen mehr offen. Hoffe ich *biggrin.gif*. Danke nochmal an euch!
     
    CreatorX, 8. Januar 2009
    #14
  15. OfficeUser Neuer User
    Hallo,

    CreatorX stellte per PN die folgende weiterführende Frage, die ich jetzt einfach mal 1:1 in den Thread kopiere (freundlicher Hinweis mit Bitte um Fortführung des Themas im Thread und nicht per PN folgt noch *wink.gif* ) :

    Hallo CreatorX,

    ja, das war im Code beabsichtigt, da ich davon ausging, dass immer nur der aktuelle Datenbestand des "Datensatz 2" im Zielbereich stehen soll.
    Mit nachfolgendem geänderten Code wird der "Datensatz 2" immer direkt unter den aktuellen Zielbereich fortgeschrieben :

    VBA-Code:
    Sub KopierenDatensatz()
        '09.01.2009, NoNet, angepasst am 12.01.2009
        Dim rngQuellbereich As Range
        Dim rngZielbereich As Range
        Dim rngSpalten As Range
        Dim intSeite As Integer     'die 4 Seiten xlEdgeLeft,xlEdgeTop, xlEdgeBottom, xlEdgeRight

        Set rngSpalten = [G:K]      'nur die Daten dieser Spalten werden kopiert
        Set rngZielbereich = [N1]   'Hierhin wird der Datenblock kopiert

        Set rngQuellbereich = rngSpalten.Find("Datensatz 2") 'Überschrift "Datensatz 2" wird gesucht
        If Not rngQuellbereich Is Nothing Then
            If rngZielbereich.Value <> "" Then
                 'Zielbereich anpassen : UNTER den aktuellen Zielbereich kopieren !
                Set rngZielbereich = rngZielbereich.CurrentRegion.Offset( _
                    rngZielbereich.CurrentRegion.Rows.Count)(1, 1)
                'Wenn Zielbereich nicht leer ist : Quellbereich anpassen : Ohne Überschrift
                Set rngQuellbereich = rngQuellbereich.CurrentRegion.Offset(1).Resize( _
                    rngQuellbereich.CurrentRegion.Rows.Count - 1)
            Else
                Set rngQuellbereich = rngQuellbereich.CurrentRegion
            End If

            Intersect(rngQuellbereich, rngSpalten).Copy rngZielbereich

            'Kopierten Datenblock mit einfacher Linie umrahmen :
            With rngZielbereich.CurrentRegion.Resize(, rngSpalten.Columns.Count)
                'Alte Rahmenlinien zunächst löschen :
                .Borders(xlInsideVertical).LineStyle = xlNone
                .Borders(xlInsideHorizontal).LineStyle = xlNone
                For intSeite = xlEdgeLeft To xlEdgeRight 'links oben, unten, rechts
                    With .Borders(intSeite)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                        .ColorIndex = xlAutomatic
                    End With
                Next
            End With
        Else
            MsgBox "Überschrift des Quellbereiches wurde nicht gefunden !", vbOKOnly, "Fehler : nichts kopiert"
        End If

        'Speicher für Variablen in umgekehrter Reihenfolge wieder freigeben :
        Set rngQuellbereich = Nothing
        Set rngZielbereich = Nothing
        Set rngSpalten = Nothing
    End Sub

    Code eingefügt mit Syntaxhighlighter 4.15
     
    OfficeUser, 12. Januar 2009
    #15
Thema:

Maximalgröße von CurrentRegion?

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden