--b}{d-- Δημοσ. 11 Απριλίου 2005 Δημοσ. 11 Απριλίου 2005 Έχω μερικές σειρές με αριθμούς του στυλ -1,30% 1,35% -0,05% 1,33% 0,50% -1,83% 3,38% 0,48% -3,86% Πως μπορώ από την κάθε γραμμή να διαλέγω τον αριθμό που έχει την μεγαλύτερη απόλυτη τιμή και φυσικά διατηρώντας το πρόσιμο του; Απο το παραπάνω παράδειγμα εγώ θέλω να μου δίνει: 1,35% -1,83% -3,86% Δεν μπόρεσα να βγάλω άκρη μέχρι στιγμής γιατί δεν βρίσκω τρόπο να διατηρώ το πρόσιμο.
gerontas Δημοσ. 11 Απριλίου 2005 Δημοσ. 11 Απριλίου 2005 Να σου πώ την αμαρτία μου, θάγραφα μια user function σε VB (κι ευχαρίστως να την ποστάρω αν θέλεις). Αν τώρα επιμένεις σε "καθαρό" Excel, υποθέτοντας ότι οι τιμές σου είναι στις στήλες A, B, C, γράψε για τη γραμμή 1 το παρακάτω: =IF(MAX(A1:C1)>=-MIN(A1:C1);MAX(A1:C1);MIN(A1:C1)) Εννοείται ότι πρέπει να γίνει copy/paste formulas για τις υπόλοιπες γραμμές και ότι αν έχεις στην ίδια τριάδα 1.35 και -1.35 θα προτιμήσει τη θετική τιμή (δεν ξέρω τι ακριβώς θέλεις να γίνεται σ' αυτή την περίπτωση). Hope it helps.
--b}{d-- Δημοσ. 12 Απριλίου 2005 Μέλος Δημοσ. 12 Απριλίου 2005 Νά'σαι καλά σ'ευχαριστώ για την βοήθεια. Τελικά η ευελιξία στον τρόπο σκέψης είναι που μετράει!... Ούτε καν μου πέρασε από το μυαλό να το πάω έτσι. Δουλεύει μια χαρά, θα προσθέσω κι ένα δεύτερο ΙF για την περίπτωση ισότητας να δίνει κενό. Για την user function αν δεν είναι κόπος κάνε ένα post να μαθαίνουμε
gerontas Δημοσ. 12 Απριλίου 2005 Δημοσ. 12 Απριλίου 2005 -']Για την user function αν δεν είναι κόπος[/u'] κάνε ένα post ... Και βέβαια δεν είναι κόπος λίγες γραμμές κώδικα, είναι μάλιστα πολύ πιό εύκολο απ' όσο φαντάζεσαι:>Function Abs_Max(C_First, C_Last As Range) Dim My_Range As Range Set My_Range = Range(C_First, C_Last) min_val = 0: max_val = 0 For Each c In My_Range If c.Value < min_val Then min_val = c.Value If c.Value > max_val Then max_val = c.Value Next c If Abs(max_val) > Abs(min_val) Then Abs_Max = max_val ElseIf Abs(max_val) < Abs(min_val) Then Abs_Max = min_val Else: Abs_Max = "" End If End Function Είμαι σίγουρος πως δείχνει οικείο σε όσους έχουν στοιχειώδεις γνώσεις Προγραμματισμού και ότι το θεωρούν αστείο όσοι έχουν ασχοληθεί μέ κάτι πιό σοβαρό σαν τη C++ ή την Java. Θα μπορούσε να γραφτεί και πιό απλά, όμως έτσι καθώς είναι δεν ισχύει μόνο για τις τριάδες που συζητάμε αλλά για οποιοδήποτε range. Η κλήση από το Excel γίνεται με παραμέτρους το πρώτο και το τελευταίο κελλί =Abs_Max(A1;C1) κι όχι όπως συνηθίζεται στη βιβλιογραφία με παράμετρο το range δλδ. =Abs_Max(A1:C1). Υπάρχει λόγος: Σαν ερασιτέχνης δάσκαλος (έχω διδάξει αυτά τα θέματα σε κάμποσα σεμινάρια) έχω διαπιστώσει την δυσκολία που προκαλεί ο δεύτερος τρόπος στον αρχάριο, όταν πρέπει να δηλώσει το range μέσα στη μακροεντολή, με εκφράσεις όπως (η επκίνδυνη συν τοις άλλοις) >Set MyRange = Range(Range("A1", Range("A1").End(xlToRight)), _ Range("A1", Range("A1").End(xlToRight)).End(xlDown)) Μόλις ξεπεραστεί αυτό, τα πράγματα πάνε σαφώς καλύτερα. Μπορεί να φταίω κι εγώ, θα μ' ενδιέφερε η γνώμη όσων έχουν αντίστοιχες εμπειρίες. ΥΓ: Οσο για τ' άλλα που λες, ευχαριστώ για τα καλά λόγια, μάλλον όμως ισχύει ότι και στο τάβλι: Οι απέξω βλέπουν καλύτερα
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.