Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] μεταφορά μεταβαλλόμενου κελιού (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/4440-metafora-metaballomenoy-kelioi.html)

jimis 27-01-17 18:39

μεταφορά μεταβαλλόμενου κελιού
 
1 Συνημμένο(α)
Καλησπέρα σας!πρόσφατα ανακάλυψα την σελίδα σας και με έχει βοηθήσει ήδη αρκετά σε διάφορα προβλήματα!

θα ήθελα να ρωτήσω κάτι σχετικά με το excel και με την μέθοδο των τριων

ποιο αναλυτικά

εχω τα κελία Α2,Β2,Α3,Β4

στα κελία Α2 και Β2 έχω δεδομένα που αλλάζουν μια φορα την ημέρα.στο κελί Α3 εχώ τον αριθμό 100 και στο κελί Β4 βγαίνει το ποσοστο απο την μέθοδο των τριων (δηλ =((Α3*Β2)/Α2)/100)) και μου εμφανίζει το % αποτέλεσμα

θέλω στην στήλη D να εμφανίζει το αποτέλεσμα της κάθε μέρας. αν βάλω απλα το =Β4, καθε μέρα παίρνει την καινούρια τιμή. θέλω να υπάρχει ένα "ιστορικό" με το ποσοστό της κάθε μέρας

επισυνάπτω ένα παράδειγμα με excel για να γίνει ποιο κατανοητό

Spirosgr 28-01-17 05:00

Καλημέρα.
Δημήτρη, καλώς όρισες στο ms-office.gr.

Κατ' αρχήν, με βάση το αρχείο σου,
το μεταφερόμενο κελί, είναι το b3 και όχι το b4 της περιγραφής.
Με αυτό το δεδομένο, έγινε και ο κώδικας.

Βάζουμε στο a1, μια ημερομηνία, μορφής 25/1/2017 (προσοχή: όχι σημερινή)
Βάζουμε στο d1, έναν τίτλο, πχ: «Ποσοστά»

Στο φύλλο, (συμβάν Change) αντιγράφουμε τον κώδικα:
Κώδικας:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Sheet1.Range("a2:b2")) Is Nothing Then Exit Sub

    Dim LRow As Long
    LRow = Sheet1.Cells(Rows.Count, 4).End(xlUp).Row + 1

    If Sheet1.Cells(1, 1).Value = Date Then

        Select Case MsgBox("Έχετε Ήδη Καταχωρήσει Τιμή." _
                        & vbCrLf & "Θέλετε Να Την Αλλάξω;" _
            , vbYesNo Or vbDefaultButton2, "Πληροφορία...")

        Case vbYes
       
            Sheet1.Cells(LRow - 1, 4).NumberFormat = "##0.00%"
            Sheet1.Cells(LRow - 1, 4).Value = Sheet1.Cells(3, 2).Value
            Exit Sub
           
        Case vbNo
       
            Application.EnableEvents = False
            Application.Undo
            Application.EnableEvents = True
            Exit Sub
           
        End Select

    Else
        Sheet1.Cells(LRow, 4).NumberFormat = "##0.00%"
        Sheet1.Cells(LRow, 4).Value = Sheet1.Cells(3, 2).Value
        Sheet1.Cells(LRow, 5).NumberFormat = "d/m/yyyy"
        Sheet1.Cells(LRow, 5).Value = Date
       
        Sheet1.Cells(1, 1).NumberFormat = "d/m/yyyy"
        Sheet1.Cells(1, 1).Value = Date
        Exit Sub
       
  End If
End Sub

Ο κώδικας, καταχωρεί στην στήλη D, την τιμή του κελιού b3, ενώ στο διπλανό κελί της Ε, καταχωρεί την ημερομηνία.

Ακόμα, δίνει την δυνατότητα, να αλλάξουμε μέσα στην ημέρα το ποσοστό
(περισσότερες από μία φορές) ή να κάνουμε Undo την ενέργεια, αν έγινε κατα λάθος αλλαγή σε κάποιο από τα κελιά a2 - b2

Σημείωση:
Αν η έκφραση Option Explicit, υπάρχει ήδη στο φύλλο, να μην αντιγραφεί δεύτερη φορά.

kapetang 28-01-17 08:54

1 Συνημμένο(α)
Καλημέρα

Δημήτρη, νομίζω ότι τα πράγματα είναι πιο απλά.

Υπολογίζεις το ποσοστό με τον τύπο: =((A3*B2)/A2)/100.

Επειδή το A3 ισούται με 100 ο τύπος απλοποιείται στον B2/A2.

Ουσιαστικά αν σε κάποια ημερομηνία έχουμε αρχική τιμή a και τελική b, θέλεις το πηλίκο p= b/a μορφοποιημένο ως ποσοστό.

Θυμίζω ότι αν a=0 η διαίρεση δεν είναι δυνατή (το Excel θα επιστρέψει λάθος).

Επίσης αν οι τιμές a και b είναι θετικές ισχύουν οι σχέσεις:

a< b => p>100% (αρχική τιμή μικρότερη της τελικής δίνει ποσοστό πάνω από 100%)

a>b=>p<100% (αρχική τιμή μεγαλύτερη της τελικής δίνει ποσοστό κάτω από 100%).

Αν υπάρχουν και αρνητικές τιμές θα πρέπει να ξεκαθαρίσεις τι ακριβώς θέλεις να παρακολουθείς.

Δες το συνημμένο.

jimis 28-01-17 12:11

καλησπέρα και ευχαριστώ για τις απαντήσεις σας!

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

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

Spirosgr 28-01-17 13:06

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

Τώρα, αν τα κελιά είναι Α2,Β2,Α3,Β3, δεν έχεις κανένα πρόβλημα.
Αντιγράφεις τον κώδικα και δουλεύει...
Βιβλίο σε .xlsm

jimis 28-01-17 13:45

2 Συνημμένο(α)
πολύ ωραία! θα ήθελα να ρωτήσω και κάτι ακομα.... στο ίδιο φύλλο έχω άλλη μια στήλη με διάφορους αριθμούς και ανά διαστήματα καταχωρώ νέες τιμές. Οι ποιο πολλές είναι μεταξύ του 0 και του 3000 (υπάρχουν κάποιες που είναι 0 και μερικές μεγαλύτερες απο το 3000) και προσπαθώ να βάλω να γίνετε μέσος όρος αυτόματα για τις τιμές που είναι ανάμεσα στο 1 και στο 2999 (δηλαδή εκτός τιμών που είναι 0 και μεγαλύτερες απο 3000). προσπαθώ να το κάνω με την συνάρτηση "averageifs" βάζοντας τους παραμέτρους που ειναι στην επισυναπτόμενη εικόνα (εικόνα 1) και βγάζει το παρακάτω σφάλμα(εικόνα 2). μήπως γνωρίζεις πως πρέπει να γράψω σωστά την συνάρτηση για να βγαίνει αποτέλεσμα?

Spirosgr 28-01-17 13:53

Κατ' αρχήν, το κριτήριο, δεν το έχεις μέσα σε εισαγωγικά ("<3000").
Μετά, αν δεν υπάρξει (για κάποιο λόγο) τιμή >=3000,
θα εμφανίσει σφάλμα, όπως μια διαίρεση με μηδέν (#DIV/0!).

jimis 28-01-17 15:12

3 Συνημμένο(α)
το έβαλα σε εισαγωγικά (εικόνα 1α) και έβγαλε πάλι το ίδιο σφάλμα (εικόνα 2α)

οι αριθμοί που υπάρχουν ήδη είναι οι εξής (εικόνα 3). τα 0 που υπάρχουν οφείλονται στο γεγονός οτι το αποτέλεσμα βγαίνει απο άλλη συνάρτηση, και δεν υπάρχουν ακόμα δεδομένα σε εκείνα τα κελιά

kapetang 28-01-17 15:40

Βάλε στο κελί τον τύπο: =AVERAGEIFS(K3:K99;K3:K99;">0";K3:K99;"<3000")

Αν δεν υπάρχουν τιμές στο διάστημα (0, 3000) θα προκύψει λάθος: (#DIV/0!).

Spirosgr 28-01-17 16:09

1 Συνημμένο(α)
Είδα τις προηγούμενες εικόνες σου, προσεκτικά.
Δεν συμπληρώνεις, τα ορίσματα του τύπου σωστά...(*βλέπε εικόνα)


Η ώρα είναι 12:20.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2