papazaf Δημοσ. 31 Μαρτίου 2005 Δημοσ. 31 Μαρτίου 2005 ρε παιδια, στο excel οταν εχω εναν πινακα που στην πρωτη στηλη του εχει μια σειρα απο καταχωρησεις , αλλα η ιδια καταχωρηση υπαρχει πανω απο μια φορα καπως εστι: ΠΙΝΑΚΑΣ Α 138377 138378 138378 138378 138378 138378 138379 138379 138379 138380 138380 138381 138381 138381 138381 138381 138382 138382 138423 138423 138423 πως θα μπορουσα να βαζω σε μια νεα στηλη τις καταχωρησεις που θελω πχ ΠΙΝΑΚΑΣ Β 138381 138377 138423 και να πηγαινει στον πινακα Α, να διαγελει ολες τις γραμες που αρχιζουν απο τις καταχωρησειςτου πινακα Β και να τις κανει copy σε ενα νεο sheet?????? το vlookup δεν το κανει το δοκιμασα....
dragon_syr Δημοσ. 1 Απριλίου 2005 Δημοσ. 1 Απριλίου 2005 θες να κρυβει τις διπλοεγγραφες δηλαδή και να κανει νεα στηλη με τα υπολοιπα? δεν εχεις γινει απολυτα κατανοητος
michalakis Δημοσ. 1 Απριλίου 2005 Δημοσ. 1 Απριλίου 2005 Αν κατάλαβα καλά θες από τον πίνακα Β να παίρνεις κάποια τιμή και να πηγαίνεις στον πίνακα Α να βρίσκεις όλες τις σειρές που έχουν ως πρώτη τιμή αυτή από τον πίνακα Β και να τις κάνεις copy σε νέο sheet, σωστά? αν ναι πες και θα πάρεις απάντηση
papazaf Δημοσ. 1 Απριλίου 2005 Μέλος Δημοσ. 1 Απριλίου 2005 ΝΑΙ, αυτο που λεει ο φιλος michalakis θα ηθελα
michalakis Δημοσ. 1 Απριλίου 2005 Δημοσ. 1 Απριλίου 2005 Ωραία, πρώτα κάνεις ένα sort τον πίνακα Α (όχι μόνο τη στήλη 1 αλλά ολόκληρο τον πίνακα) ως προς την 1η στήλη (αυτή με τις τιμές του πίνακα Β),π.χ. --> Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Στη συνέχεια απλώς βρίσκεις το row στο οποίο βρίσκεται η τιμή που θέλεις από τον πίνακα Β. π.χ. για την τιμή 213--> Columns("A:A").Select Selection.Find(What:="213", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate οπότε έχεις active το πρώτο κελί που έχει την τιμή που θες και με την εντολή σταρτρος=Activecell.row βρισκεις τη σειρά στην οποία βρίσκεται έπειτα ψάχνοντας προς τα κάτω βρίσκεις το κελί στο οποίο έχεις διαφορετική τιμή από αυτή που θες(μιας και θέλεις όλες τις σειρές με την ίδια τιμή) π.χ.--> i = 0 Do i = i + 1 If ActiveCell.Offset(i, 0).Value <> 213 Then lastrow = ActiveCell.Offset(i - 1, 0).Row Exit Do End If Loop οπότε έχεις: startrow την αρχική σειρά, lastrow την τελική σειρά και πες ότι ο πίνακας έχει 5 στήλες--> Range(Cells(startrow, 1), Cells(lastrow, 6)).Copy (Sheets(2).Range("a2")) και το αντιγράφεις π.χ. στο δεύτερο sheet στη θέση A2 και κάτω ή καλύτερα--> x = Sheets(2).Range("A2").End(xlDown).Offset(1, 0).Row ... (η πρώτη γραμμή κάτω κάτω που είναι κενή στο δεύτερο sheet) Range(Cells(startrow, 1), Cells(lastrow, 6)).Copy (Sheets(2).Cells(x, 1)) αυτά...αν έχεις απορία ή κάτι άλλο pls ask!! BYE m
papazaf Δημοσ. 1 Απριλίου 2005 Μέλος Δημοσ. 1 Απριλίου 2005 στο "Selection.Find(What:="213"...." το 213 μπορει να το παιρνει απο ενα κελι απο ενα αλλο sheet του στυλ sheet1 $Β1????
michalakis Δημοσ. 1 Απριλίου 2005 Δημοσ. 1 Απριλίου 2005 άνετα, αλλά καλύτερα να βάλεις κάτι σαν... Selection.Find(What:=Sheets(3).Cells(2, 1).Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate όπου σαν τιμή (δηλ το 213 του προηγ.) παραδείγματος παίρνει το Α2 του sheet3 ή καλύτερα να το έχεις σαν παράμετρο π.χ. what:=val , όπου val μπορεί να αλλάζει τιμή σε ένα loop, μιας και δε θα θέλεις να το κάνεις μόνο για μια τιμή αλλά για τιμές ενός πίνακα όπως είπες....
gerontas Δημοσ. 1 Απριλίου 2005 Δημοσ. 1 Απριλίου 2005 Η λύση που προτείνει ο michalakis κινείται πρός τη βέλτιστη κατεύθυνση. Εχω κάποιες παρατηρήσεις, μέχρι να τις εξηγήσω, θάθελα να προτείνω κάποιες πιό τετριμένες ιδέες, που ίσως φανούν χρήσιμες, ειδικά αν ο papazaf βιάζεται να ετοιμάσει κάτι εδώ και τώρα. 1. Η Εύκολη (αλλά μπακάλικη) λύση Εστω s_data το φύλλο των κυρίως δεδομένων μας και s_inp το φύλλο που στην πρώτη του στήλη καταχωρούμε τον Πίνακα Β, π.χ στις γραμμές από 1 έως 9. (α) Αντιγράφουμε το s_data σε ένα Νέο Φύλλο, έστω το s_res. (β) Στην Πρώτη Ελεύθερη Στήλη του s_res (έστω την Κ) εισάγουμε στην πρώτη γραμμή δεδομένων (λογικά στο Κ2, αν η γραμμή 1 έχει Επικεφαλίδες) τη Σχέση: =MATCH(A2;s_inp!$A$1:$A$9;0) (γ) Αντιγράφουμε τη σχέση αυτή στη στήλη Κ, για όλες της μή κενές γραμμές του s_res Τα κελλιά που ανήκουν σε εγγραφές με "Κωδικό" που υπάρχει στον Πίνακα Β θα έχουν τιμή ίση με τη θέση που βρίσκεται ο "Κωδικός" στον Πίνακα Β (από το 1 ως το 9) ενώ για τις γραμμές που αντιστοιχούν σε Κωδικό ανύπαρκτο για τον Πίνακα Β θα έχουν Τιμή #N/A. Τις γραμμές αυτές τις απομονώνουμε (με διαγραφή ή απόκρυψη -ό,τι βολεύει) με Φίλτρο ή Ταξινόμηση. 2. Λίγο καλύτερα (με Vlookup) (Κρατάμε τις παραδοχές της λύσης 1, δηλ. ονομάζουμε s_data το φύλλο των κυρίως δεδομένων μας και s_inp το φύλλο που στην πρώτη του στήλη καταχωρούμε τον Πίνακα Β, πάλι για παράδειγμα στις γραμμές από 1 έως 9). (α) Εισάγουμε μια κενή στήλη την "Α" στο s_data, μετατοπίζοντας τα δεδομένα μας προς τα δεξιά. (β) Στο κελλί Α2 (πάλι θεωρώντας ότι η γραμμή 1 έχει Επικεφαλίδες) εισάγουμε τη Σχέση =IF(ISERROR(MATCH(B2;s_inp!$A$1:$A$9;0));0;MAX(A1:A$2)+1) και την αντιγράφουμε μέχρι την τελευταία γραμμή δεδομένων. Ετσι, οι εγγραφές που δεν απεικονίζονται στον Πίνακα Β θα έχουν στην Στήλη Α τιμή 0, ενώ οι υπόλοιπες θα αριθμηθούν από το 1 έως το Πλήθος τους με βήμα 1. (γ) Προσδιορίζοντας εύκολα τη μέγιστη τιμή της στήλης Α του s_data (με φίλτρο, συνάρτηση max ή όπως αλλιώς βολεύει), δημιουργούμε το s_res, ώστε να έχει στην στήλη Α τις τιμές 1,2,3... ως τη μέγιστη τιμή και συμπληρώνουμε τα "κανονικά" πεδία με vlookup ως προς το νέο βοηθητικό πεδίο που δημιουργήσαμε). Εναλλακτικά, μπορούμε να μη μεταφέρουμε τις τιμές στο s_res, αλλά να το ξεκινήσουμε από το A2, με τη σχέση: VLOOKUP(CELL("row";A2)-1;s_data!$A$2:$F$570;CELL("col";A2)+1;FALSE) και να την αντιγράψουμε προς τα κάτω και προς τα δεξιά. (προς τα δεξιά θα μας περιορίσουν οι επικεφαλίδες, προς τα κάτω η εμφάνιση τιμών #N/A). Στην περίπτωση αυτή, εννοείται ότι θεωρούμε αυθαίρετα το F570 σαν όριο του range που περιέχει δεδομένα στο αρχικό Φύλλο. Αν και η λύση (2) μου αρέσει περισσότερο, έχει ωστόσο το μειονέκτημα να μη μεταφέρει αυτόματα τις τυχόν μορφοποιήσεις των στηλών. 3. Ξεφεύγοντας από το Excel (όχι και πολύ: Μέχρι την Access) Μην Κρυβόμαστε: Το Excel (και κάθε λογιστικό φύλλο, εκτός από το αξέχαστο Improv) δεν είναι σχεδιασμένο για τέτοιες δουλειές. Αν χρησιμοποιούσαμε Open Office, η λογική επιλογή θα ήταν να πάμε στα db tools, χωρίς να εγκαταλείψουμε το Calc, αλλά το "ισχυρό σημείο" του δημιουργήματος του κ. Bill, η ..."ύπαρξη Database" μας αναγκάζει ν' αλλάξουμε για λίγο περιβάλλον: (α) Σώνουμε το Αρχείο με τα Φύλλα s_data και s_inp, κλείνουμε το Excel και ανοίγουμε μια Κενή Βάση στην Access. (β) Εκτελούμε δύο φορές διαδοχικά την Εντολή File-> Get External Data (Αρχείο-> Λήψη Εξωτερικών Δεδομένων άν θυμάμαι καλά) και από τον Wizard (που είναι σκέτος τυφλοσούρτης, να τα λέμε όλα) Δημιουργούμε δύο Πίνακες s_data και s_inp, εισάγοντας κάθε φορά το σχετικό φύλλο του Excel. (γ) Πάμε στα Ερωτήματα(Queries). Τον Wizard των Ερωτημάτων δεν τον συμπάθησα ποτέ, και θα σας μπερδέψω, επιτρέψτε μου να γράψω το Ερώτημα σε SQL. Για το παράδειγμα, έστω ότι οργανώνουμε την Ταινιοθήκη μας με τα πεδία (στο s_inp) Κωδ.(Σκηνοθέτη), Σκηνοθέτης, Πρωτότυπος Τίτλος, Ελληνικός Τίτλος, Ετος (Παραγωγής). Καταχωρούμε κάποιους Κωδ. Σκηνοθετών στο s_inp, βαφτίζουμε το Πεδίο N_Code και γράφουμε το ερώτημα ως εξής: SELECT s_data.Κωδ, s_data.Σκηνοθέτης, s_data.[Πρωτότυπος Τίτλος], s_data.[Ελληνικός Τίτλος], s_data.Ετος FROM s_data INNER JOIN s_inp ON s_data.Κωδ = s_inp.N_Code; Εκτελούμε το Ερώτημα και Voila! Αποθηκεύουμε τον Πίνακα που θα προκύψει, σαν s_res, πάμε File-> Export, διαλέγουμε Τύπο Αρχείου Excel και δεν έχουμε παρά να εισάγουμε το Φύλλο αυτού του Αρχείου δίπλα στα δυό αρχικά. Μπορεί να ακούγεται πολύπλοκο, αλλά κατά τη γνώμη μου είναι η (συμβατική) λύση που τα βήματά της είναι απολύτως προφανή κι εμπεριέχουν τον μικρότερο κίνδυνο λάθους.
papazaf Δημοσ. 1 Απριλίου 2005 Μέλος Δημοσ. 1 Απριλίου 2005 παιδια ολεσ οι λυσεις που προτεινατε ειναι θα ελεγα αριστες, σας ευχαριστω πολυ, θα τις δουλεψω και θα σας πω εντυπωσεις
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.