Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Excel07] Κουμπί αναζήτησης σε στήλη (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/1355-koympi-anazitisis-se-stili.html)

sakplak 09-09-11 15:23

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

Lefteris 09-09-11 16:29

1 Συνημμένο(α)
Καλησπέρα σε όλους.

Σταύρο, μία λύση είναι η εξής:

Προσθέτεις μία στήλη Α(την κρύβεις αν θέλεις) και δίνεις Α/Α, στις γραμμές.

Στο κελί Β2, εφαρμόζεις με επικύρωση υπό όρους, την λίστα με τους κωδικούς σου.

Στο κελί C2, με INDEX & MATCH, παίρνεις το ζητούμενό σου.

Καλή συνέχεια

Καλό ΣΚ, σε όλους.

sakplak 09-09-11 16:59

Ευχαριστώ...
 
Λευτέρη σε ευχαριστώ για τον κόπο...Θα ήθελα όμως να μου εμφανίζονται, βάζοντας τον κωδικό όλα τα δεδομένα στη γραμμής...πχ κωδικός, εναλ κωδικός ,περιγραφή, βασ.μονάδα κα..

Lefteris 09-09-11 17:47

Φίλε Σάκη(Με συγχωρείς για το την προηγούμενη προσφώνηση)

Με τον ίδιο ακριβώς συνδυασμό, μπορείς να φέρνεις στις διπλανές στήλες και τα υπόλοιπα αποτελέσματα.

Δεν προλαβαίνω να στο δείξω με παράδειγμα τώρα, επειδή πρέπει να φύγω.

Την Δευτέρα ευχαρίστως.

Δεν είναι δύσκολο. Πάλεψέ το, λίγο μόνος σου.

kapetang 09-09-11 18:31

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Στο αρχείο, που επισυνάπτω, παρουσιάζω μια λύση που εμπνεύστηκα από την πρόταση του Λευτέρη.
Σάκη ελπίζω να σε καλύπτει.

Φιλικά/Γιώργος

Tasos 09-09-11 18:54

1 Συνημμένο(α)
Καλησπέρα σε όλους!

Βλέποντας ότι ο Λευτέρης είχε έλλειψη χρόνου, σκέφτηκα να αναπληρώσω το κενό.

Βέβαια με πρόλαβε ο Γιώργος αλλά μιας και ετοίμασα και εγώ κάτι, θα ήθελα να το επισυνάψω.

Καλή συνέχεια Σάκη!

Φιλικά

Τάσος

sakplak 09-09-11 20:41

Ευχαριστώ πολύ...Οι προτάσεις με κάλυψαν πλήρως.Το θέμα λύθηκε και η αιτία είστε εσείς..Ευχαριστώ πολύ για την πολύτιμη βοήθεια που προσφέρετε..Να είστε καλά, καλό Σαβ/κο!!!

φωτης 11-09-11 14:15

Καλημερίζω την παρέα του forum!

Ξανανοίγωντας το θέμα ήθελα να ρωτήσω αν μπορεί να γίνει αναζήτηση με την περιγραφή ή μέρος αυτής.

Αν μπορεί κάποιος να μου δώσει κάποια κατεύθυνση σχετικά με το ποιες συναρτήσεις θα μπορούσε να γίνει κάτι τέτοιο θα ήμουν υπόχρεος.

Ευχαριστώ για τον χρόνο σας.

Tasos 11-09-11 16:16

2 Συνημμένο(α)
Καλησπέρα Φώτη!

Μπορεί να γίνει αναζήτηση σε μερικό περιεχόμενο μια στήλης.

Με αυτό τον τρόπο όμως, είναι αναμενόμενο να βρεθούν περισσότερα αποτελέσματα που πριν προχωρήσει κανείς θα πρέπει να διαμορφώσει το χώρο που θα τα φιλοξενεί.

Στα προηγούμενα παραδειγματικά αρχεία του θέματος έχουμε μια σχέση αναζήτησης - αποτελέσματος 1:1 που θα πρέπει να τροποποιηθεί αρκετά προκειμένου να λειτουργήσει σωστά η αναζήτηση σε μερικό περιεχόμενο μια στήλης.

Μπορείς να πάρεις μια ιδέα από το παράδειγμα που επισυνάπτω.

Edit: Αν δεν έχεις ισχυρό υπολογιστή, θα σου πρότεινα το δεύτερο αρχείο (xlSearchFindAsYouType.xls) που επισύναπτω.


Καλή συνέχεια

Τάσος

φωτης 11-09-11 18:59

Καλησπέρα Τάσο!

Να σε ρωτήσω κάτι άν έχεις τον χρόνο.
Στην εντολή
Κώδικας:

SMALL(CodeRows;ROW(A2))
το CodeRows τί είναι?

Σε ευχαριστώ.

Tasos 11-09-11 23:33

Είναι το όνομα που έχω ορίσει για την περιοχή: TEST!$A$51:$A$65536

Για περισσότερες πληροφορίες δες τον παρακάτω σύνδεσμο:
Καθορισμός και χρήση ονομάτων σε τύπους - Excel - Office.com

Φιλικά

Τάσος

Lefteris 12-09-11 10:31

Καλημέρα σε όλους.

Διαπιστώνω σήμερα, που μπορώ να είμαι στο διαδίκτυο, ότι υπήρξε ενα δημιουργικότατο ΣΚ, στην παρέα.

Αισθάνομαι την ανάγκη να πω κάποια πράγματα, όχι μόνο λόγω της ελάχιστης συμμετοχής μου σε αυτό το θέμα, αλλά επειδή πράγματι μου δημιουργήθηκε η ανάγκη.

Γιώργο, η λύση που έδωσες, ήταν τόσο απλή, τόσο εύχρηστη και παράλληλα τόσο εύστροφη και δημιουργική, που τι να πω...Συγχαρητήρια.!

Φίλε Τάσο, τι να πώ...Τί λύσεις...Μαθαίνουμε συνέχεια και συνέχεια μαζί σου.

Κυβερνάς το πλοίο που λέγεται,Forum του Ms-Office.gr και το οδηγείς με μαεστρία σε 'ολο και μακρύτερα ταξίδια με ασφάλεια και δεξιοτεχνία.

Μας βάζεις(σε 'ολους όσους ενδιαφέρονται να συμμετάσχουν στο πλήρωμα) τον πήχυ, όλο και ψηλότερα και μας κάνεις να αισθανόμαστε τόσο σιγουριά που έχουμε αυτόν τον Καπετάνιο

Εγώ τουλάχιστον, αισθάνομαι την ανάγκη να πω, πώς ευελπιστώ να καταφέρω κάποτε να μπορέσω να είμαι άξιο μέλος αυτού του πληρώματος.

Και για τους δυό σας, ισχύουν οι ίδιες παρατηρήσεις και για το θέμα του Μανώλη με το "Άθροισμα Κελιών"

Να έχετε όλοι, μία δημιουργική εβδομάδα.

kapetang 12-09-11 15:28

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Λευτέρη, σ’ ευχαριστώ. Είσαι πολύ γενναιόδωρος. Με χαρά διαπιστώνω τη μεγάλη βελτίωσή σου τόσο στο excel όσο και στον τρόπου που παρουσιάζεις τις ιδέες σου.
Παίρνοντας αφορμή από την καταπληκτική λύση του Τάσου, στον εντοπισμό των γραμμών που μια δεδομένη στήλη τους περιέχει τη συμβολοσειρά αναζήτησης, προσπάθησα να βρω μια ανάλογη λύση χρησιμοποιώντας κώδικα.
Στο αρχείο που επισυνάπτω στο φύλλο «TEST» υπάρχει η λύση του Τάσου που υλοποιείται μόνο με συναρτήσεις του excel και στο φύλλο «VBA» μια λύση με κώδικα.
Ο κώδικας είναι σύντομος και φαίνεται παρακάτω:
Κώδικας:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As Variant, j As Long, strS As String
    Dim LastRow As Long, col As New Collection
   
    If Application.Intersect(Target, Cells(2, 3)) Is Nothing Then Exit Sub
    Range("B4:G49").ClearContents
    If IsEmpty(Cells(2, 3)) Then Exit Sub
    strS = Cells(2, 3)
    LastRow = Cells(Rows.Count, 2).End(xlUp).Row
    For j = 51 To LastRow
        If InStr(1, Cells(j, 3), strS, vbTextCompare) Then
            x = Range(Cells(j, 2), Cells(j, 7))
            col.Add x
        End If
    Next
    If col.Count = 0 Then Exit Sub
    Application.EnableEvents = False
    For j = 1 To col.Count
        Range("b" & 3 + j & ":G" & 3 + j) = col.Item(j)
    Next
    Application.EnableEvents = True
End Sub

Όταν οι γραμμές στο φύλλο δεδομένων είναι περιορισμένες δεν έχει σημασία ποια μέθοδος θα χρησιμοποιηθεί.
Όταν όμως έχουμε πολλές χιλιάδες γραμμών θα πρέπει να χρησιμοποιηθεί η ταχύτερη.
Κατά τη γνώμη μου, για να πούμε με σιγουριά ποια μέθοδος είναι ταχύτερη, θα πρέπει να γίνουν χρονομετρήσεις.
Ίσως βρεθεί κάποιο μέλος να δημιουργήσει εικονικές γραμμές και να πειραματιστεί.

Φιλικά/Γιώργος

Tasos 13-09-11 10:20

1 Συνημμένο(α)
Καλημέρα σε όλους!

Δείτε στο αρχείο που επισυνάπτω μερικά παραδείγματα για αναζήτηση δεδομένων σε Excel.

Στο αρχείο αυτό γίνεται χρήση διαφορετικών μεθόδων αναζήτησης σε περιεχόμενα κελιού.

Όπως θα διαπιστώσετε και εσείς, υπάρχουν αισθητές έως σημαντικές διαφορές στην ταχύτητα των μεθόδων αυτών.

Έτσι έχουμε:

  1. Μέθοδος με χρήση συναρτήσεων (βελτιωμένη έκδοση)
    Η γρηγορότερη και με μεγάλη διαφορά από τις υπόλοιπες).
  2. Μέθοδος με χρήση του αντικειμένου WorksheetFunction (Excel-VBA)
  3. Μέθοδος με χρήση του αντικειμένου Find-FindNext (Excel-VBA)
  4. Μέθοδος με χρήση του αντικειμένου ADO (Active Data Objects-VBA)
  5. Μέθοδος με χρήση του αντικειμένου Collection (VBA) στη VBA
  6. Μέθοδος με χρήση του αντικειμένου AutoFilter(Excel-VBA)
Δείτε το λοιπόν και αν θέλετε το σχολιάζουμε.

Φιλικά

Τάσος

kapetang 13-09-11 21:12

Καλησπέρα στην παρέα

Φίλε μου Τάσο, συγχαρητήρια και για τις μεθόδους αναζήτησης που μας παρουσίασες και για το ωραίο περιβάλλον χρήσης.
Από την ταχύτερη προς την πιο αργή θα τις έβαζα με την ακόλουθη σειρά.
1. Μέθοδος με χρήση συναρτήσεων.
2. Μέθοδος με χρήση του αντικειμένου AutoFilter(Excel-VBA).
3. Μέθοδος με χρήση του αντικειμένου WorksheetFunction (Excel-VBA) και Μέθοδος με χρήση του αντικειμένου Find-FindNext (Excel-VBA)
4. Μέθοδος με χρήση του αντικειμένου ADO (Active Data Objects-VBA) και
Μέθοδος με χρήση του αντικειμένου Collection (VBA) στη VBA
Οι δύο πρώτες είναι σημαντικά ταχύτερες από τις υπόλοιπες.
Στον υπολογιστή μου σε μια δοκιμή με 300.000 γραμμές και οι τελευταίες λειτουργούσαν ικανοποιητικά, εκτός από την μέθοδο που χρησιμοποιεί αντικείμενα ADO, που δεν εμφάνιζε όλα τα αποτελέσματα (μάλλον το αρχικό recordset δεν είχε όλα τα δεδομένα).
Προσωπικά προτιμώ τη μέθοδο με τη χρήση αυτόματου φίλτρου, γιατί:
1. Είναι γρήγορη, σχεδόν όσο και η πρώτη.
2. Υλοποιείται εύκολα.
3.Δίνει στη γραμμή κατάστασης πληροφορίες για το αριθμό των γραμμών που βρέθηκαν και το συνολικό και μας επιτρέπει στο φιλτραρισμένο σύνολο να εφαρμόσουμε νέο φίλτρο.

Φιλικά/Γιώργος

Tasos 13-09-11 21:36

Καλησπέρα Γιώργο!

Σ ευχαριστώ που έκανες τις μετρήσεις αυτές. Έτσι έχουμε μια πιο πλήρη εικόνα.

Οι δικές μου δοκιμές έγιναν σε περιβάλλον Excel 2003.

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

Να είσαι καλά!

Τα λέμε

Τάσος

φωτης 16-09-11 23:33

Παράθεση:

Αρχική Δημοσίευση από Tasos (Μήνυμα 8013)
Είναι το όνομα που έχω ορίσει για την περιοχή: TEST!$A$51:$A$65536

Για περισσότερες πληροφορίες δες τον παρακάτω σύνδεσμο:
Καθορισμός και χρήση ονομάτων σε τύπους - Excel - Office.com

Φιλικά

Τάσος

Σε ευχαριστώ Τάσο.


Η ώρα είναι 15:44.

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


Search Engine Optimization by vBSEO 3.3.2