Forum

Αναζήτηση στο ms-office.gr

Πάμε!
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [Συναρτήσεις] Formula function με ημερομηνία

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 22-04-21, 13:15
Όνομα: Μηνας
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 17-06-2015
Μηνύματα: 10
Προεπιλογή Formula function με ημερομηνία

Καλησπέρα θα ήθελα αν κάποιος έχει λιγο χρόνο να με βοηθήσει με κάτι που είναι δύσκολο για το δικό μου επίπεδο.
Έχω φτιάξει 2 modules.
To πρώτο διαβάζει "πράσινο" και "κόκκινο" χρώμα κελιού

Function CheckColor(range)
If range.Interior.Color = RGB(256, 0, 0) Then
CheckColor = "Red"
ElseIf range.Interior.Color = RGB(0, 176, 80) Then
CheckColor = "Green"
Else
CheckColor = "Neither"
End If
End Function


To δεύτερο ανάλογα με το χρώμα του κελιού κάνει άλλη πράξη με τον αριθμό του
Στο "κόκκινο" αφαιρεί 6
Στο "πράσινο" προσθέτει (cell value-1)*0.97


Function Daily(MyRange)
Daily = 0
For Each Cell In MyRange
If Cell.Interior.Color = RGB(255, 0, 0) Then
Daily = Daily - 6
ElseIf Cell.Interior.Color = RGB(0, 176, 80) Then
Daily = Daily + (Cell.Value - 1) * 0.97
Else: Daily = Daily
End If
Next Cell
End Function



Μέχρι εδώ τα καταφέρνω.
Αυτό που θέλω ειναι να "διαβάζω" την ημερομηνία και να "τραβάω" μόνο εκείνο το range.
Δηλαδή, στο παράδειγμα που κάνω Upload, θελω να "διαβάζω" στην στήλη Α που εχέι "24 Feb"
και να κάνει τον κώδικα του daily για αυτες τις τιμες. Στο παράδειγμα μου κάνουν μόνο οι τιμές ( 3,58 κόκκινο, 1,58 κόκκινο, 2,77 πράσινο, που έχουν ημερομηνία 24 Feb)
Οπότε αναμένω να κάνει -6-6+(2,77-1)*0,97

Δοκίμασα =IF(A1:A100 = "*"&A21&"*"; daily(F1:F100)) αλλά κάτι γράφω λάθος.
Ευχαριστώ πάρα πολύ!
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm test111 (2).xlsm (15,2 KB, 5 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 22-04-21, 15:14
Το avatar του χρήστη ChrisGT7
Όνομα: Χρήστος Ζώρζος
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 20-09-2013
Μηνύματα: 490
Προεπιλογή

Καλησπέρα Μηνά,

Ελπίζω να σε καλύπτει η μορφή της Daily().

Την τροποποίησα έτσι ώστε να δέχεται ως ορίσματα τρία εύρη: το πρώτο εύρος αφορά τα κελιά με τα χρώματα, το δεύτερο τις ημερομηνίες και το τρίτο το κελί με την ημερομηνία που ψάχνεις.

Θεωρώ πως οι ημερομηνίες είναι σε μορφή κειμένου.

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

Όπως θα διαπιστώσεις, σημαντικό είναι το $ όταν ορίζεις τα εύρη στη συνάρτηση, ώστε να παραμένουν σταθερά όταν τραβάς τον τύπο και στα υπόλοιπα κελιά.
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm ΣΥΝΑΡΤΗΣΗ ΧΡΩΜΑΤΩΝ.xlsm (16,0 KB, 15 εμφανίσεις)
__________________
Your Curiosity Will Be The Death Of You!!!
Απάντηση με παράθεση
  #3  
Παλιά 23-04-21, 00:43
Όνομα: Μηνας
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 17-06-2015
Μηνύματα: 10
Προεπιλογή

Εύχαριστω πάρα πάρα πολυ για τον χρόνο σου. Ωραία πληροφορία αυτή με το $.

Δεν μου υπολογίζει καλά τα νούμερα όμως.
Παράδειγμα στις 24 Feb έχουμε ( 3,58 κόκκινο, 1,58 κόκκινο, 2,77 πράσινο)
Άρα θα ήθελα να κάνει -6-6+(2,77-1)*0,97=-12+1,7169=-10,2831
Στις 25 Feb έχει μονο 1 κόκκινο
Άρα ήθελα να κάνει -6
Δεν μπορώ να δω που είναι το λάθος όμως.



p.s. πολυ ωραίο avatar έχεις
Απάντηση με παράθεση
  #4  
Παλιά 23-04-21, 08:37
Το avatar του χρήστη ChrisGT7
Όνομα: Χρήστος Ζώρζος
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 20-09-2013
Μηνύματα: 490
Προεπιλογή

Καλημέρα Μηνά,

Χρησιμοποίησα λάθος λογική, όπως φαίνεται... Αντικατέστησε τον κώδικα της daily με τον παρακάτω και έλεγξε αν όλα είναι εντάξει:

Κώδικας:
Function Daily(MyColors As range, MyDates As range, Str As range) As Double
    Dim R  As Long: R = MyColors(1, 1).Row - MyDates(1, 1).Row
    Dim C  As Long: C = MyColors(1, 1).Column
    Dim Dt As range
    
    For Each Dt In MyDates
        If InStr(Dt.Value, Str.Value) Then
            If Cells(Dt.Row + R, C).Interior.Color = RGB(255, 0, 0) Then
                Daily = Daily - 6
            ElseIf Cells(Dt.Row + R, C).Interior.Color = RGB(0, 176, 80) Then
                Daily = Daily + (Cells(Dt.Row + R, C).Value - 1) * 0.97
            Else
                Daily = Daily
            End If
        End If
    Next
End Function
Υ.Γ. Σ' ευχαριστώ πολύ! :)
__________________
Your Curiosity Will Be The Death Of You!!!
Απάντηση με παράθεση
  #5  
Παλιά 23-04-21, 14:39
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.233
Προεπιλογή

Καλησπέρα

Και μια πρόταση με συνάρτηση πίνακα.
Συνημμένα Αρχεία
Τύπος Αρχείου: xlsm arrColorFunction.xlsm (20,0 KB, 8 εμφανίσεις)
Απάντηση με παράθεση
  #6  
Παλιά 23-04-21, 20:58
Όνομα: Μηνας
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 17-06-2015
Μηνύματα: 10
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από ChrisGT7 Εμφάνιση μηνυμάτων
Καλημέρα Μηνά,

Χρησιμοποίησα λάθος λογική, όπως φαίνεται... Αντικατέστησε τον κώδικα της daily με τον παρακάτω και έλεγξε αν όλα είναι εντάξει:

Κώδικας:
Function Daily(MyColors As range, MyDates As range, Str As range) As Double
    Dim R  As Long: R = MyColors(1, 1).Row - MyDates(1, 1).Row
    Dim C  As Long: C = MyColors(1, 1).Column
    Dim Dt As range
    
    For Each Dt In MyDates
        If InStr(Dt.Value, Str.Value) Then
            If Cells(Dt.Row + R, C).Interior.Color = RGB(255, 0, 0) Then
                Daily = Daily - 6
            ElseIf Cells(Dt.Row + R, C).Interior.Color = RGB(0, 176, 80) Then
                Daily = Daily + (Cells(Dt.Row + R, C).Value - 1) * 0.97
            Else
                Daily = Daily
            End If
        End If
    Next
End Function
Υ.Γ. Σ' ευχαριστώ πολύ! :)
Υπέρ υπέρ ευχαριστώ, το προσπαθώ πολλές μέρες, με έσωσες!
Απάντηση με παράθεση
  #7  
Παλιά 23-04-21, 20:59
Όνομα: Μηνας
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 17-06-2015
Μηνύματα: 10
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από kapetang Εμφάνιση μηνυμάτων
Καλησπέρα

Και μια πρόταση με συνάρτηση πίνακα.
Θα μου άρεσε πάρα πολύ, ακολουθώ τις οδηγίες αλλά δεν τα κατάφερα
Απάντηση με παράθεση
  #8  
Παλιά 23-04-21, 21:28
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.233
Προεπιλογή

Μηνά είναι εύκολο.

Κάνε μια δοκιμή στο βιβλίο που ανέβασα:

1. Κάνε κλικ σε ένα κελί και σύρε το ποντίκι δεξιά και κάτω ώστε να επιλέξεις μια περιοχή 2 στηλών με αριθμό γραμμών ίσο με τον αριθμό των ημερομηνιών (πχ K2:L14)

2. Στο πλαίσιο των τύπων (δεξιά από το fx) πληκτρολογούμε τη συνάρτηση: =Daily(A2:A14;F2:F14)

3. Με πατημένα τα κουμπιά Ctrl και Shift, πατούμε και το Enter.
Απάντηση με παράθεση
  #9  
Παλιά 24-04-21, 00:14
Όνομα: Μηνας
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 17-06-2015
Μηνύματα: 10
Προεπιλογή

Θα το δοκιμάσω, αλλά μόλις μου έβγαλε ένα σφάλμα ακόμα (όχι στον πίνακας, στο daily). Στην ουσία εγώ έχω 6-7 sheet με τους ίδιους κώδικες, στο ίδιο αρχείο excel. Το καθένα από αυτά εχεί διαφορετικα input αν ημερομηνία και έτσι βγάζει διαφορετικά συνολικά αποτελέσματα για την κάθε μέρα.
Του βάζω καινούρια αποτελέσματα στο sheet1 και κάνω alt+shift+ctrl+f9 για να κανει refresh και να μου πέρασει τα αποτελέσματα το daily. αύτο χαλάει όλα τα υπόλοιπα sheet στο daily όμως. Γιατί συμβαίνει αύτό; Μπορώ να το αποφυγω;
Απάντηση με παράθεση
  #10  
Παλιά 24-04-21, 10:50
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.233
Προεπιλογή

Καλημέρα

Επειδή δε γνωρίζω τη δομή του βιβλίου εργασίας σου, όσα αναφέρω παρακάτω βασίζονται στο παραδειγματικό βιβλίο που ανέβασα (ταυτίζεται με το συνημμένο σου):

1) Η συνάρτηση Daily έχει 2 ορίσματα (τη στήλη με τις ημερομηνίες A2:A14 και την έγχρωμη F2:F14).

Τα ορίσματα χωρίζονται με ; (ερωτηματικό) για ελληνικό Excel και με , (κόμμα) για αγγλικό.

2) Αν κάνεις αλλαγές μέσα στα κελιά των ορισμάτων (αλλάξεις κάποια ημερομηνία ή τιμή στην έγχρωμη στήλη) η συνάρτηση Daily θα επαναϋπολογιστεί αυτόματα.

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

4) Αν κάνουμε αλλαγή στο χρώμα κάποιου κελιού δεν προκαλείται αυτόματος υπολογισμός.
Στην περίπτωση αυτή κάνουμε χειροκίνητο υπολογισμό (καρτέλα Formulas -> Calculation Sheet).

Το κουμπί Calculation Now επαναϋπολογίζει όλο το βιβλίο (όχι μόνο το τρέχον Sheet).
Απάντηση με παράθεση
Απάντηση στο θέμα

Εργαλεία Θεμάτων
Τρόποι εμφάνισης

Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[VBA] Formula To Comment jockey17 Excel - Ερωτήσεις / Απαντήσεις 6 15-10-14 16:17
[ Συναρτήσεις ] Προγραμματιζόμενα πλήκτρα FUNCTION pdhmos Access - Ερωτήσεις / Απαντήσεις 5 24-10-10 19:07
Εισαγωγή formula σε κελί μέσω VBA... ChryssaV Access - Ερωτήσεις / Απαντήσεις 4 09-10-09 10:05
Function IIF Deminio Access - Ερωτήσεις / Απαντήσεις 1 04-03-09 17:39


Η ώρα είναι 13:23.