Προς το περιεχόμενο

EXCEL INDEX


blanka

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα.

      Θέλω να φτιάξω 2 στήλες με τιμές, οι οποίες θα τροφοδοτούνται απο πίνακες που εχουν διάφορες τιμές.

Ο κανόνας με τον οποίο θέλω να δημιουργηθούν οι στήλες, φαίνεται στο screenshot που παραθέτω με βελάκια

Σκέφτομαι την INDEX λογικά απλά πρέπει κάπως να αγνοεί τα κενά, και να κάνει την σωστή αντιστοίχιση από τους 2 πίνακες.

Η αντιστοίχιση θα γίνεται ανά σειρά σε κάθε πίνακα, αλλά το πρόβλημα είναι τί γίνεται όταν στην ίδια σειρά θα υπάρχουν 2 ή 3 τιμές που πρέπει να αντιστοιχισθούν και να τοποθετηθούν στις 2 στήλες που θέλω.

image.png.1db43a95a9d4c34799ae81b97059636d.png

 

PLEASE HELP

 

Επεξ/σία από blanka
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Υπάρχουν δεκάδες τρόποι όπου θα μπορούσες να το διαχειριστείς.

Αν τα κενά είναι πάντα ίδια και στους πίνακες στις αντίστοιχες θέλεις, μιας και το βασικό σου πρόβλημα είναι οι αρχικοί σου πίνακες, εγώ θα δούλευα με FILTER / LEN function (σε google sheet format που λειτουργώ η μορφή είναι αυτή γιατί excel έχω χρόνια να πιάσω, κάνε την αναγωγή): 
=IFERROR(filter(Sheet1!$D$2:$D,len(Sheet1!$D$2:$D)),""
και ακριβώς από δίπλα:
=IFERROR(filter(Sheet2!$J$2:$J,len(Sheet2!$J$2:$J)),""

Και τα συνδυάζεις με ARRAYFORMULA σε vertical possition όπου θα βάλεις και στις δύο περιπτώσεις  όλες τις στήλες των πινάκων (στο πρώτο arrayformula τις στήλες του πρώτου πίνακα. και στο δεύτερο arrayformula τις στήλες του δεύτερου πίνακα)

Οπότε στο σημείο που θες να συγκεντρώσεις τα δεδομένα στο ένα κελί γράφεις:
=ARRAYFORMULA({IFERROR(filter(Sheet1!$A$2:$A,len(Sheet1!$A$2:$A)),"");IFERROR(filter(Sheet1!$B$2:$B,len(Sheet1!$B$2:$B)),"");IFERROR(filter(Sheet1!$C$2:$C,len(Sheet1!$C$2:$C)),"");IFERROR(filter(Sheet1!$D$2:$D,len(Sheet1!$D$2:$D)),"";IFERROR(filter(Sheet1!$E$2:$E,len(Sheet1!$E$2:$E)),""})
Και στο ακριβώς δίπλα το ίδιο απλά με τις στήλες του άλλου πίνακα.

Στα παραπάνω θεωρώ ότι οι 2 κεντρικοί πίνακες είναι σε διαφορετικά Sheets και για αυτό στο γράφω έτσι.

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

Επεξ/σία από Billator
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Καλημέρα,

Όχι οι πίνακες δεν εχουν σταθερά κενά κελιά.

Τα κελιά είναι random το που θα έχουν νουμερα.

Οι 2 πίνακες δεν είναι σε διαφορετικά Sheets  είναι στο ίδιο.

Απλά η λίστα που θα φτιαχτεί είναι σε διαφορετικό Sheet. 

H αντιστοιχηση είναι όντως ΠΑΝΤΑ ίδια.

 

 

Επεξ/σία από blanka
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
10 ώρες πριν, blanka είπε

H αντιστοιχηση είναι όντως ΠΑΝΤΑ ίδια.

Αυτή είναι η μόνο προϋπόθεση η θέση της αντιστοίχισης να είναι ακριβώς η ίδια και στους 2 πίνακες. 
πχ A[5,1]=B[5,1] κλπ αλλιώς το παραπάνω που σου έγραψα δεν λειτουργεί. Αυτό που σου έγραψα κάνει ακριβώς αυτή την αντιστοίχιση ανάμεσα στους 2 αυτούς πίνακες.

Οτιδήποτε και αν περιέχουν οι πίνακες δεν χρειάζεται να είναι σταθερό, κάθε φορά που θα αλλάζει αυτόματα όλα θα αλλάζουν ακόμα και όλα κενά να είναι απλά δεν θα σου βγάλει καμία αντιστοίχιση. Δοκίμασε το και θα δεις. Αν το κάνεις copy paste σε google sheet μπορεις να το δοκιμάσεις εκεί και μετά να κάνεις την αναγωγή σε excel.

Γίνεται εύκολα και με INDEX / MATCH αλλά δεν νομίζω να γίνεται με 1 in cell fuction όπως το παραπάνω που σου γράφω, το αρνητικό είναι ότι αν οι πίνακες σου έχουν δυναμικό μέγεθος με INDEX / MATCH θα πρέπει να κάνεις βασική πρόβλεψη μέγιστου μεγέθους πινάκων για να μην βγάλουν ποτέ error. 
 

10 ώρες πριν, blanka είπε

Οι 2 πίνακες δεν είναι σε διαφορετικά Sheets  είναι στο ίδιο.

Απλά η λίστα που θα φτιαχτεί είναι σε διαφορετικό Sheet. 

Οπότε σε αυτό απλά θα αλλάξεις τις θέσεις των στηλών, και τα 2 θα γράφουν Sheet1 και θα το προσθέσεις σε διαφορετικό Sheet πχ Sheet2.

Οπότε πχ στο Sheet2 στο πρώτο κελί θα γράψεις αυτό:
=ARRAYFORMULA({IFERROR(filter(Sheet1!$A$2:$A,len(Sheet1!$A$2:$A)),"");IFERROR(filter(Sheet1!$B$2:$B,len(Sheet1!$B$2:$B)),"");IFERROR(filter(Sheet1!$C$2:$C,len(Sheet1!$C$2:$C)),"");IFERROR(filter(Sheet1!$D$2:$D,len(Sheet1!$D$2:$D)),"";IFERROR(filter(Sheet1!$E$2:$E,len(Sheet1!$E$2:$E)),""})

και στο διπλανό κελί πχ αυτό: 
=ARRAYFORMULA({IFERROR(filter(Sheet1!$G$2:$G,len(Sheet1!$G$2:$G)),"");IFERROR(filter(Sheet1!$H$2:$H,len(Sheet1!$H$2:$H)),"");IFERROR(filter(Sheet1!$I$2:$I,len(Sheet1!$I$2:$I)),"");IFERROR(filter(Sheet1!$J$2:$J,len(Sheet1!$J$2:$J)),"";IFERROR(filter(Sheet1!$K$2:$K,len(Sheet1!$K$2:$K)),""})

Και με την φόρμουλα αυτή στα 2 μόνο πρώτα κελιά κάνεις δυναμικά όλη την αντιστοίχιση που ζήτας στο αρχικό σου μήνυμα. 

Επεξ/σία από Billator
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 27/6/2022 στις 6:37 ΜΜ, Billator είπε

Αυτή είναι η μόνο προϋπόθεση η θέση της αντιστοίχισης να είναι ακριβώς η ίδια και στους 2 πίνακες. 
πχ A[5,1]=B[5,1] κλπ αλλιώς το παραπάνω που σου έγραψα δεν λειτουργεί. Αυτό που σου έγραψα κάνει ακριβώς αυτή την αντιστοίχιση ανάμεσα στους 2 αυτούς πίνακες.

Οτιδήποτε και αν περιέχουν οι πίνακες δεν χρειάζεται να είναι σταθερό, κάθε φορά που θα αλλάζει αυτόματα όλα θα αλλάζουν ακόμα και όλα κενά να είναι απλά δεν θα σου βγάλει καμία αντιστοίχιση. Δοκίμασε το και θα δεις. Αν το κάνεις copy paste σε google sheet μπορεις να το δοκιμάσεις εκεί και μετά να κάνεις την αναγωγή σε excel.

Γίνεται εύκολα και με INDEX / MATCH αλλά δεν νομίζω να γίνεται με 1 in cell fuction όπως το παραπάνω που σου γράφω, το αρνητικό είναι ότι αν οι πίνακες σου έχουν δυναμικό μέγεθος με INDEX / MATCH θα πρέπει να κάνεις βασική πρόβλεψη μέγιστου μεγέθους πινάκων για να μην βγάλουν ποτέ error. 
 

Οπότε σε αυτό απλά θα αλλάξεις τις θέσεις των στηλών, και τα 2 θα γράφουν Sheet1 και θα το προσθέσεις σε διαφορετικό Sheet πχ Sheet2.

Οπότε πχ στο Sheet2 στο πρώτο κελί θα γράψεις αυτό:
=ARRAYFORMULA({IFERROR(filter(Sheet1!$A$2:$A,len(Sheet1!$A$2:$A)),"");IFERROR(filter(Sheet1!$B$2:$B,len(Sheet1!$B$2:$B)),"");IFERROR(filter(Sheet1!$C$2:$C,len(Sheet1!$C$2:$C)),"");IFERROR(filter(Sheet1!$D$2:$D,len(Sheet1!$D$2:$D)),"";IFERROR(filter(Sheet1!$E$2:$E,len(Sheet1!$E$2:$E)),""})

και στο διπλανό κελί πχ αυτό: 
=ARRAYFORMULA({IFERROR(filter(Sheet1!$G$2:$G,len(Sheet1!$G$2:$G)),"");IFERROR(filter(Sheet1!$H$2:$H,len(Sheet1!$H$2:$H)),"");IFERROR(filter(Sheet1!$I$2:$I,len(Sheet1!$I$2:$I)),"");IFERROR(filter(Sheet1!$J$2:$J,len(Sheet1!$J$2:$J)),"";IFERROR(filter(Sheet1!$K$2:$K,len(Sheet1!$K$2:$K)),""})

Και με την φόρμουλα αυτή στα 2 μόνο πρώτα κελιά κάνεις δυναμικά όλη την αντιστοίχιση που ζήτας στο αρχικό σου μήνυμα. 

Εισαι θεος του κώδικα το ξέρεις ;

Φαντάζομαι θα σου το έχουν πει κι άλλοι!

Σε ευχαριστώ

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 29/6/2022 στις 1:16 ΜΜ, blanka είπε

Εισαι θεος του κώδικα το ξέρεις ;

Φαντάζομαι θα σου το έχουν πει κι άλλοι!

Σε ευχαριστώ

Τίποτα :) Αν χρειαστείς κάτι άλλο με EXCEL / Google Sheet formulas κάνε με tag.

  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να ξέρεις ειναι σημαντικό και σπάνιο κάποιος να ξοδέψει τον χρόνο του οχι απλά για να απαντήσει σε κάτι που ξέρει σε κάποιον , αλλά να ΣΚΕΦΤΕΙ κώδικα για έναν ξένο.

Και πάλι ευχαριστώ.

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...
Δημοσ. (επεξεργασμένο)
Στις 24/6/2022 στις 12:09 ΜΜ, blanka είπε

Καλησπέρα.

      Θέλω να φτιάξω 2 στήλες με τιμές, οι οποίες θα τροφοδοτούνται απο πίνακες που εχουν διάφορες τιμές.

Ο κανόνας με τον οποίο θέλω να δημιουργηθούν οι στήλες, φαίνεται στο screenshot που παραθέτω με βελάκια

Σκέφτομαι την INDEX λογικά απλά πρέπει κάπως να αγνοεί τα κενά, και να κάνει την σωστή αντιστοίχιση από τους 2 πίνακες.

Η αντιστοίχιση θα γίνεται ανά σειρά σε κάθε πίνακα, αλλά το πρόβλημα είναι τί γίνεται όταν στην ίδια σειρά θα υπάρχουν 2 ή 3 τιμές που πρέπει να αντιστοιχισθούν και να τοποθετηθούν στις 2 στήλες που θέλω.

image.png.1db43a95a9d4c34799ae81b97059636d.png

 

PLEASE HELP

 

Οι τιμές στα πορτοκαλί κελιά είναι μοναδικές ?

Δηλαδή εμφανίζονται μόνο μία φορά μέσα στα πορτοκαλί?

αν ναι,

τότε Ναι γίνετε με index πολύ απλούστερα από το παράνω νομίζω
(είμαι σε αεροδρόμιο και δε μπορώ να το τσεκάρω 100%)

.

ΥΓ

Τις πορτοκαλί τιμές στις 2 νέες στήλες θες να σου εμφανίζονται αυτόματα ή θα τις βάζεις "χεράτα"? 

Επεξ/σία από DrLo
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στις 15/7/2022 στις 6:40 ΜΜ, DrLo είπε

Οι τιμές στα πορτοκαλί κελιά είναι μοναδικές ?

Δηλαδή εμφανίζονται μόνο μία φορά μέσα στα πορτοκαλί?

αν ναι,

τότε Ναι γίνετε με index πολύ απλούστερα από το παράνω νομίζω
(είμαι σε αεροδρόμιο και δε μπορώ να το τσεκάρω 100%)

.

ΥΓ

Τις πορτοκαλί τιμές στις 2 νέες στήλες θες να σου εμφανίζονται αυτόματα ή θα τις βάζεις "χεράτα"? 

Δεν παίζει ρόλο το χρώμα. δεν βάζω τίποτα χεράτα.

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
4 ώρες πριν, blanka είπε

Δεν παίζει ρόλο το χρώμα. δεν βάζω τίποτα χεράτα.

 

Θα το τσεκαρω και θα σου πω.

Οι τιμές στα πορτοκάλι κελιά είναι μοναδικές?

Δηλαδή πχ το 8600293 υπάρχει μια και μόνο φορά στα αριστερά/πορτοκάλι κελιά?

ΥΓ: υπάρχει κάποιος λόγος που θες να το κάνεις χωρίς χρήση μιας πολύ απλής ρουτίνας σε VBA? (πχ να μην επιτρέπεται η εκτέλεση VBA στον ΗΥ)

Επεξ/σία από DrLo
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

15 ώρες πριν, DrLo είπε

Θα το τσεκαρω και θα σου πω.

Οι τιμές στα πορτοκάλι κελιά είναι μοναδικές?

Δηλαδή πχ το 8600293 υπάρχει μια και μόνο φορά στα αριστερά/πορτοκάλι κελιά?

ΥΓ: υπάρχει κάποιος λόγος που θες να το κάνεις χωρίς χρήση μιας πολύ απλής ρουτίνας σε VBA? (πχ να μην επιτρέπεται η εκτέλεση VBA στον ΗΥ)

Nαι οι τιμές στα πορτοκαλι κελιά είναι μοναδικές

Δεν ξέρω τι είναι το  VBA που λες

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
Στις 15/7/2022 στις 6:40 ΜΜ, DrLo είπε

Οι τιμές στα πορτοκαλί κελιά είναι μοναδικές ?

Δηλαδή εμφανίζονται μόνο μία φορά μέσα στα πορτοκαλί?

αν ναι,

τότε Ναι γίνετε με index πολύ απλούστερα από το παράνω νομίζω
(είμαι σε αεροδρόμιο και δε μπορώ να το τσεκάρω 100%)

.

ΥΓ

Τις πορτοκαλί τιμές στις 2 νέες στήλες θες να σου εμφανίζονται αυτόματα ή θα τις βάζεις "χεράτα"? 

Δεν μπορεί να γίνει με INDEX γιατί πρέπει να γίνει φιλτράρισμα των κενών κελιών. Για να γίνει αυτό θα χρειαστείς ενδιάμεσο function το οποίο δεν μπορεί να μπει στο ίδιο κελί επεξεργασίας του INDEX γιατί θα είναι array function output ενώ το INDEX είναι cell function output, μετά σε δεύτερο στάδιο πρέπει να φιλτράρεις τα κενά κελιά του πίνακα που δημιουργείται. Το INDEX κάνει καταχώρηση αποτελέσματος cell όχι array (σίγουρα θα υπάρχει υλοποίηση Index με επιστροφή array αλλά θα γίνεται αρκετά πιο πολύπλοκο). Οπότε θα μιλάμε για μια υλοποίηση που θα είναι 2-3 σταδίων (στην καλύτερη). Θα είναι βέβαια πιο εύκολα κατανοήσιμη από κάποιον 3ο :) 

Από την στιγμή που γνωρίζουμε τις θέσεις κάθε πίνακα ότι είναι ταυτόσημες το INDEX χάνει την πραγματική του δυναμική και στην ουσία χρειάζεσαι απλά μία έξυπνη ταξινόμηση. Τώρα στην πράξη το VBA θα είναι αρκετά πιο πολύπλοκο σε σχέση με την φόρμουλα που έγραψα πάνω, ειδικά για κάποιον που δεν ξέρει κώδικα.

Γενικά ο συνδυασμός FILTER + LEN είναι ένας έξυπνος συνδυασμός μαζικής αφαίρεσης κενών κελιών, όπου στο παραπάνω πίνακα αυτό είναι και το κύριο του πρόβλημα, τα κενά κελιά. 

Επεξ/σία από Billator
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
56 λεπτά πριν, Billator είπε

Δεν μπορεί να γίνει με INDEX γιατί πρέπει να γίνει φιλτράρισμα των κενών κελιών. Για να γίνει αυτό θα χρειαστείς ενδιάμεσο function το οποίο δεν μπορεί να μπει στο ίδιο κελί επεξεργασίας του INDEX γιατί θα είναι array function output ενώ το INDEX είναι cell function output, μετά σε δεύτερο στάδιο πρέπει να φιλτράρεις τα κενά κελιά του πίνακα που δημιουργείται. Το INDEX κάνει καταχώρηση αποτελέσματος cell όχι array (σίγουρα θα υπάρχει υλοποίηση Index με επιστροφή array αλλά θα γίνεται αρκετά πιο πολύπλοκο). Οπότε θα μιλάμε για μια υλοποίηση που θα είναι 2-3 σταδίων (στην καλύτερη). Θα είναι βέβαια πιο εύκολα κατανοήσιμη από κάποιον 3ο :) 

Από την στιγμή που γνωρίζουμε τις θέσεις κάθε πίνακα ότι είναι ταυτόσημες το INDEX χάνει την πραγματική του δυναμική και στην ουσία χρειάζεσαι απλά μία έξυπνη ταξινόμηση. Τώρα στην πράξη το VBA θα είναι αρκετά πιο πολύπλοκο σε σχέση με την φόρμουλα που έγραψα πάνω, ειδικά για κάποιον που δεν ξέρει κώδικα.

Γενικά ο συνδυασμός FILTER + LEN είναι ένας έξυπνος συνδυασμός μαζικής αφαίρεσης κενών κελιών, όπου στο παραπάνω πίνακα αυτό είναι και το κύριο του πρόβλημα, τα κενά κελιά. 

Καλά δε λέω μόνο με index.

Δεν είχα χρόνο να ασχοληθώ αλλά μου έχει έξαψει τη περιέργεια. Θα το δω όταν βρω χρόνο.

Δε μπορεί να μη γίνεται "πιο απλά" από το παραπάνω (αν και με VBA θα ήταν το απλούστερο νομίζω)

Επεξ/σία από DrLo
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

34 λεπτά πριν, DrLo είπε

Δε μπορεί να μη γίνεται "πιο απλά" από το παραπάνω (αν και με VBA θα ήταν το απλούστερο νομίζω)

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

Σίγουρα υπάρχουν πολύ πιο απλές λύσεις (για να μπορεί ο άλλος να καταλαβαίνει και τι κάνει ακριβώς), αλλά για One cell function solution θα είναι "μακρινάρια" και εκείνες. Αν μπορείς κάνε μία υλοποίηση και εσύ (εφόσον έχεις χρόνο) μπορεί να πάρω και εγώ καμία ιδέα με τον τρόπο / λογική που το λύνεις εσύ και να βοηθήσεις και τον TS με μια εναλλακτική. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Συμφωνώ.

Θα το ψάξω σίγουρα

Εχω μπλέξει τώρα με κάτι της δουλειάς και δεν έχω βρει το χρόνο αλλά κάτι έχω στο μυαλό μου.

Θα επανέλθω.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...