Microsoft Excel

Herbers Excel/VBA-Archiv

range-objekt

    Betrifft: range-objekt von: joel
    Geschrieben am: 02.09.2003 15:23:12

    hallo

    hab ein range-objekt X
    aus diesem möchte ich nun ein neues range-objekt Y, sodass
    Y die felder von X enthält, die die bedingung Z erfüllen.

    hab mal ne funktion irgendwo gesehen, weiss aber nicht mehr wo. hat sie jemand präsent?

    vielen dank, gruss joel

      


    Betrifft: Aus großem Bereich einen kleinen Bereich machen von: Boris
    Geschrieben am: 02.09.2003 15:42:41

    Hi Joel,

    in dem Stil:

    Option Explicit

    Sub neuerBereich()
    Dim Bereich As Range
    Dim Bereichneu As Range
    Dim C As Range
    Set Bereich = [a1:c10]
    For Each C In Bereich
        If C = "a" Then
            If Bereichneu Is Nothing Then
                Set Bereichneu = C
            Else
                Set Bereichneu = Application.Union(Bereichneu, C)
            End If
        End If
    Next C
    Bereichneu.Select
    End Sub
    


    Im Beispiel ist der Bereich A1:C10. Überprüft werden alle Zellen auf "a" - und aus diesen Zellen setzt sich dann der neue Bereich zusammen (der hier testweise am Ende selektiert wird).

    Grüße Boris


      


    Betrifft: danke, gibts keine funktion? von: joel
    Geschrieben am: 02.09.2003 15:48:04

    hall boris

    danke für deinen code. eigentlich suchte ich eine bereits definierte funktion. werd mal deine variante übernehmen und noch bisschen warten, evtl. kennt jemand die gesuchte funktion..

    gruss joel


      


    Betrifft: Schilder doch mal genauer... von: Boris
    Geschrieben am: 02.09.2003 15:50:37

    Hi Joel,

    ...was du vorhast.
    Natürlich gibt es auch Tabellenfunktionen - möglicherweise auch im Array nach dem Stil:
    {=SUMME(WENN(A1:A100="a";B1:B100))}

    Aber wie gesagt - gib doch mal etwas mehr Input.

    Grüße Boris


      


    Betrifft: AW: Schilder doch mal genauer... von: joel
    Geschrieben am: 02.09.2003 15:58:24

    hallo boris

    hab ne tabelle T1, in der der user werte einträgt (kein zellenschutz)
    in einer deckungsgleichen tabelle T2 (zellenschutz aktiviert) müssen nun alle zellen freigegeben werden, die in T1 einen gültigen Wert (in diesem fall eine Zahl) enthalten.

    du siehst, mit deinem ersten vorschlag ist das problemlos machbar, jedoch suche ich jeweils nach optimiertem code..

    hoffe, du kannst mir nochmals helfen

    gruss


      


    Betrifft: Möglichkeit mit Ereignismakro: von: Boris
    Geschrieben am: 02.09.2003 17:03:31

    Hi Joel,

    Einfügen in das Modul der Tabelle T1:

    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Ws As Worksheet
    Set Ws = Worksheets("T2")
    Application.ScreenUpdating = False
    With Ws
        .Unprotect
        .Range(Target.Address).Locked = Not IsNumeric(Target)
        .Protect
    End With
    Application.ScreenUpdating = True
    End Sub
    


    Allerdings gibt es durch das Aufheben und Setzen des Blattschutzes trotz Unterdrückung der Bildschirmaktualisierung immer ein leichtes Flackern.

    Grüße Boris