Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel: podmíněný výběr oblasti buněk

Zápasím s parametry Range("oblast_podle_podmínky") v makru Excelu.

Mějme tabulku, kde ve sloupci A je datum (ve tvaru DD.MM.RR). Ve sloupcích B-E jsou nějaké údaje (text, číslo, cokoliv). Potřebuju vybrat oblast sloupců A-E a řádků, kde měsíc (MM) je menší nebo roven hodnotě, uvedené v buňce F1.

V jednodušším případě půjde vždy o spojenou oblast (tedy hodnota měsíce na dalším řádku bude mít pouze stejnou či vzestupnou hodnotu, př. 1,1,1,2,2,4,..).

Ve složitějším případě (pokud by to nešlo, musel bych oblast dat nejprve setřídit podle datumu) by šlo o nespojitou oblast, datumy (měsíce) jdou zcela napřeskáčku. Taky ovšem nevím, jak velká nespojitá oblast lze vytvořit, zda nemá Excel nějaké limity (30?). Nespojitá oblast by mohla dosahovat i stovky "částí".

Výsledkem by mělo být, že po zadání číselné hodnoty do buňky F1 a následném spuštění makra by měla být vybrána (Range) oblast buněk s hodnotou měsíce 1 až "F1".

Díky za jakoukoliv pomoc.

Předmět Autor Datum
Nestačí ti na to obyčajný filter? Makro by mohlo vyzerať takto: Private Sub Worksheet_Change(ByVal…
los 24.07.2010 14:04
los
Díky za pomoc, zítra na to pořádně mrknu (pokud stihnu DPH...) poslední
L-Core 24.07.2010 15:08
L-Core

Nestačí ti na to obyčajný filter?

Makro by mohlo vyzerať takto:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aSelection As Range
    Dim aRange As Range
    Dim aFirstCell As Range
    Dim aLastCell As Range
    Dim aCell As Range
    Dim aRow As Range

    Set aRange = Intersect(Target, Range("F1"))
    If Not aRange Is Nothing Then
        Set aFirstCell = Range("A1")
        Set aLastCell = aFirstCell.End(xlDown)
        For Each aCell In Range(aFirstCell, aLastCell)
            If Month(aCell) <= Range("F1") Then
                Set aRow = aCell.Resize(1, 5)
                If aSelection Is Nothing Then
                    Set aSelection = aRow
                Else
                    Set aSelection = Union(aSelection, aRow)
                End If
            End If
        Next
        If Not aSelection Is Nothing Then
            aSelection.Select
        End If
    End If
End Sub

Maximálne môže byť označených 2048 oblastí. To je obmedzenie priamo v Exceli (nie v makrách) a je rovnaké minimálne od verzie 2000.

Zpět do poradny Odpovědět na původní otázku Nahoru