Μετάβαση στο περιεχόμενο

Recommended Posts

Δημοσιεύτηκε

Όταν σου βγάζει το error πατάς debug και σου επιλέγει αυτή την γραμμή?

Μήπως δεν πατάς debug?

 

Σε ρωτάω γιατί όπως βλέπεις όλες οι μεταβλητές δηλώνονται οπότε δεν πρέπει να βγάζει τέτοιο error.

Μάλλον κάτι άλλο θα είναι.

 

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

Δημοσιεύτηκε (edited)

τα δεδομενα μου ειναι νουμερα. Στο μηνυμα σφαλματος δεν υπαρχει η επιλογη debug.

post-14591-0-32159300-1352937288.jpg

Edited by cvlengnr
Δημοσιεύτηκε

Τα ελληνικά φταίγανε....

Έχω αγγλική έκδοση ενώ εσύ ελληνική...

Δες το, τώρα θα πρέπει να δουλεύει

 

>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

  • Upvote 2
  • 1 month later...
Δημοσιεύτηκε

Καλημερα & χρόνια πολλα σε ολους.

 

Εχω ενα προβληματακι (γιορταρα μερα με αυτο ασχολουμαι !!!)

 

Εχω μια ν αδα δεδομένων σε στήλη. Το ν ειναι μεταβλητο αλλα γνωστο σε κάθε περιπτωση.

Τα δεδομενα αυτα ας πουμε οτι ειναι στα κελια απο Α24+κ εως Α24+κ+ν. Το κ ειναι μια αλλη μεταβλητη του προβλήματος επισης γνωστη κάθε φορα.

 

Αυτο που θέλω ειναι σε μια αλλη ν-αδα κελιων που ξεκινάνε σε ενα τυχαιο (αλλα γνωστο καθε φορα) Αi να αντιστοιχω τις ν γνωστες τιμες.

 

Υπαρχει τροπος οι δεικτες να ειναι μεταβλητοι χωρις κωδικα VBA

Ψαχνω για κάτι σαν το vlookup μονο που η περιοχη του πίνακα που θα γίνει η αναζητηση (table array) ειναι δυναμική και οχι η ιδια καθε φορα.

Δημοσιεύτηκε (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 by Γιάννης
  • Upvote 3
Δημοσιεύτηκε

Το πρόβλημα ειναι οτι το κελι που ξεκινάνε τα δεδομενα δεν ειναι παντα το ιδιο.

 

ΕΙναι το Α24+μια αλλη μεταβλητη. Κατα συνεπεια δεν μπορω να δωσω index αφου δεν δεχεται μεταβλητο array.

Χρειάζομαι να ορίσω μεταβλητη περιοχη.

Δημοσιεύτηκε

Χωρίς να είμαι 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 ώστε να μπει ως πίνακας.

 

Παρεμπιπτόντως, καλή χρονιά σε όλους!

Δημοσιεύτηκε

@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

Δημοσιεύτηκε (edited)

Σχετικά μe παλιότερα posts και την EvalMath του Gousgouni gvarth, βρήκα την Evaluate() στο Excel :shock: Κρυμμένη από το Excel, αλλά υπαρκτή στο RefersTo :!: στα Named Ranges... κουφάθηκα όταν το είδα και διαπίστωσα ότι δουλεύει...

λεπτομέρειες και εδώ.

Edited by Gousgounis
Διόρθωση: Τα εύσημα εκεί που αξίζουν... :)

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

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

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

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

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

Σύνδεση

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

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

Σημαντικό

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