Samdreamth Δημοσιεύτηκε November 14, 2012 at 11:14 μμ Δημοσιεύτηκε November 14, 2012 at 11:14 μμ Όταν σου βγάζει το error πατάς debug και σου επιλέγει αυτή την γραμμή? Μήπως δεν πατάς debug? Σε ρωτάω γιατί όπως βλέπεις όλες οι μεταβλητές δηλώνονται οπότε δεν πρέπει να βγάζει τέτοιο error. Μάλλον κάτι άλλο θα είναι. Παρεμπιπτόντως, στον παραπάνω κώδικα θεωρώ ότι τα δεδομένα σου είναι αριθμοί και όχι πχ κείμενο...
cvlengnr Δημοσιεύτηκε November 14, 2012 at 11:52 μμ Δημοσιεύτηκε November 14, 2012 at 11:52 μμ (edited) τα δεδομενα μου ειναι νουμερα. Στο μηνυμα σφαλματος δεν υπαρχει η επιλογη debug. Edited November 14, 2012 at 11:54 μμ by cvlengnr
Samdreamth Δημοσιεύτηκε November 15, 2012 at 09:38 πμ Δημοσιεύτηκε November 15, 2012 at 09:38 πμ Τα ελληνικά φταίγανε.... Έχω αγγλική έκδοση ενώ εσύ ελληνική... Δες το, τώρα θα πρέπει να δουλεύει >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 Δημοσιεύτηκε November 15, 2012 at 10:37 πμ Δημοσιεύτηκε November 15, 2012 at 10:37 πμ Ευχαριστω πολυ.
cvlengnr Δημοσιεύτηκε December 31, 2012 at 01:23 πμ Δημοσιεύτηκε December 31, 2012 at 01:23 πμ Καλημερα & χρόνια πολλα σε ολους. Εχω ενα προβληματακι (γιορταρα μερα με αυτο ασχολουμαι !!!) Εχω μια ν αδα δεδομένων σε στήλη. Το ν ειναι μεταβλητο αλλα γνωστο σε κάθε περιπτωση. Τα δεδομενα αυτα ας πουμε οτι ειναι στα κελια απο Α24+κ εως Α24+κ+ν. Το κ ειναι μια αλλη μεταβλητη του προβλήματος επισης γνωστη κάθε φορα. Αυτο που θέλω ειναι σε μια αλλη ν-αδα κελιων που ξεκινάνε σε ενα τυχαιο (αλλα γνωστο καθε φορα) Αi να αντιστοιχω τις ν γνωστες τιμες. Υπαρχει τροπος οι δεικτες να ειναι μεταβλητοι χωρις κωδικα VBA Ψαχνω για κάτι σαν το vlookup μονο που η περιοχη του πίνακα που θα γίνει η αναζητηση (table array) ειναι δυναμική και οχι η ιδια καθε φορα.
apostolos55 Δημοσιεύτηκε January 2, 2013 at 09:28 πμ Δημοσιεύτηκε January 2, 2013 at 09:28 πμ (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 January 2, 2013 at 09:39 πμ by Γιάννης 3
cvlengnr Δημοσιεύτηκε January 3, 2013 at 12:19 μμ Δημοσιεύτηκε January 3, 2013 at 12:19 μμ Το πρόβλημα ειναι οτι το κελι που ξεκινάνε τα δεδομενα δεν ειναι παντα το ιδιο. ΕΙναι το Α24+μια αλλη μεταβλητη. Κατα συνεπεια δεν μπορω να δωσω index αφου δεν δεχεται μεταβλητο array. Χρειάζομαι να ορίσω μεταβλητη περιοχη.
Samdreamth Δημοσιεύτηκε January 3, 2013 at 09:02 μμ Δημοσιεύτηκε January 3, 2013 at 09:02 μμ Χωρίς να είμαι 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 Δημοσιεύτηκε January 4, 2013 at 04:07 μμ Δημοσιεύτηκε January 4, 2013 at 04:07 μμ @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 Δημοσιεύτηκε January 5, 2013 at 03:08 μμ Δημοσιεύτηκε January 5, 2013 at 03:08 μμ (edited) Σχετικά μe παλιότερα posts και την EvalMath του Gousgouni gvarth, βρήκα την Evaluate() στο Excel Κρυμμένη από το Excel, αλλά υπαρκτή στο RefersTo στα Named Ranges... κουφάθηκα όταν το είδα και διαπίστωσα ότι δουλεύει... λεπτομέρειες και εδώ. Edited January 5, 2013 at 10:49 μμ by Gousgounis Διόρθωση: Τα εύσημα εκεί που αξίζουν... :)
Recommended Posts
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε προκειμένου να αφήσετε κάποιο σχόλιο
Πρέπει να είστε μέλος για να μπορέσετε να αφήσετε κάποιο σχόλιο
Δημιουργία λογαριασμού
Κάντε μια δωρεάν εγγραφή στην κοινότητά μας. Είναι εύκολο!
Εγγραφή νέου λογαριασμούΣύνδεση
Εάν έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα