Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] Φιλτράρισμα και επιστροφή δεδομένων (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/5384-filtrarisma-kai-epistrofi-dedomenon.html)

caudillo 15-11-19 14:07

Φιλτράρισμα και επιστροφή δεδομένων
 
Την καλησπέρα μου σε όλους,
προσπαθώ να φτιάξω ένα αρχείο Excel για την δουλειά, αλλά δεν γνωρίζω πως να εφαρμόσω συνάρτηση.
Συγκεκριμένα έχω δυο φύλλα στο βιβλίο εργασίας. Στο πρώτο φύλλο έχω τα στοιχεία, ας πούμε π.χ. ΑΦΜ, ΕΠΙΘΕΤΟ, ΟΝΟΜΑ, ΠΕΡΙΟΧΗ. Στο δεύτερο φύλλο θέλω με την συνάρτηση FILTER (για την οποία έμαθα τυχαία ψάχνοντας στο internet), να εμφανίζονται τα ίδια πεδία φιλτραρισμένα ως προς την περιοχή.
Επειδή όπως είπα δεν γνωρίζω από συναρτήσεις, θα εκτιμούσα πολύ κάποιο παράδειγμα όπου εγώ θα αντικαταστήσω τα ονόματα των πεδίων απλά.
Ευχαριστώ για τον χρόνο σας.

caudillo 15-11-19 22:51

1 Συνημμένο(α)
Καλησπέρα και πάλι,
για να βοηθήσω να γίνει πιο κατανοητό αυτό που θέλω, επισυνάπτω ένα excel όπως αυτό που θέλω να ετοιμάσω. Εκείνο που ζητάω είναι, διαλέγοντας τμήμα στο Φύλλο2, να εμφανίζονται από κάτω εκείνες οι εγγραφές του Φύλλου1 που αντιστοιχούν στο συγκεκριμένο τμήμα.
Ελπίζω στη βοήθειά σας. Θα με γλυτώσει από πολύ χρόνο.
Ευχαριστώ.

caudillo 16-11-19 17:08

1 Συνημμένο(α)
Καλησπέρα σε όλο το forum,
συνεχίζοντας το ψάξιμο στο internet, μήπως καταφέρω να φτιάξω το excel μου όπως το θέλω, βρήκα τον παρακάτω κώδικα:
Παράθεση:

'In a Standard Module

Option Explicit
Function FilterAndCopy(rng As Range, Choice As String)

Dim FiltRng As Range
'Clear Contents to show just new search data
Worksheets("Sheet2").Cells.ClearContents
'Set the column to filter (In This Case 1 or A)
'Change as required
rng.AutoFilter Field:=1, Criteria1:=Choice
On Error Resume Next
Set FiltRng = rng.SpecialCells(xlCellTypeVisible).EntireRow
On Error GoTo 0

'Copy Data across to sheet 2
FiltRng.Copy Worksheets("Sheet2").Range("A1")
'Display Data
Worksheets("Sheet2").Select
Range("A1").Select
Set FiltRng = Nothing
End Function

Sub formshow()
'Show Search Form
UserForm1.Show
End Sub

'************************************************* ****************
'In a userform

Option Explicit

Private Sub CommandButton1_Click()
Dim rng As Range

'Set Error Handling
On Error GoTo ws_exit:
Application.EnableEvents = False
'Set Range
Set rng = ActiveSheet.UsedRange
'Cancel if no value entered in textbox
If TextBox1.Value = "" Then GoTo ws_exit:
'Call function Filterandcopy
FilterAndCopy rng, TextBox1.Value
rng.AutoFilter
'Exit sub
ws_exit:
Set rng = Nothing
Application.EnableEvents = True
Unload Me
End Sub

Private Sub CommandButton2_Click()
'Cancel Button
Unload Me
End Sub
Βέβαια πιστεύω πως χρειάζεται διορθώσεις για να ταιριάξει με το αρχείο μου, τις οποίες όμως δεν γνωρίζω.
Εδώ έρχεται η δική σας βοήθεια, εφόσον θέλει κάποιος να ασχοληθεί.
Το ίδιο ισχύει για ένα έτοιμο αρχείο Excel που βρήκα πάλι στο internet. Έχει ένα κουμπί αναζήτησης, αλλά πάλι χρειάζεται προσαρμογή στο δικό μου αρχείο ο κώδικάς του. Άρα ξαναγυρνάω στη δίκη σας βοήθεια.
Ευχαριστώ, θα περιμένω νέα σας.

Spirosgr 17-11-19 09:23

Καλημέρα
Κώστα, ξεχνάω τον κώδικα που μας δείχνεις
και πάμε στην πρώτη ερώτηση που αφορά τις συναρτήσεις...

Η συνάρτηση =Filter(), ισχύει για Excel 365.
Αν έχεις τέτοια έκδοση
(παρακαλώ ενημέρωσε το profile σου για να μπορούμε να απαντάμε με τα σωστά εργαλεία)
τότε:
Κώδικας:

=FILTER(Φύλλο1!A3:D15;Φύλλο1!C3:C15=Φύλλο2!E8,"")
στο πρώτο κελί,, που θέλεις να δεις την φιλτραρισμένη λίστα σου,
με κριτήριο που βρίσκεται στο κελί Ε8 (drop down) του 2ου φύλλου.

*Μπορείς επιπλέον, να βάλεις την =Filter(), ένθετη σε μια =Sort(),
για να πάρεις τα αποτελέσματα ταξινομημένα (προαιρετικό).


Για τις άλλες εκδόσεις του Excel, που δεν υποστηρίζουν την =Filter():
Κώδικας:

=INDEX(Φύλλο1!$B$3:$B$15;SMALL(IF(Φύλλο1!$D$3:$D$15=Φύλλο2!$E$8;
ROW(Φύλλο1!$B$3:$B$15)-ROW(Φύλλο1!$B$3)+1);ROWS(Φύλλο1!$B$3:$B3)))

Ο τύπος είναι Array, και πρέπει να εισαχθεί με Ctrl+Shift+Enter.

Σημείωση:
Τα πιο πάνω, είναι λύσεις σωστές μεν αλλά κατά την γνώμη μου...«άχρηστες»...
Αν βάλεις τα δεδομένα σου σε πίνακα, τότε ένα απλό φίλτρο ως προς «Τμήμα»
είναι αρκετό, χωρίς να χρειάζεσαι τίποτε άλλο...

Τέλος...
λύσεις, μπορούν να δοθούν και με:
1. Pivot Table
2. Σύνθετο φίλτρο (στο ίδιο φύλλο με τα δεδομένα)
3. Με κώδικα VBA...

caudillo 17-11-19 15:01

Καλησπέρα Σπύρο και σ' ευχαριστώ για τον χρόνο, τον κόπο και την διάθεσή σου να ασχοληθείς με το θέμα μου.
Η έκδοση του Office που χρησιμοποιώ είναι το 2016, οπότε δοκίμασα την δεύτερη συνάρτηση που προτείνεις και δουλεύει εν μέρει. Δηλαδή μου βγάζει μόνο το πρώτο επίθετο από τους μαθητές του τμήματος που διαλέγω, ενώ εγώ θέλω όλους τους μαθητές του συγκεκριμένου τμήματος και όλα τα στοιχεία τους (αριθμό μητρώου, επίθετο, όνομα).
Αν δεν σου κάνει κόπο θα ήθελα να με καθοδηγήσεις ως προς το αν έκανα κάτι λάθος ή θέλει κάποιο διόρθωμα η συνάρτηση.
Και πάλι σ' ευχαριστώ.

Spirosgr 17-11-19 15:16

Λογικό είναι να δίνει αυτό το αποτέλεσμα,
αφού η περιοχή που ελέγχει η συνάρτηση, είναι η: «Φύλλο1!$B$3:$B$15»

Η συνάρτηση, είναι «μπούσουλας» για να φέρουμε «κάτι» στο δεύτερο φύλλο.

Τώρα, τι θα έκανα εγώ:
Σίγουρα έναν πίνακα με φίλτρο, χωρίς καμία συνάρτηση...
Αλλά,
αν θέλεις οπωσδήποτε λύση με τύπο,
γράψε την ίδια συνάρτηση, με περιοχή την στήλη Α
(μητρώο, μιας και είναι και μοναδικός αριθμός)
και μετά, δίπλα στο κάθε μητρώο, φέρε με συνδυασμό =Index() & =Match() ό, τι άλλο θέλεις...

caudillo 17-11-19 17:06

Σπύρο σ' ευχαριστώ για όλα.
Θα το δουλέψω να δω τι θα καταφέρω. Καλή συνέχεια.


Η ώρα είναι 17:17.

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


Search Engine Optimization by vBSEO 3.3.2