Μετάβαση στο περιεχόμενο
Ακολουθήστε τη νέα μας σελίδα στο Facebook! ×

Μακροεντολή προσθήκης σειρών σε ασυνέχειες δεδομένων στο Excel


giannis89

Recommended Posts

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

 

Ο λόγος που θέλω να το κάνω αυτό είναι ότι έχω δεδομένα για την απόδοση μιας φωτοβολταϊκής συστοιχίας, τα οποία έχουν χρονικό βήμα ενός λεπτού για περίπου δυόμιση χρόνια (δηλαδή εκατομμύριες καταχωρήσεις). Οι ασυνέχειες που παρουσιάζονται στα δεδομένα, κυρίως αυτές λόγω κάποιας διακοπής/σφάλματος του οργάνου καταγραφής, με εμποδίζουν από το να αναλύσω σωστά τα δεδομένα. Η προσθήκη ολόκληρων σειρών στο excel μαζί με τις χρονικές στιγμές που λείπουν (με μακροεντολή) θα έλυνε το πρόβλημα. Όσο για τα κενά δεδομένων που θα προκύψουν στις υπόλοιπες στήλες, αυτά μπορώ να τα αντιμετωπίσω εύκολα με προσθήκη κάποιων μέσων τιμών.

 

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

Link to comment
Share on other sites

Καλημέρα και καλώς ήρθες στο Michanikos.gr .

 

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

 

Για να "ανεβάσεις" συνημμένα θα πρέπει να επιλέξεις "Χρήση Πλήρους Επεξεργαστή κειμένου" από το κουμπί κάτω δεξιά και στη συνέχεια να επισυνάψεις τα αρχεία σου . Πρώτα επιλέγεις αρχείο και μετά πατάς στο επισύναψη αρχείου . Το επαναλαμβάνεις τόσες φορές όσα και τα αρχεία που θέλεις να επισυνάψεις . Μετά πατάς στο "Απάντηση" .

Link to comment
Share on other sites

Καλημέρα,

 

Μάλλον δεν πάτησα "επισύναψη" μετά την επιλογή αρχείου, ίσως έφταιγε και η ώρα... Ευχαριστώ για την επισήμανση. Δεν βλέπω πουθενά το "Χρήση Πλήρους Επεξεργαστή κειμένου".

Αυτή τη φορά, επισύναψα δείγμα του αρχείου με χρονική ασυνέχεια, όπως μου προτείνατε. Έχω προσθέσει το αρχείο Excel σε συμπιεσμένο φάκελο .zip επειδή δε μου επέτρεπε το πρόγραμμα να το ανεβάσω αυτούσιο.

δείγμα.zip

Link to comment
Share on other sites

Καλησπέρα .

 

Τα ζητούμενα :

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

 

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

 

Αν το πλήθος των γραμμών του αρχείου υπερβαίνει τις 1.048.576 , δεν πρόκειται να γίνει δουλειά στο Excel 2007 γιατί αυτό είναι και το όριο γραμμών που υποστηρίζει . Συζητάμε λοιπόν ότι η μακροεντολή ίσως να πρέπει να "τρέξει" στο Excel 2010 το οποίο πρακτικά δεν έχει όριο στο πλήθος των γραμμών .

 

Θα το δω αναλυτικότερα και αν έχω κάποιο θετικό αποτέλεσμα θα επανέλθω.

  • Upvote 1
Link to comment
Share on other sites

Το έχω λάβει αυτό υπόψη, ένα έτος έχει περίπου 525.600 λεπτά, κι εγώ έχω σπάσει τα δεδομένα σε τρία υπολογιστικά φύλλα, ένα ανά έτος. Είχα το Office 2010 64bit και νομίζω μπορούσε να δεχθεί μέχρι 1,5 εκατομμύριο σειρές - μετά δεν δεχόταν εισαγωγή άλλων σειρών. Μόλις τώρα το αναβάθμισα στην έκδοση 2013 (δοκιμαστικά) αλλά δεν έχω προλάβει να δω τις δυνατότητές του. Σε κάθε περίπτωση, το θέμα του αριθμού των γραμμών δε νομίζω να είναι πρόβλημα έτσι όπως το έχω κάνει. Η δυσκολία, νομίζω, είναι στην εύρεση της συνάρτησης που εντοπίζει τις ασυνέχειες και στην προσθήκη της εντολής που θα εισάγει τους χρόνους που λείπουν.

 

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

Link to comment
Share on other sites

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

 

Παρακαλώ .

 

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

 

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

 

Το θέμα είναι η εύρεση της συνάρτησης όπως σωστά εντοπίζεις και όχι η αναβάθμιση του Excel σε έκδοση 2013 όπου δεν θα μπορέσω να δοκιμάσω την μακροεντολή πριν στη στείλω .

 

Βέβαια υπάρχει περίπτωση κάποιο μέλος να έχει αντιμετωπίσει κάτι αντίστοιχο και να έχεις άμεσα απάντηση .

 

Αν ο χρόνος σε πιέζει , κάνε την ίδια ερώτηση εδώ ή εδώ ή και εδώ αφού πρώτα κάνεις εγγραφή . Είναι ειδικά forum για το Excel και υπάρχει πιθανότητα ένα από τα χιλιάδες μέλη τους να έχει ήδη ασχοληθεί με κάτι αντίστοιχο ή να έχει άμεσα χρόνο για να ασχοληθεί .

  • Upvote 2
Link to comment
Share on other sites

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

 

Θα έβγαζα τις τιμές από το excel ως csv (τιμές διαχωρισμένες με κόμμα).

Θα έβαζα τις τιμές ανά στήλη σε array.

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

Σε κάποιες στήλες θα χρησιμοποιούσα παρεμβολή ανάλογα με τα δεδομένα ενώ σε άλλες (πχ θερμοκρασία) θα πήγαινα στην κοντινότερη χρονική σήμανση.

 

Το excel δε νομίζω να βοηθήσει ιδιαίτερα. Θα σε μπερδέψει χειρότερα ή θα κολλήσει πρακτικά με τόσες τιμές.

Link to comment
Share on other sites

Επειδή η επεξεργασία με ενδιαφέρει να γίνει στο excel, μπορώ αφού εφαρμόσω τη μέθοδό σου να επαναφέρω τα δεδομένα στο φύλλο εργασίας; Υποθέτω πως ναι...

 

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

 

Δηλαδή, π.χ. έχω

 

1/1/11 12:01 123

1/1/11 12:02 136

1/1/11 12:03 152

1/1/11 12:06 128 (ασυνέχεια)

1/1/11 12:07 140

 

και θέλω να προκύψει

 

1/1/11 12:01 123

1/1/11 12:02 136

1/1/11 12:03 152

1/1/11 12:04

1/1/11 12:05

1/1/11 12:06 128

1/1/11 12:07 140

 

Εάν μπορείς να μου πεις με ποια γλώσσα προγραμματισμού μπορώ να το κάνω αυτό, οκ! (Η μόνη που ξέρω να γράφω κάποια πράγματα είναι φορτραν) Ευχαριστώ_

Link to comment
Share on other sites

Καλά , όσον αφορά τη Fortran , μάλλον θα ταλαιπωρηθείς χωρίς λόγο .

 

Ήδη κάτι δουλεύω πάνω σε αυτό που ρώτησες ελέγχοντας συνεχόμενα κελλιά καθώς και τη διαφορά τους . Αν η διαφορά τους είναι μεγαλύτερη από 00:01 τότε θα προστεθούν τόσες γραμμές όσες η ακέραια διαφορά της αξίας των συνεχόμενων κελλιών .

 

Αν η διαφορά των δύο συνεχόμενων κελλιών είναι 0:45 , τότε λείπουν 44 γραμμές με τα αντίστοιχα κενά δεδομένα .

Αν λείπουν ώρες θα γίνεται γινόμενο των ωρών (έχοντας αφαιρέσει ένα λεπτό) * 60 + τα ακέραια λεπτά της ώρας .

 

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

 

Ίσως να ανεβάσω κάτι αργά το βράδυ σήμερα .

Edited by gvarth
Link to comment
Share on other sites

Επισυνάπτω το παράδειγμα που έχεις ανεβάσει ως xlsx

Έχω αποθηκεύσει σε τιμές διαχωρισμένες με κόμμα (csv)

Έχω τρέξει αυτό που έγραψα σε php το οποίο τραβάει το deigma.csv και αποθηκεύει το corrected.csv (το οποίο ανοίγει σε excel κανονικά με τις στήλες του)

 

Αρχικά διαβάζει το αρχικό αρχείο γραμμή - γραμμή και βάζει όλες τις γραμμές σε array.

H 1η γραμμή είναι τα ονόματα στηλών.

Από τη 2η και μετά οι τιμές

 

Σε κάθε γραμμή:

Εαν η τιμή της 2ης στήλης (εκεί που ξεκινούν οι τιμές δηλαδή μέχρι και της τελευταίας) είναι μηδέν τότε τσεκάρει τη διαφορά ημερομηνίας της γραμμής με την προηγούμενη και την επόμενη και προσθέτει είτε την προηγούμενη τιμή είτε την επόμενη

 

Τέλος εξάγει τις array ως τιμές διαχωρισμένες με κόμμα ανά γραμμή.

 

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

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

asynexeia.rar

  • Upvote 2
Link to comment
Share on other sites

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

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

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

Κάντε μια δωρεάν εγγραφή στην κοινότητά μας. Είναι εύκολο!

Εγγραφή νέου λογαριασμού

Σύνδεση

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

Συνδεθείτε τώρα
×
×
  • Create New...

Σημαντικό

Χρησιμοποιούμε cookies για να βελτιώνουμε το περιεχόμενο του website μας. Μπορείτε να τροποποιήσετε τις ρυθμίσεις των cookie, ή να δώσετε τη συγκατάθεσή σας για την χρήση τους.