Samdreamth Δημοσιεύτηκε Νοέμβριος 14 , 2012 Δημοσιεύτηκε Νοέμβριος 14 , 2012 Όταν σου βγάζει το error πατάς debug και σου επιλέγει αυτή την γραμμή? Μήπως δεν πατάς debug? Σε ρωτάω γιατί όπως βλέπεις όλες οι μεταβλητές δηλώνονται οπότε δεν πρέπει να βγάζει τέτοιο error. Μάλλον κάτι άλλο θα είναι. Παρεμπιπτόντως, στον παραπάνω κώδικα θεωρώ ότι τα δεδομένα σου είναι αριθμοί και όχι πχ κείμενο...
cvlengnr Δημοσιεύτηκε Νοέμβριος 14 , 2012 Δημοσιεύτηκε Νοέμβριος 14 , 2012 (edited) τα δεδομενα μου ειναι νουμερα. Στο μηνυμα σφαλματος δεν υπαρχει η επιλογη debug. Edited Νοέμβριος 14 , 2012 by cvlengnr
Samdreamth Δημοσιεύτηκε Νοέμβριος 15 , 2012 Δημοσιεύτηκε Νοέμβριος 15 , 2012 Τα ελληνικά φταίγανε.... Έχω αγγλική έκδοση ενώ εσύ ελληνική... Δες το, τώρα θα πρέπει να δουλεύει >Option Explicit Option Base 1 Sub TransposeData() Dim i As Integer Dim k As Integer Dim arr(1560) As Double Application.ScreenUpdating = False Φύλλο1.Activate 'Θεωρώ ότι τα δεδομένα σου είναι στο 1ο φύλλο, στην περιοχή Α1:GM8 For i = 1 To 195 For k = 1 To 8 arr((i - 1) * 8 + k) = Cells(k, i).Value Next k Next i 'Τη νέα στήλη την περνάω στο 2ο φύλλο Φύλλο2.Activate Range("A1:A1560").Value = WorksheetFunction.Transpose(arr) Application.ScreenUpdating = True End Sub 2
cvlengnr Δημοσιεύτηκε Δεκέμβριος 31 , 2012 Δημοσιεύτηκε Δεκέμβριος 31 , 2012 Καλημερα & χρόνια πολλα σε ολους. Εχω ενα προβληματακι (γιορταρα μερα με αυτο ασχολουμαι !!!) Εχω μια ν αδα δεδομένων σε στήλη. Το ν ειναι μεταβλητο αλλα γνωστο σε κάθε περιπτωση. Τα δεδομενα αυτα ας πουμε οτι ειναι στα κελια απο Α24+κ εως Α24+κ+ν. Το κ ειναι μια αλλη μεταβλητη του προβλήματος επισης γνωστη κάθε φορα. Αυτο που θέλω ειναι σε μια αλλη ν-αδα κελιων που ξεκινάνε σε ενα τυχαιο (αλλα γνωστο καθε φορα) Αi να αντιστοιχω τις ν γνωστες τιμες. Υπαρχει τροπος οι δεικτες να ειναι μεταβλητοι χωρις κωδικα VBA Ψαχνω για κάτι σαν το vlookup μονο που η περιοχη του πίνακα που θα γίνει η αναζητηση (table array) ειναι δυναμική και οχι η ιδια καθε φορα.
apostolos55 Δημοσιεύτηκε Ιανουάριος 2 , 2013 Δημοσιεύτηκε Ιανουάριος 2 , 2013 (edited) Καλημέρα και καλή χρονιά! στο προκείμενο τώρα, μία επιλογή είναι η χρήση της INDEX() ή της OFFSET(), πχ έχεις Β1=κ, Β2=ν , Β3=i και θες να ξεκινάς από Αi (i=B3), τότε γράφεις: =index(A$24:A$1000;$B$3-(row()-z)) όπου z=ROW(γραμμή 1ης εντολής +F4), δηλαδή για τοποθέτηση της συνάρτησης από το B10 και κάτω, γράφεις: =index(A$24:A$1000;$B$3-(row()-row(B$10))) ...έτσι στο Β10 θα επιστρέφει το Α(24+i), στο Β11 το A(24+i+1) .... φυσικά μπορείς να χρησιμοποιήσεις και την OFFSET, με τελική εγγραφή στο C10: =Offset(A$24;$B$3+(row()*row(C$10));0) πρόσεξε ότι η OFFSET δεν περιορίζεται από τα υπάρχοντα δεδομένα και ότι είναι volatile, το οποίο σημαίνει ότι υπολογίζεται με οποιαδήποτε αλλαγή στο excel, και όχι μόνο τις σχετικές με τη συνάρτηση αλλαγές, το οποίο μπορεί να οδηγήσει σε αργά φύλλα και χρονοβόρους υπολογισμούς. επίσης δες ότι έχω γράψει Α$24:Α$1000, το 1000 μπορεί να είναι ότι σε βολεύει. Μπορεί να είναι και offset(A$24;;;$B$1+$B$2) (δηλαδή Α(24 ως 24+κ+ν)) αλλά καλύτερα να βάλεις κάτι ...μεγάλο και να αποφύγεις την offset! Μην κάνετε παράθεση του αμέσως προηγούμενου μηνύματος για λόγους οικονομίας του φόρουμ. Διαβάστε τους κανόνες συμμετοχής. Γιάννης Edited Ιανουάριος 2 , 2013 by Γιάννης 3
cvlengnr Δημοσιεύτηκε Ιανουάριος 3 , 2013 Δημοσιεύτηκε Ιανουάριος 3 , 2013 Το πρόβλημα ειναι οτι το κελι που ξεκινάνε τα δεδομενα δεν ειναι παντα το ιδιο. ΕΙναι το Α24+μια αλλη μεταβλητη. Κατα συνεπεια δεν μπορω να δωσω index αφου δεν δεχεται μεταβλητο array. Χρειάζομαι να ορίσω μεταβλητη περιοχη.
Samdreamth Δημοσιεύτηκε Ιανουάριος 3 , 2013 Δημοσιεύτηκε Ιανουάριος 3 , 2013 Χωρίς να είμαι 100% σίγουρος ότι έχω καταλάβει αυτό που θες να κάνεις θα πρότεινα το εξής: Α) Δημιουργείς ένα όνομα – πχ Data – χρησιμοποιώντας τον εξής τύπο: =OFFSET(INDIRECT(ADDRESS(24+Sheet1!$A$8;1));0;0;Sheet1!$A$10) Όπου Sheet1!$A$8 το κ και Sheet1!$A$10 το ν (τα αλλάζεις ανάλογα). Β) Επιλέγεις ανάλογα v κελιά και πατάς =Data αλλά αντί για Enter πατάς CTRL + SHIFT + ENTER ώστε να μπει ως πίνακας. Παρεμπιπτόντως, καλή χρονιά σε όλους!
apostolos55 Δημοσιεύτηκε Ιανουάριος 4 , 2013 Δημοσιεύτηκε Ιανουάριος 4 , 2013 @cvlengnr από την στιγμή που θες να αντιστοιχίσεις τα δεδομένα, η Index σου κάνει μια χαρά. Δηλαδή και A1:A1000 να πάρεις, με τα δεδομένα σου να αρχίζουν από Α40, απλά πρόσθεσε το 40 στο Index: =index(A$1:A$1000;40-(row()-row(B$10))). Και η Offset σου κάνει: =Offset(A$1;40+(row()*row(C$10));0), αλλά τα είπαμε για τις volatile functions... Τώρα αν δεν ξέρεις που αρχίζει, ψάξε με Match(value;$A$1:$A$1000;0) να το βρεις, και βάλε το αποτέλεσμα στη θέση του 40.... Αν τα δεδομένα σου είναι ταξινομημένα, προτίμησε Match(value;$A$1:$A$1000; {1 ή -1} ) για πολύ πιο γρήγορη αναζήτηση. (δες βοήθεια για Match για λεπτομέρειες)... Cheers
apostolos55 Δημοσιεύτηκε Ιανουάριος 5 , 2013 Δημοσιεύτηκε Ιανουάριος 5 , 2013 (edited) Σχετικά μe παλιότερα posts και την EvalMath του Gousgouni gvarth, βρήκα την Evaluate() στο Excel Κρυμμένη από το Excel, αλλά υπαρκτή στο RefersTo στα Named Ranges... κουφάθηκα όταν το είδα και διαπίστωσα ότι δουλεύει... λεπτομέρειες και εδώ. Edited Ιανουάριος 5 , 2013 by Gousgounis Διόρθωση: Τα εύσημα εκεί που αξίζουν... :)
Recommended Posts
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε προκειμένου να αφήσετε κάποιο σχόλιο
Πρέπει να είστε μέλος για να μπορέσετε να αφήσετε κάποιο σχόλιο
Δημιουργία λογαριασμού
Κάντε μια δωρεάν εγγραφή στην κοινότητά μας. Είναι εύκολο!
Εγγραφή νέου λογαριασμούΣύνδεση
Εάν έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα