Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Φίλτρο (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1364-filtro.html)

mdragon 14-09-11 09:42

Φίλτρο
 
1 Συνημμένο(α)
Καλημέρα σε όλους,
πως μπορούμε σε ένα κελί να εμφανίζεται το πρώτο αποτέλεσμα ενός αυτόματου φίλτρου???
Και επειδή μία εικόνα, χίλιες λέξεις....δείτε το συνημμένο


Ευχαριστώ εκ των προτέρων,
Μάρω

Tasos 14-09-11 11:53

Μάρω καλημέρα!

Kατά το φιλτράρισμα η Excel δεν εκτελεί κάποιο συμβάν τύπου ""OnAutoFilter" όπου θα μπορούσες να προσθέσεις κώδικα.

Μπορεί να εκτελέσει όμως το συμβάν Worksheet_Calculate() αν στο φύλλο υπάρχουν τύποι
που χρειάζονται συνεχώς νέο υπολογισμό όπως πχ.συναρτήσεις ημερομηνίας.

Στη λειτουργική μονάδα κλάσης του φύλλου πέρασε τον κώδικα:

Κώδικας:

Option Explicit
Private IsCalculating As Boolean

Private Sub Worksheet_Calculate()
    If IsCalculating Then
        IsCalculating = False
        Exit Sub
    End If
    IsCalculating = True
    On Error GoTo ErrH
    Dim rng As Range, c As Range
    If ActiveSheet.AutoFilterMode Then
        If ActiveSheet.AutoFilter.Range.Columns(1) _
                .SpecialCells(xlCellTypeVisible).Count > 1 Then
            Set rng = ActiveSheet.AutoFilter.Range
            Set rng = rng.Offset(1).Columns(1)
            For Each c In rng.SpecialCells(xlCellTypeVisible)
                If c <> vbNullString Then
                    Me.Range("D1") = c ' Προσάρμοσε το αν χρειαστεί
                    Exit For
                End If
            Next
        End If
    End If
ErrH:
    If Err Then IsCalculating = False
End Sub

Αν δεν σου εμφανίζεται το αποτέλεσμα, θα πρέπει να προσθέσεις κάπου σε ένα κελί του φύλλου τον τύπο =NOW() για να προκαλείται υπολογισμός κατά το φιλτράρισμα και κατά συνέπεια η εκτέλεση του Worksheet_Calculate().

Αν εφαρμόζεις φίλτρο μόνο τη στήλη B, θα σου πρότεινα να χρησιμοποιήσεις σε ένα κελί τον παρακάτω τύπο CSE:

Κώδικας:

=INDEX(A:A;MATCH(INDEX(B:B;MAX(SUBTOTAL(3;INDIRECT("B"&ROW(2:999)))*ROW(2:999)));B:B;0))
Καλή συνέχεια!

Φιλικά

Τάσος

mdragon 14-09-11 15:27

Τάσο καλησπέρα,
Δεν κατάφερα να μου δουλέψει το index αλλά και ο κώδικας κάνει μια χαρά τη δουλειά του.
Σε ευχαριστώ για την άμεση ανταπόκριση.




Φιλικά,
Μάρω

Tasos 14-09-11 15:45

1 Συνημμένο(α)
Να είσαι καλά Μάρω!

Ο τύπος που σου υπέδειξα είναι τύπος Πίνακα (Array) ή αλλιώς CSE (πέρασε το ποντίκι πάνω από τη λέξη CSE)και δεν κλείνει με απλό ENTER αλλά με CTRL+SHIFT+ENTER.

Ελέγχει με ποιο κριτήριο έχεις φιλτράρει τη στήλη B, το αναζητεί και επιστρέφει το αντίστοιχο κελί στη στήλη A.

Δες ένα παράδειγμα στο συνημμένο.

Φιλικά

Τάσος

mdragon 14-09-11 21:54

Η αλήθεια είναι πως αλχημεία στην αλχημεία το είχα ψιλοφτιάξει αλλά κόλλαγε από ένα σημείο και έπειτα. :hmm:
Μέχρι να σας γνωρίσω ήμουν :030: και είδα. :worthy:


Καλό βράδυ
Μάρω


Η ώρα είναι 22:00.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2