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/5508-pollapli-anazitisi-se-pinaka.html)

ΣΤΑΥΡΟΣ 1988 07-04-20 18:46

πολλαπλή αναζήτηση σε πινάκα???
 
καλησπερίζω την ομάδα που τυχαία ανακάλυψα και ήδη με βοήθησε να βρω μια σημαντική λύση για ενα απ τα προβλήματα μου που αφορούν το excel..

ελπιζω να βρεθεί λυση και σε αυτο το πρόβλημα..

λυπών!

εχω ενα excel με το οποιο στο πρώτο φυλλο ανεβάζω ενα αρχείο προϊόντων xml. στο δευτερο φυλλο τραβαω οσα δεδομενα χρειαζομαι για το καθε προιον που θελω μεσω αναζήτησης με τον κωδικο του προιοντος και με τη συνάρτηση vlookup και ύστερα το μετατρέπω σε csv για να ανεβεί στο σαιτ..
το πρόβλημα μου ειναι το εξης:
το αρχειο xml οταν ανεβαίνει σε excel εχει μια μορφη γραμμές και στήλες (κλασικα), όμως, το καθε προιον το κανει 3-4-5 γραμμές ανάλογα με τα δεδομένα του.. δηλαδή.. το ποιοιν με κωδικο 12345 πχ στην πρωτη γραμμή εκτός των αλλων δεδομένων εμφανιζει και το λινκ τις πρώτης φωτο.. στην δεύτερη γραμμη το λινκ τις δεύτερης φωτο, στην τρίτη γραμμή το λινκ τις 3ης φωτο και παει λέγοντας.. το ιδιο ισχύει και με τα δεδομένα των φίλτρων του καθε προϊόντος..
ετσι, μπορει το ενα προϊών να ειναι και 5 και 6 γραμμές.. ο κωδικός εμφανίζετε σε ολες τις γραμμές.

εγω τωρα, αν κανω αναζήτηση με τον κωδικό με την vlookup μου φέρνει μονο τα δεδομένα τις πρωτης γραμμής που βρισκει.. τι θα κανω για να μπορέσω να παρω και τα υπόλοιπα δεδομένα και απο τις αλλες γραμμές??????????

ειναι πολυ σημαντικό να το φτιάξω διοτι μου γλυτώνει άπειρες ωρες εργασίας που μπορουν να γινουν σε 1 λεπτο μετο πάτημα ενος κουμπιού!!

υγ. εχω φαει απειρες ωρες ψάχνοντας για το excel και εχω καταφέρει να κανω πολλα πράγματα που με βοηθάνε στη δουλειά μου αλλα αυτο δεν το βρίσκω :012:

ευχαριστώ εκ των πρότερων :coffee2:

Tasos 07-04-20 21:11

Καλησπέρα Σταύρο και καλωσόρισες στο φόρουμ!

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

Με εκτίμηση

Τάσος

ΣΤΑΥΡΟΣ 1988 07-04-20 21:40

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

ανεβαζω το αρχειο που χρησιμοποιώ με 2-3 κωδικους για να το δειτε..

θα δειτε οτι ο καθε κωδικος ειναι σε περισσοτερες απο μια γραμμες και το λινκ τις καθε 2ης-3ης φώτο (πεδιο "image10") ειναι σε ξεχωριστη γραμμη, οπως και τα φιλτρα (στηλη V μεχρι AD).

εγω θελω αυτα τα δεδομενα (λινκ φωτο'ς και φιλτρα) να τα παω στο διπλα φυλλο στο αντιστοιχο πεδιο

Tasos 08-04-20 10:22

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

Σταύρο απ΄ ότι κατάλαβα θέλεις έναν πίνακα που να περιέχει τα προϊόντα μοναδικά αλλά με τις όλες τις αντιστοιχισμένες εικόνες τους.

Στο παράδειγμα που επισυνάπτω και στο φύλλο "Results" υπάρχει μια λίστα που με τύπους εμφανίζει τα μοναδικά ονόματα προϊόντων.

Οι στήλες ΑΝ και ΑΟ χρησιμοποιούν την παρακάτω συνάρτηση:
Κώδικας:

Function GetFeautureFromProduct(ProductStartRow As Long, _
                                ProductEntRow As Long, _
                                FeautureColumn As Range, _
                                Optional StringSeparator As String = vbLf) As String
    Dim i As Integer
    Dim tmp As String

    For i = ProductStartRow To ProductEntRow
        If FeautureColumn(i) <> vbNullString Then
            tmp = tmp & FeautureColumn(i) & StringSeparator
        End If
    Next
    If InStr(1, tmp, StringSeparator) Then
        GetFeautureFromProduct = Mid(tmp, 1, Len(tmp) - 1)
    End If

End Function

που επιστρέφει τις τιμές των κελιών στο φύλλο xml που αντιστοιχούν στο προιόν.

Η σύνταξη της συνάρτησης είναι:

Κώδικας:

=GetFeautureFromProduct(αρχική_γραμμή;τελική_γραμμή;
στήλη_προς_αναζήτηση;προαιρετικός_διαχωριστικός_χαρακτήρας_πχ Char(10)_ή_";")


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



Φιλικά
Τάσος

ΣΤΑΥΡΟΣ 1988 08-04-20 17:36

Σ ευχαριστω για τον χρόνο σου, το ειδα αυτο που εφτιαξες αλλα δεν μπορω να κανω δουλεια ετσι δύστυχος.

αυτο που θελω ειναι το εξεις:
στο φυλλο "excel to csv" και στο κελι aq2 πχ, θελω μια συνάρτηση η οποια να βλεπει τον κωδικο στο κελι be2 και να αναζητα απ το φυλλο "xml" τον αντίστοιχο κωδικο και να μου φερνει πισω τα λινκ των φωτο που υπαρχουν για αυτον τον κωδικο απο τις στηλες q και an, διαχωρισμένα με κόμμα "," ετσι: ww.test.gr/image1,ww.test.gr/image2,ww.test.gr/image3

λογικα τον ιδιο τυπο θα χρησιμοποιησω για να κανω το ιδιο και με τα φιλτρα που θελω να φερω στο κελι af του φυλλου "excel to csv" με την διαφορά οτι τα φιλτρα ειναι στις στηλες ab και ad παλι στο φυλλο "xml"...
τα φιλτρα στο κελι af πρεπει να ειναι στην ακολουθη μορφη: φιλτρο1:τιμη φιλτρου1,φιλτρο2:τιμη φιλτρου2,φιλτρο3:τιμη φιλτρου3

μαλλον δεν το εξηγησα καλα στην αρχη, ελπιζω τωρα να εγινε ποιο κατανοητό και ελπίζω να μην κουρασα...πολυ. :015:


επισεις στο φυλλο xml του αρχειου δεν μπορω να κανω καμια αλλαγη γιατι ανανεωνετε καθημερινα και ειναι καπου 100χλ. γραμμες!

Tasos 08-04-20 20:23

Γεια σου Σταύρο!

Eπικόλλησε την παρακάτω συνάρτηση στον VBE:

Κώδικας:

Function GetFeautureFromProduct(ProductCode As String, _
                                ProductColumn As Range, _
                                FeautureColumn As Range, _
                                StringSeparator As String) _
                                As String
    Dim iRow As Integer
    Dim FirstCellValue As String
    Dim tmp As String
    Dim foundCell As Range


    Set foundCell = ProductColumn.Find(ProductCode, LookIn:=xlValues, _
                                      LookAt:=xlWhole, SearchOrder:=xlByRows, _
                                      SearchDirection:=xlNext, _
                                      MatchCase:=False, SearchFormat:=False)

    If Not foundCell Is Nothing Then
        FirstCellValue = foundCell.Value
        Do
            iRow = foundCell.Row
            If FeautureColumn(iRow) <> vbNullString Then
                tmp = tmp & FeautureColumn(iRow) & StringSeparator
            End If
            Set foundCell = foundCell.Offset(1)
        Loop While foundCell.Value = FirstCellValue
    End If

    If Len(tmp) > 0 Then
        GetFeautureFromProduct = Mid(tmp, 1, Len(tmp) - Len(StringSeparator))
    End If

End Function

Για να λειτουργήσει σωστά η συνάρτηση θα πρέπει η στήλη που περιέχει τους κωδικούς προϊόντων να είναι ταξινομημένη ώστε οι όμοιοι κωδικοί να διατηρούνται μαζί ο ένας κάτω από τον άλλο.

Εάν δεν υπάρχει δυνατότητα ταξινόμησης τότε χρησιμοποίησε την παρακάτω συνάρτηση:

Κώδικας:

Function GetFeautureFromProduct(ProductCode As String, _
                                ProductColumn As Range, _
                                FeautureColumn As Range, _
                                StringSeparator As String) _
                                As String
    Dim iRow As Integer
    Dim firstAddress As String
    Dim tmp As String
    Dim foundCell As Range


    Set foundCell = ProductColumn.Find(ProductCode, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False)

    If Not foundCell Is Nothing Then
        firstAddress = foundCell.Address
        Do
            iRow = foundCell.Row
            If FeautureColumn(iRow) <> vbNullString Then
                tmp = tmp & FeautureColumn(iRow) & StringSeparator
            End If

                Set foundCell = ProductColumn.Find(ProductCode, After:=foundCell, LookIn:=xlValues, _
                                            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                                            MatchCase:=False, SearchFormat:=False)
            If foundCell Is Nothing Then GoTo ContinueHere
        Loop While foundCell.Address <> firstAddress
    End If

ContinueHere:
    If Len(tmp) > 0 Then
        GetFeautureFromProduct = Mid(tmp, 1, Len(tmp) - Len(StringSeparator))
    End If

End Function

Κατόπιν σε ένα κελί - πχ. BF2- στο φύλλο "excel to csv" πέρασε τον τύπο:

=GetFeautureFromProduct($BE2;xml!$B:$B;xml!$AM:$AM ;",")

Έτσι, σύμφωνα πάντα με τη δομή του παραδείγματος σου, θα έχεις τις εικόνες που αντιστοιχούν σε κάθε κωδικό ενωμένες με διαχωριστικό το κόμμα (,).

Με τον ίδιο τρόπο μπορείς να ενώσεις και άλλες στήλες.του φύλλου "xml".

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

Τάσος

ΣΤΑΥΡΟΣ 1988 09-04-20 18:54

Φιλε τασο χιλια ευχαριστω, με αυτον τον κωδικα και με κατι μικρες τροποποιησεις απο το γαμπρο μου που σκαμπαζει λιγο απο κωδικα εκανα τη δουλεια μου οπως ακριβως ηθελα!

χιλια ευχαριστω και παλι!! :icon_hihi:

Tasos 09-04-20 21:47

Να είσαι καλά Σταύρο!

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

Τάσος


Η ώρα είναι 20:42.

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


Search Engine Optimization by vBSEO 3.3.2