Μετάβαση στο περιεχόμενο
Newsletter: Ημερήσια τεχνική ενημέρωση από το Michanikos.gr ×

apostolos55

Members
  • Περιεχόμενα

    72
  • Εντάχθηκε

  • Τελευταία επίσκεψη

  • Days Won

    5

Δημοσιεύσεις δημοσιεύτηκε από apostolos55

  1. Καλημέρα

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

    Και τότε προλαμβάνεις μόνο το να μοιράζεσαι το κρύο μέσω της ένωσης...

    Για το ζεστό δε μου έρχεται κάτι...

    Και με το ρεύμα όταν δε θα φτάνει ο ήλιος ποιος θα πληρώνει?

     

    Γενικά δε μου φαίνεται και καλή ιδέα. Αν δεν πρόκειται για κολλητούς να τα μοιράζουν μισά μισά... θέλει:

    2 ανεπίστροφες στο κρύο

    2 μετρητές στο ζεστό (έξοδο), έναν προς κάθε διαμέρισμα

    2 μετρητές κατανάλωσης για το ρεύμα

    και πάλι κανείς δεν θα ξέρει αν ανάβει ο 1ος και το τραβάει/καταναλώνει ο 2ος και νομίζει ότι είχε ήλιο LOL...

    αυτά

  2. Fast-Track = Καταπάτηση της δημοκρατίας και της Ισότητας! τέλος!!!

    Τι πάει να πει fast-track? γιατί να παρακάμπτονται όλοι οι μηχανισμοί ελέγχου που ισχύουν για τους υπόλοιπους?
    Αντί να οργανώσουν τις υπηρεσίες για όλους, να μειωθεί και η γραφειοκρατεία, τις παρακάμπτουν!

    Ας κινηθούν λίγο σωστά και θα δουν αν χρειάζεται βοήθεια η αγορά. Άρση των εμποδίων του δημοσίου χρειάζεται, και μια σταθερότητα πολιτική-οικονομική.

     

    Αυτά για την ώρα.

     

    ΥΓ: σε μελέτη παλαιότερα είχα να κάνω με 3 αρχαιολογικές υπηρεσίες ταυτόχρονα, και τελικά η πιο άσχετη και χωρίς να εμπίπτει το έργο σε προστατευόμενη περιοχή ζήτησε πλήρες αντίγραφο (και ενημερώσεις) των αρχιτεκτονικών!!! τι να λέμε...

  3. Μία ερώτηση και από εμένα.

     

    Γίνεται η τιμή σε ένα κελί να ενημερώνεται αυτόματα από κάποιο site στο internet..

     

    Π.Χ. η τιμή μιας μετοχής αλλάζει συνεχώς ή ισοτιμία ευρώ / δολαρίου. Είναι δυνατόν η τιμή αυτή να εισέρχεται αυτόματα σε ένα κελί του excel?

    Καλησπέρα

    για ξεκλείδωτα sites (να μην χρειάζεται κωδικούς και login) δουλεύεις με web-queries. Υπάρχουν άπειρα παραδείγματα-tutorials με λίγο ψάξιμο

    Όταν απαιτείται login κλπ τότε τα web-queries δε δουλεύουν (τουλάχιστον όχι πάντα) οπότε είναι κομματάκι δύσκολο. Μια "καλή" βοήθεια έχουν εδώ αλλά αν είσαι αρχάριος ίσως δυσκολευτείς.

     

     

     

    Βρε παιδια, χρειάζομαι τη βοήθειά σας. Σε εναν πίνακα, θελω να βρω τις ιδιες αριθμητικές τιμές μιάς στήλης και να ζητήσω απο το excel οταν τις βρίσκει να επιστρέφει τις γραμμές στις οποιες βρίσκονται είτε σε ενα αλλο φυλλο εργασίας ειτε στο ίδιο (απλα σε κάποιο άλλο σημείο). Πως νομίζεται οτι μπορει να γίνει αυτό; Ευχαριστώ.

    με μια επιπλέον στήλη μπορείς να δουλέψεις ως εξής:

    αρ. τιμές στη στήλη Α από Α2 ως Α43

    διάφορα σε στείλες ως και C

    στήλη D στο D2 = IF(COUNTIF($A$2:$A$43;A2)>1;ROW();9999)

    τραβάς τον τύπο κάτω μέχρι το D43

    στο D45 = COUNTIF(D2:D43;"<9999")

    στο Ε2 = IF(ROW()-1>$D$45;"";SMALL($D$2:$D$43;ROW()-1))

    τραβάς μέχρι E40. Βάφεις έχρωμο το E41 να ξέρεις που τελειώνει ο τύπος...

    κρύβεις στήλη D

    τελείωσες.

    Δώσ'του λίγο να το εμπεδώσεις και προσάρμοσέ το στα δεδομένα σου

     

     

    Χαιρετώ

    • Upvote 2
  4. Βρήκα κάποια λύση

     

    Για όποιον ενδιαφέρεται

     

    κελί Α1 (2 λέξεις π.χ. ονομ/μο)

    κελί Β1 (παίρνω την 1η λέξη) =LEFT(A1; FIND(" "; A1))

    κελί C1 (παίρνω την 2η λέξη) =RIGHT(A1; LEN(A1)-FIND(" ";A1))

     

    μια πιο πασπαρτου λύση, μόνο μην μου ζητήσετε να την εξηγήσω...

    1ο βήμα: στο Κελί Α2 βάζουμε το κείμενο "ααα βββ γγγ δδδ" (στο Α1 έχουμε τίτλο!)

    2ο βήμα: στο κελί Β2 γράφουμε: =TRANSPOSE(MID($A2;SMALL(IF(MID(" "&$A2&" ";ROW($1:$40);1)=" ";ROW($1:$40);999);ROW($1:$10));SMALL(IF(MID(" "&$A2&" ";ROW($1:$40);1)=" ";ROW($1:$40);999);ROW($1:$10)+1)-SMALL(IF(MID(" "&$A2&" ";ROW($1:$40);1)=" ";ROW($1:$40);999);ROW($1:$10)))) και πατάμε ctrl+shift+enter (εισαγωγή ως matrix)

    3ο βήμα: Μαρκάρουμε τα κελία Β2 ως Κ2 / πατάμε F2 / ctrl+shift+enter (επεκτείνουμε το matrix σε 10 κελιά σύνολο για αντίστοιχα αποτελέσματα)

    4ο βήμα: Τραβάμε τα κελιά Β2-Κ2 όσο κάτω χρειάζεται...

     

    δυο λόγια:

    1) το $1:$40 εξαρτάται από το μήκος του αλφαριθμητικού που έχουμε στο Α2. Μπορούμε να το κάνουμε $1:$200 ή όσο θέλουμε ώστε να καλυπτόμαστε πάντα, με αντίστοιχη επιβάρυνση σε υπολογισμούς-χρόνο εκτέλλεσης. ΑΛΛΑΓΕΣ σε ΟΛΑ τα $1:$40 και όχι μόνο στο 1ο, εφαρμογή με ctrl+shift+enter

    2) Το $1:$10 προσδιορίζει τον αριθμό των αποτελεσμάτων, στο παράδειγμα είναι 10. Για λιγότερα πάμε στο 2ο βήμα και επιλέγουμε λιγότερα κελιά, διορθώνοντας παντού το $1:$10 σε πχ $1:$7 -->Β2-Η2, εφαρμογή με ctrl+shift+enter !!τα matrix δεν μικραίνουν μετά τον ορισμό τους, μόνο μεγαλώνουν!! Για Περισσότερα διορθώνουμε το $1:$10 σε πχ: $1:$12 παντού / ctrl+shift+enter και μετά επιλέγουμε Β2-Μ2 / F2 / ctrl+shift+enter (στο 3ο ή βήμα 4ο βήμα)

    η συνάρτηση ως κώδικας:

    >=TRANSPOSE(MID($A2;SMALL(IF(MID(" "&$A2&" ";ROW($1:$40);1)=" ";ROW($1:$40);999);ROW($1:$10));SMALL(IF(MID(" "&$A2&" ";ROW($1:$40);1)=" ";ROW($1:$40);999);ROW($1:$10)+1)-SMALL(IF(MID(" "&$A2&" ";ROW($1:$40);1)=" ";ROW($1:$40);999);ROW($1:$10))))

    Καλύ τύχη!

     

    Τιπ! αν ο κώδικας matrix μπει επιτυχώς τότε στο κελί θα βλέπετε τη formula εντός {} πχ: αντι για =Α1 θα έχουμε {=Α1} κλπ

    • Upvote 2
  5. και πως ορίζουμε data area ?

     

    σε ευχαριστώ !!!!!

     

    Καλημέρα σας, και καλό μήνα!

    Θα αναφερθώ με την αγγλική ορολογία καθώς έτσι ανατρέχουμε ευκολότερα σε σχετική βοήθεια...

    Προφανώς μιλάτε για Data Validation, το οποίο έχει αναπτυχθεί εκτενώς και στο παρόν forum παλιότερα εδώ, με τις κατάλληλες παραπομπές και αρχειάκι demo. Επαναλαμβάνω ότι ένα ψάξιμο μας γλυτωνει από πολύ κόπο...

    Να αναφέρω επίσης ότι στο Excel DataValidation με εικόνες ή οριζοντίως (αντί του κατακορύφου) δεν γίνεται με "αυτόματο" τρόπο χωρίς χρήση πολύ προχωρημένης VBA, κάτι τέτοιο όμως δεν προτείνεται για αρχάριους χρήστες κατ'ουδένα τρόπο! Δεν ξέρω για Excel 2013 (ή 365) τι ισχύει...

    Χαίρετε

    • Upvote 1
  6. >
    ' Time from String
    a1 = InStr(TimeOrHours, ":"): a2 = InStr(a1 + 1, TimeOrHours, ":")
    thisTime = Left(TimeOrHours, a1 - 1) * 3600 + Mid(TimeOrHours, a1 + 1, a2 - a1 - 1) * 60 + Mid(TimeOrHours, a2 + 1)
    TimeFromAny = Round(thisTime / 86400, 6)
    

     

    μόλις έμαθα ότι η TimeValue υπάρχει και στη VBA!!!! οπότε ο παραπάνω κώδικας αλλάζει σε:

    >
    ' Time from String
    TimeFromAny = TimeValue(TimeOrHours)
    

     

    τώρα καλύπτονται και κάποιες περιπτώσεις 10:00:01 am/pm ή πμ/μμ δηλαδή οι ώρες σε 12ωρη βάση, ενώ η προηγούμενη εφαρμογή ήθελε 24ωρη βάση.

    χαιρετώ

  7. Καλημέρα

    Πρόσφατα μου προέκυψε χειρισμός χρόνου σε VBA ... :blink:

    Και όταν άρχισα να βγάζω άκρη, θυμήθηκα μια αρχή του προγραμματισμού, τα λεγόμενα Black-Boxes, δηλαδή να ξέρεις τι βάζεις και τι παίρνεις... πάντα. Σε συνδυασμό με την απαίτηση να μην ψάχνω κάθε φορά αν το κελί έχει χρόνο ή κείμενο, ή αν θέλω να προσθέσω μερικά λεπτά με τι διαιρώ κλπ, προέκυψε η Function TimeFromAny([TimeOrHours],[myMins],[mySecs]) As Variant, όπως φαίνεται όλα είναι Optional. Παραθέτω κώδικα και μετά Παραδείγματα:

    >
    ' Time from Any value
    ' Use Application.WorksheetFunction.IsText to check for text
    ' The proper way to work with time, since time is Variant!
    '
    ' Creator Apostolos Goulandris - Jan 2013
    Function TimeFromAny(Optional TimeOrHours = 0, Optional myMins As Integer = 0, Optional mySecs As Integer = 0) As Variant
    Dim a1 As Integer, a2 As Integer, thisTime As Long
    
    If Application.WorksheetFunction.IsText(TimeOrHours) Then
    ' Time from String
    a1 = InStr(TimeOrHours, ":"): a2 = InStr(a1 + 1, TimeOrHours, ":")
    thisTime = Left(TimeOrHours, a1 - 1) * 3600 + Mid(TimeOrHours, a1 + 1, a2 - a1 - 1) * 60 + Mid(TimeOrHours, a2 + 1)
    TimeFromAny = Round(thisTime / 86400, 6)
    ElseIf myMins > 0 Or mySecs > 0 Then
    ' Time from Values
    thisTime = TimeOrHours * 3600 + myMins * 60 + mySecs
    TimeFromAny = Round(thisTime / 86400, 6)
    Else
    ' Time from Time
    TimeFromAny = TimeOrHours
    End If
    End Function
    

     

    Παραδείγματα:

    με κείμενο: TimeFromAny("02:30:20")

    με τιμές: TimeFromAny(2,30,20)

    με άλλο χρόνο TimeFromAny(time)

    στο Excel με κείμενο =TimeFromAny(A1)

    για πρόσθεση 29' στην τρέχουσα ώρα myTime+TimeFromAny(myMins:=29)

    για πρόσθεση 1ώρας και 55'' στην τρέχουσα ώρα myTime+TimeFromAny(mySecs:=55,TimeOrHours:=1)

    ή το ίδιο γραμμένο αλλιώς myTime+TimeFromAny(1,,55)

    κλπ

     

    Μην ξεχνάτε ότι το excel και η VBA χειρίζονται το χρόνο σαν Variant (και περιέχει μέρες και χρόνο). Η timeFromAny παράγει το τμήμα του χρόνου μόνο (το δεκαδικό μέρος δηλαδή).

    Για προβολή της ώρας σε κατανοητή μορφή, χρησιμοποιείστε την Format, πχ format(TimeFromAny(...),"hh:mm:ss") ή προβάλετε σε φορμαρισμένο κελί (ως time)

    Μερική αντιστοιχία με την TimeFromAny για Excel μόνο μπορεί να παραχθεί με =IfError(TimeValue(A1);A1) οπότε αν δεν τα καταφέρει με την TimeValue, παίρνει την τιμή.. φυσικά προσθήκη λεπτών ωρών κλπ είναι άλλη ιστορία

     

    keep programming mates

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

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

  9. @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

  10. Καλημέρα και καλή χρονιά!

     

    στο προκείμενο τώρα, μία επιλογή είναι η χρήση της 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!

     

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

    Διαβάστε τους κανόνες συμμετοχής.

    Γιάννης

    • Upvote 3
  11. θα ήθελα την βοήθεια σας...

    Σε στήλες ενός πίνακα βάζω μετρήσεις ανά ημέρα. Ετσι έχω 30 στήλες με τις μετρήσεις τους.

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

     

    Δηλαδή:

    στη στήλη Ν θα ήθελα να έχω σήμερα την διαφορά της a2 καταχώρησης με την a1.

    Αυριο όμως που θα καταχωρήσω την a3, να έχω άμεσα την διαφορά της a3 με την a2.

     

    Τι λέτε? Γίνεται?

    ______________________________

     

    done! :smile:

     

    =IF(L2>0;L2-K2;IF(K2>0;K2-J2;IF(J2>0;J2-I2;IF(I2>0;I2-H2;IF(H2>0;H2-G2;IF(G2>0;G2-F2;IF(F2>0;F2-E2;IF(E2>0;E2-D2;IF(D2>0;D2-C2;IF(C2>0;C2-B2))))))))))

    Και μια εναλλακτική: Έτσι όπως έχεις τα δεδομένα, στην στήλη Ν (πχ στο κελί Ν2) μπορείς να γράψεις αυτό:

     

    =INDIRECT(ADDRESS(ROW(A2);COUNTA(B2:L2)+1))-INDIRECT(ADDRESS(ROW(A2);COUNTA(B2:L2)))

     

    Μετά, το σέρνεις προς τα κάτω... :wink:

     

    μια απλή και μη "volatile" συνάρτηση:

    =INDEX(B2:L2;COUNT(B2:L2))-INDEX(B2:L2;COUNT(B2:L2)-1)

    εκτός της απλότητας και επεκτασιμότητας έχει το πλεονέκτημα ότι δεν είναι "volatile" με άμεση επίπτωση στη ταχύτητα της σελίδας μας, ειδικά σε μεγάλα φύλλα...

    • Upvote 2
  12. Ή εναλλακτικά:

     

    =IF(SMALL(B1:B7;1)=0;SMALL(B1:B7;2);SMALL(B1:B7;1))

     

    Θεωρώντας ότι το range που σε ενδιαφέρει είναι το B1:B7.

     

    Φίλε μου έτσι αν έχεις πολλά μηδενικα... την πάτησες :sad:

     

    εψαψνα να βρω ενα τροπο να φτιαξω μια function για να βγαζει το ελαχιστο (MIN) αλλα να αγνοεί το μηδεν σε εμενα δουλευει αυτό =SMALL(E1:E10;COUNTIF(E1:E10;0)+COUNTIF(E1:E10;"<0")+1)
    St2 το COUNTIF(E1:E10;"<0") τι το θες? γιατί βγάζεις τα αρνητικά?

     

    εγώ πάντως θα πήγαινα με λύση της μορφής: =MIN(IF(A1:A11=0;100000000;A1:A11)) +ctrl-shift-enter (άρα {=MIN(IF(A1:A11=0;100000000;A1:A11))} )

     

    Επίσης από το Καλύτερο forum για ερωτήσεις-απαντήσεις στο Excel είναι της "μαμάς" εκεί γράφουν πολλοί προγραμματιστές και χομπίστες και αναλαμβάνουν να βοηθήσουν "δωρεάν" ακόμα και για δύσκολα ερωτήματα... (που κατά τη γνώμη μου θα έπρεπε να είχαν απευθυνθεί σε επαγγελματία). Δεν ξέρω αν υπάρχει ελληνική έκδοση, μιλάω για την αγγλική.

    • Upvote 2
  13. Θέμα με Sum/Count κλπ όταν προστίθεται γραμμή/στήλη ανάμεσα στο αποτέλεσμα και την πράξη και ...παραμένει εκτός πράξης

     

    Λύση:

    έστω ότι στο κελί B31 θέλουμε να προσθέσουμε τα κελιά Β5 ως Β30, αντι για το εύκολο και γνωστό

    =sum(B5:B30)

    γράφουμε

    =Sum(B5:offset(B31;-1;0)

    και ιδού... τώρα προσθέτωντας γραμμές ακριβώς πάνω από το άθροισμα (ή και οπουδήποτε μέσα) το άθροισμα παραμένει σωστό...

    • Upvote 2
  14. Φίλοι και συνάδελφοι, χαίρετε!!!

     

    Εδώ και καιρό εργάζομαι σε μια νέα έκδοση που όλα θα είναι πιο εύκολα. Πρόκειται για λειτουργικές αλλαγές, στον τρόπο εισαγωγής και διαχείρισης των δεδομένων μας. Απ' όσο γνωρίζω δεν έχει αλλάξει κάτι με το αρχείο του ΙΚΑ.

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

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

    Μην διστάζετε να ρωτάτε και να προτείνετε, ή να ενημερώνετε με νέα από το ΙΚΑ.

     

    (όποιος δεν έχει άμεση ανάγκη το πρόγραμμα ας περιμένει λίγο για το καινούργιο, θα γλιτώσει πολύ χρόνο/διάβασμα. Βέβαια ότι μερικοί χειρισμοί εφαρμόζονται και σε δικά σας excel-ακια, οπότε επιλέξτε ότι αγαπάτε)

     

    Επανέρχομαι σύντομα...

  15. καλησπέρα, προτείνω και εγώ μια πιο κομψή λύση, χωρίς χρήση της αγαπημένης μου VBA αλλά με "πίνακες":

    =SMALL(IF({1,5;2,5;4;6}-F3>=0;{1,5;2,5;4;6};10);1) εισαγωγή με ctrl+shift+enter

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

     

    όπως καταλαβαίνετε βάζω τις τιμές σε array: {1,5;2,5;4;6}. Εδώ θα μπορούσαμε να έχουμε ονομασία (defined name) έστω oria={1,5;2,5;4;6} ή από κελιά, και να γράφαμε:

    =SMALL(IF(oria-F3>=0;oria;10);1) κλπ... πολύ πιο κομψό!!

    εδώ για παράδειγμα εισαγωγής ονομασμένης λίστας και data validation

     

    Η παραπάνω εντολή για να δουλέψει θέλει αφού γραφτεί να πατηθεί το ctrl+shift+enter αντί του απλού enter!!! Το ίδιο μετά από κάθε αλλαγή της.

    • Upvote 2
  16. Χαίρετε, ενημερώνω τους φίλους προγραμματιστές ότι ανέβασα νέα και σαφώς βελτιωμένη GetIf() εδώ

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

    • Upvote 1
  17. Ενημερώνω ότι ο gvarth επανέφερε το αρχείο Math Evaluation για υπολογισμό συναρτήσεων απευθείας.

     

    Επίσης προτείνω ανεπιφύλακτα για οποιονδήποτε θέλει να προχωρήσει στο Excel + VBA το βιβλίο: Excel 2007 VBA Programmer's Reference.

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

    • Upvote 2
  18. Καλημέρα, ξεκίνησα από μια απλή αλλαγή για να δουλεύει με πολύπλοκες επιλογές κελιών (πχ γραμμών ή στηλών) που πριν κόλλαγε, και τελικά με λίγες δοκιμές έφτασα στο απίστευτο!!!

    Υπάρχουν πλέον 2 ρουτίνες, η SimpleVersion και η ExtremeVersion. H απλή κάνει τα παραπάνω με την διόρθωση ώστε να μην κολλάει πλέον.

    Άλλαξα και την doThings ώστε να μην περιορίζεται στο activeCell αλλά να δουλεύει με το Target.

    Σημειώνω μόνο ότι οι ρουτίνες SimpleVersion και ExtremeVersion τρέχουν αυτόματα μόνο αν αφαιρεθεί το header από την 1η τους γραμμή (όχι τα σχόλια) και μετονομαστούν σε Workbook_SheetSelectionChange. Αρχικά θα τρέχει η Simple αλλά με την εν-λόγω μετονομασία τρέχεί όποια θέλετε. Ενδέχεται να κολλήσει αν ξεχαστείτε και έχετε 2 Workbook_SheetSelectionChange(...) ταυτόχρονα.

    Δοκιμάστε την Extreme με επιλογή που έχει πολλά κελιά με σχόλια.... και πείτε μου τα σχόλιά σας...

    Ιδού ο νέος κώδικας:

     

    ' Simple version //HEADER:SimpleVERSION_

    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

     

    ' Will only work on 1st Cell of any selection-merged ect!!!

    If Target.Cells.Count > 1 Then

    Set a = Range(Target.Cells(1, 1).AddressLocal)

    Else

    Set a = Target

    End If

     

    If Not (a.Comment Is Nothing) Then doThings Target

     

    End Sub

     

    ' Extreme Version //HEADER:ExtremeVERSION_

    Private Sub ExtremeVERSION_Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

    Dim CountMyComments As Integer

     

    ' Fix to work on 1st item or ALL items of any selection of cells!!!

    If Target.Cells.Count >= 1 Then

    For Each b In Target

    If Not (b.Comment) Is Nothing Then

    doThings Range(b.AddressLocal), CountMyComments

    CountMyComments = CountMyComments + 1

    'Exit For ' Remove Comment at begin for processing of 1st Comment only

    End If

    Next

    End If

     

    End Sub

     

    ' Uppon click move Comment to center of window (almost center)

    '

    ' Edited to Clarify code, Transfer to Workbook (original worked in sheets only)

    ' so that same code performs for all sheets...

    '

    ' Send SINGLE-CELL Ranges only for the following to work

    '

    ' Original from www.contextures.com/xlcomments03.html

    ' Edited by Apostolos Goulandris

    Sub doThings(ByVal Target As Range, Optional ByVal CmntCount As Integer)

     

    Dim cTop As Long, cWidth As Long, HeightAdd As Long, WidthAdd As Long

     

    If Not (Target.Comment Is Nothing) Then

    With ActiveWindow.VisibleRange

    cTop = .Top + .Height / 2

    cWidth = .Left + .Width / 2

    End With

     

    With Target.Comment.Shape

    If CmntCount > 0 Then

    HeightAdd = .Height / 4 * (Int((11) * Rnd - 7))

    WidthAdd = .Width / 4 * (Int((11) * Rnd - 6))

    End If

    .Top = cTop - .Height / 2 + HeightAdd

    .Left = cWidth - .Width / 2 + WidthAdd

    End With

    Target.Comment.Visible = True

    End If

     

    End Sub

    • Upvote 1
  19. Βελτίωση κώδικα προβολής Σχολίων όταν υπάρχουν παγωμένα κελιά

    (show comments ignoring frozen cells)

     

    ο κώδικας είναι:

     

    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

    If Not (Target.Comment Is Nothing) Then doThings Target

    End Sub

     

     

    Χαίρετε συνάδελφοι

    επανέρχομαι με μια βελτίωση προκειμένου να δουλεύει και με merged-cells. Απλά αντικαταστήστε τη ρουτίνα που έχω σε παράθεση με τη παρακάτω:

     

    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

     

    ' Fix to work on merged cells!!!

    Dim StrPos As Integer

    If Target.Cells.Count > 1 Then

    StrPos = InStr(Target.AddressLocal, ":") - 1

    Set a = Range(Left(Target.AddressLocal, StrPos))

    Else

    Set a = Target

    End If

     

    If Not (a.Comment Is Nothing) Then doThings Target

     

    End Sub

     

    ελπίζω να βοηθηθούν κάποιοι.

    • Upvote 2
  20. Ολα θα κριθούν στην πράξη. Και ειδικά όχι από την αρχή εφαρμογής του νομοσχεδίου αλλά από την Α' & Β' φάση ελέγχου των κατασκευών.

     

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

  21. κάτι ακόμα που θα ήθελα να πω είναι για τους αριθμούς όπως το ΑΦΜ ή το ΑΜΚΑ

    που στο excel δεν εμφανίζεται το μηδεν στην αρχή

     

    αν το ΑΦΜ ειναι 01004318758 (το νούμερο είναι τυχαίο ελπίζω να μην είναι κάποιου :) )

    τοτε στο excel φαίνεται 1004318758

     

    υπάρχει λύση???

     

    απαντώ μόνος μου από την μορφοποίηση πήγα στην προσαρμογή και από εκεί διαλέγεις τα 11 ψηφία (είναι 11 μηδενικά στη σειρά)

     

    Μάλιστα εμένα όταν βάλω 11μηδενικά με πάει στανταρ στο Portugal-Numero de Seguranca Social (βλ συνημμενο). Η πλάκα είναι ότι αντίστοιχο το Ελληνικό ΑΦΜ δεν δουλεύει όπως θα έπρεπε...

     

    Σιγουρέψου επίσης ότι η GetIf() είναι γραμμένη ως εξής:

    Public Function GetIf(a, b As String, c, Optional GoRandom As Boolean = False)

     

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

     

    Σχετικά με

    απόστολε πιστεύω πως έφτασε η ώρα για την version 2 ...

     

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

    post-2846-131887278182_thumb.jpg

  22. Ορθώς παρατήρησες ST2 περί των κωδικών 933110,933120,933130. Ευτυχώς εκεί που είναι όμως μόνο μικρό μπέρδεμα μπορούν να προκαλέσουν καθώς τα σχόλια που εμφανίζονται (Comments) είναι σωστά, και όλοι οι υπολογισμοί είναι σωστοί, μετά από μια πολύ παλαιότερη διόρθωση.

    Ευπρόσδεκτες κάθε παρατηρήσεις σχετικά με συντελεστές-τιμές κλπ που αφορούν τους υπολογισμούς, από όποιον έχει σωστά-επίσημα στοιχεία. Για λεπτομέρειες όμως καλό είναι να χρησιμοποιείται pm.

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

     

    Ευχαριστώ για τις παρατηρήσεις και τη συμμετοχή σας

  23. Επανέρχομαι με ένα θεματάκι που με είχε ενοχλήσει πολύ στο παρελθόν, αλλά πλέον βρήκα λύση.

    Το πρόβλημα ήταν τα σχόλια που κρύβονται όταν έχω Frozen Panes κάτω από τις κρυμμένες στήλες :(.

     

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

    Απλό και αρκετά βολικό όταν έχουμε frozen panes και τα σχόλιά μας πάνε και κρύβονται κάτω τους.

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

     

    ο κώδικας είναι:

     

    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.DisplayCommentIndicator = xlCommentIndicatorOnly

    If Not (Target.Comment Is Nothing) Then doThings Target

    End Sub

     

    ' Uppon click move Comment to center of window (almost center)

    '

    ' Edited to Clarify code, Transfer to Workbook (original worked in sheets only)

    ' so that same code performs for all sheets...

    '

    ' Original from www.contextures.com/xlcomments03.html

    ' Edited by Apostolos Goulandris

    Sub doThings(ByVal Target As Range)

     

    Dim cTop As Long, cWidth As Long

     

    If Not (ActiveCell.Comment Is Nothing) Then

    With ActiveWindow.VisibleRange

    cTop = .Top + .Height / 2

    cWidth = .Left + .Width / 2

    End With

    With ActiveCell.Comment.Shape

    .Top = cTop - .Height / 2

    .Left = cWidth - .Width / 2

    End With

    ActiveCell.Comment.Visible = True

    End If

     

    End Sub

     

     

     

    !! Οδηγίες !!

    Αντιγράφουμε τον κώδικα στο workbook στο Excel-VBA. Εκεί πάμε με ανοιχτό Excel και Alt+F11, ως γνωστόν...

    Μετά την επικόληση ενεργοποιείται αυτόματα με κάθε κλικ και αν υπάρχει σχόλιο... εκτελεί.

    Μην ξεχάστε οι πιο αρχάριοι ενεργοποίηση μακροεντολών και σώσιμο με υποστήριξη μακροεντολών.

  24. run-time error 13

    type mismatch

    παταω debug και μου κιτρινίζει την γραμμή σε πλάγια και υπογραμισμένη

     

    > [i][u]dum = Round(mdata, 0)[/u][/i]

     

    πες μου αν θέλεις να σου στείλω να κοιτάξεις το αρχειο

     

    type mismatch: διαφορετικός τύπος μεταβλητής από το αναμενόμενο (εκτίμηση ότι έδωσες αριθμό με , αντί . ή το ανάποδο...)

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

     

    αν εξακολουθεί το πρόβλημα στείλε αντίγραφο να το δω, όμως θα το δώ τη δευτέρα.

×
×
  • Create New...

Σημαντικό

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