ΈΣΟΔΑ - ΈΞΟΔΑ

Η εφαρμογή αυτή θα μας βοηθάει να παρακολουθούμε τα έξοδα και τα έξοδα μιας οικογένειας κατά τη διάρκεια μιας χρονιάς.  Οποιαδήποτε στιγμή θελήσουμε, θα μπορούμε με το πάτημα ενός κουμπιού να εισαγάγουμε ένα νέο φύλλο εργασίας που θα περιέχει μια συγκεντρωτική αναφορά.
Κατασκευάζουμε το φύλλο εργασίας της παρακάτω οθόνης και αποθηκεύουμε το βιβλίο εργασίας με το όνομα Οικογενειακά  Έσοδα- Έξοδα στο σκληρό δίσκο.

Για να εμφανίσουμε τη γραμμή εργαλείων φόρμας, κάνουμε δεξί κλικ σε οποιαδήποτε γραμμή εργαλείων και από το μενού συντόμευσης επιλέγουμε Φόρμες.
Κάνουμε κλικ στο εργαλείο "Κουμπί" και ο δείκτης του ποντικιού παίρνει τη μορφή σταυρού. Με πατημένο το αριστερό πλήκτρο του ποντικιού σχεδιάζουμε ένα κουμπί διαταγών, περίπου στο μέγεθος κελιού. Μόλις αφήσουμε το πλήκτρο του ποντικιού ελεύθερο εμφανίζεται το παράθυρο διαλόγου "Αντιστοίχιση μακροεντολής", όπου κάνουμε κλικ στο κουμπί Άκυρο, επειδή η αντιστοίχιση μακροεντολών θα γίνει αργότερα.
Με επιλεγμένο το νέο κουμπί πατάμε το συνδυασμό πλήκτρων [Ctrl] + [Ψ] για να το αντιγράψουμε στο Πρόχειρο και στη συνέχεια 9 φορές το συνδυασμό πλήκτρων [Ctrl] + [Ω] για να δημιουργήσουμε 10 συνολικά κουμπιά. Τοποθετούμε τα κουμπιά στη θέση που δείχνει η παραπάνω εικόνα και τους δίνουμε τα αντίστοιχα ονόματα.

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

Επιλογή Αντικειμένου

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

Στο ομώνυμο παράθυρο διαλόγου που εμφανίζεται κάνουμε κλικ στην καρτέλα "Ιδιότητες". Επιλέγουμε το κουμπί επιλογής "Ούτε μετακίνηση ούτε αλλαγή μεγέθους με κελιά" και κάνουμε κλικ στο κουμπί ΟΚ.

Το επόμενο βήμα είναι να δημιουργήσουμε μία συνάρτηση που θα μας επιστρέφει το πλήθος των εγγραφών που έχουμε καταχωρίσει.
Για να εμφανίσουμε το περιβάλλον της Visual Basic πατάμε το συνδυασμό πλήκτρων [Alt] + [F11] και πληκτρολογούμε τον παρακάτω κώδικα.

Η συνάρτηση Πλήθος_Εγγραφών επιλέγει αρχικά το κελί Α7 και στη συνέχεια ελέγχει με μία εντολή επανάληψης αν το επόμενο κελί της στήλης Α περιέχει δεδομένα.

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

Στη συνέχεια πληκτρολογούμε τον κώδικα της διαδικασίας ΔΕΗ:

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

Range("Α" & (r + 7).Select

επιλέγει το κελί της στήλης Α, το οποίο βρίσκεται μετά τη τελευταία γραμμή που περιέχει δεδομένα.

Στο κελί αυτό γράφουμε τον επόμενο αύξοντα αριθμό (r + 1) και επιλέγουμε το κελί της διπλανής στήλης (Β) Η εντολή

Selection.Offset(0,1).Range("Α1").Select

επιλέγει το κελί που βρίσκεται στην ίδια γραμμή και μία στήλη δεξιά από το ενεργό κελί. Στο κελί αυτό εισάγουμε την τρέχουσα ημερομηνία.

Η επόμενη εντολή επιλέγει το κελί της επόμενης στήλης (C), όπου και καταχωρίζουμε το αλφαριθμητικό "ΔΕΗ".   Η τελευταία εντολή επιλέγει και αυτή το κελί που βρίσκεται στην ίδια γραμμή, αλλά μία στήλη δεξιότερα.

Αντιγράφουμε τον παραπάνω κώδικα και με τη βοήθεια της επικόλλησης δεδομένων, δημιουργούμε άλλες 4 διαδικασίες και αλλάζουμε τα ονόματά τους σε "ΟΤΕ" , "Ενοίκιο" , "Κοινόχρηστα" και "Διάφορα  Έξοδα". Η μόνη αλλαγή που κάνουμε στον κώδικα των νέων διαδικασιών , είναι να αλλάξουμε την εκχώρηση της προτελευταίας εντολής. Για παράδειγμα, στη διαδικασία ΟΤΕ εκχωρούμε στο κελί της στήλης C το αλφαριθμητικό "ΟΤΕ", ώστε όταν περνάμε στο φύλλο εργασίας έξοδα τηλεφώνου, στην 3η στήλη να εμφανίζεται η σωστή περιγραφή των εξόδων.

Το επόμενο βήμα είναι να επιστρέφουμε στο Excel και να αντιστοιχίσουμε τις διαδικασίες στα αντίστοιχα κουμπιά. Κάνουμε δεξί κλικ στο πρώτο κουμπί και από το μενού συντόμευσης επιλέγουμε "Αντιστοίχιση μακροεντολής".

Στο κουμπί με επιγραφή ΔΕΗ αντιστοιχίζουμε την ομώνυμη διαδικασία. Με τον ίδιο τρόπο αντιστοιχίζουμε στα υπόλοιπα κουμπιά τις ομώνυμες μακροεντολές.

Επιστρέφοντας στο περιβάλλον της Visual Basic θα δημιουργήσουμε άλλες πέντε διαδικασίες για τα υπόλοιπα 5 κουμπιά των εσόδων. Δημιουργούμε ένα αντίγραφο της διαδικασίας ΔΕΗ και μετονομάζουμε τη νέα διαδικασία σε Μισθός.

Οι αλλαγές στο κώδικα τώρα είναι δύο.  Όπως και προηγουμένως, στην προτελευταία εντολή εκχωρούμε ένα διαφορετικό αλφαριθμητικό.
ActiveCell.Formula = "Μισθός"

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

Selection.0ffset(0,2).Range(" A1").Select

Ο κώδικας της διαδικασίας Μισθός, φαίνεται στην παρακάτω εικόνα.

 Όπως και προηγουμένως δημιουργούμε άλλα 4 αντίγραφα αυτής της διαδικασίας και τις μετονομάζουμε σε "Επιδόματα", "Τόκοι", "Μέρισμα" και " Διάφορα  Έσοδα". Η μοναδική αλλαγή που θα κάνουμε είναι στην προτελευταία εντολή κάθε διαδικασίας, όπου και πάλι θα εκχωρήσουμε στο κελί της στήλης C , αλφαριθμητικά παρόμοια με τα ονόματα των διαδικασιών.

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

=SUM(E7:E1006)

και στο κελί Η2 τον τύπο

=SUM(D7:D1006)

Η διαφορά τους θα εμφανίζεται στο κελί Η3 με τον τύπο

=Η1-Η2.

Είμαστε έτοιμοι πλέον να δοκιμάσουμε την εφαρμογή μας. Κάνουμε κλικ στο κουμπί ΔΕΗ και η πρώτη γραμμή των δεδομένων μας πρέπει να έχει τη μορφή.

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

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

Μόλις καταχωρίσουμε στο κελί Ε8 κάποιο ποσό και πατήσουμε το πλήκτρο [Enter], αυτόματα το ποσό αυτό θα αθροιστεί στα έσοδα και το κελί Η3 θα εμφανίσει το νέο υπόλοιπο.

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

Αρχικά δηλώνουμε τις παρακάτω μεταβλητές στο Γενικό τμήμα δηλώσεων.

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

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

Range("C" & (6 + i).Select
If ActiveCell.Formula = "ΔΕΗ" Then deh = deh + Selection.Offset(0, 1).Range(“A1”).ForrnulaR1C1

Αν, για παράδειγμα, το περιεχόμενο του κελιού είναι "ΔΕΗ" , τότε το ποσόν του διπλανού κελιού (στήλη D) προστίθεται στο περιεχόμενο της μεταβλητής deh. Μ' αυτόν τον τρόπο στο τέλος των επαναλήψεων, η μεταβλητή deh θα περιέχει το συνολικό ποσό που καταβλήθηκε στη ΔΕΗ.
 
 
Sub Ετήσια_Αναφορά()
Dim grammes As Integer, i As Integer
deh = 0: ote = 0: enk = 0: kxr = 0: dex = 0
mis = 0: epid = 0: tok = 0: mer = 0: des = 0
grammes = Πλήθος_Εγγραφών()
If granmmes = 0 Then
MsgBox "Δεν υπάρχουν Δεδομένα"
Exit Sub
End If

For i = 1 To grammes
Range("C" & (6 + 1)).Select
If ActiveCell.Formula = "ΔΕΗ" Then deh = deh + Selection.Offset(0, 1).Range("A1").FormulaR1C1
If ActiveCell.Formula = "ΟΤΕ" Then ote = ote + Selection.Offset(0, 1).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Ενοίκιο" Then enk = enk + Selection.Offset(0, 1).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Κοινόχρηστα" Then kxr = kxr + Selection.Offset(0, 1).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Διάφορα Έξοδα" Then dex = dex + Selection.Offset(0, 1).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Μισθός" Then mis = mis + Selection.Offset(0, 2).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Επιδόματα" Then epid = epid + Selection.Offset(0, 2).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Τόκοι" Then tok = tok + Selection.Offset(0, 2).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Μέρισμα" Then mer = mer + Selection.Offset(0, 2).Range("A1").FormulaR1C1
If ActiveCell.Formula = "Διάφορα Έσοδα" Then des = des + Selection.Offset(0, 2).Range("A1").FormulaR1C1
Next i

Sheets.Add after:=Worksheets(Worksheets.Count)
?ctivesheets.Name = InputBox("Δώστε ένα όνομα για το νέο φύλλο εργασίας")

Εκτύπωση_Επικεφαλίδας
Εκτύπωση_Εξόδων
Εκτύπωση_Εσόδων
Εκτύπωση_Συνόλων
End Sub

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

 Sheets.Add after:=Worksheets(Worksheets.Count)
 ActiveSheet.Name = InputBox("Δώστε ένα όνομα για το νέο φύλλο εργασίας")

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

Στο κελί Α1 αναγράφεται με έντονη γραφή και μέγεθος γραμματοσειράς 12 το κείμενο "ΕΤΗΣΙΑ ΑΝΑΦΟΡΑ". Στα κελιά Α2, Β2 και C2 θα εμφανιστούν τα αλφαριθμητικά "ΠΕΡΙΓΡΑΦΗ", "ΕΞΟΔΑ" και "ΕΣΟΔΑ" αντίστοιχα.

Η διαδικασία Εκτύπωση_Εξόδων εμφανίζει στη στήλη Α όλες τις επικεφαλίδες των εξόδων και στο διπλανό κελί (στήλη Β) το ποσό που είναι καταχωρημένο στην αντίστοιχη μεταβλητή.

Παρόμοια η διαδικασία Εκτύπωση_Εσόδων εμφανίζει στη στήλη Α τις επικεφαλίδες των εσόδων και το αντίστοιχο ποσό στη στήλη C.

Τέλος η διαδικασία Εκτύπωση_Συνόλων ενεργοποιεί το κελί Α14, το μορφοποιεί με έντονη γραφή και εισάγει το αλφαριθμητικό "Σύνολα". Στο διπλανό κελί (Β14) υπολογίζει τα συνολικά έξοδα και στο παραδίπλα κελί (C14) υπολογίζει τα συνολικά έσοδα.

Τα ποσά αυτά υπολογίζονται από τον τύπο:

ActiveCell.FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)"

Ο τύπος αυτός αθροίζει τα κελιά που βρίσκονται στην ίδια στήλη (ίδιο C) και μεταξύ των 10 γραμμών που βρίσκονται πάνω από το ενεργό κελί.

Δύο γραμμές πιο κάτω, δηλαδή στο κελί Α16 εισάγουμε με έντονη γραφή το αλφαριθμητικό "Νέο Υπόλοιπο" και στο διπλανό κελί (Β16) υπολογίζουμε τη διαφορά εισόδων και εξόδων με τον τύπο

ActiveCell.FormulaR1C1 = "=(Α[ -2]C[1])-(R[ -2]C)"

Τα αποτελέσματα που θα πάρουμε πρέπει να συμπίπτουν με τα περιεχόμενα των κελιών Η1 , Η2 και Η3 του φύλλου εργασίας 2002.

Το τελευταίο βήμα είναι να δημιουργήσουμε ένα κουμπί και να του αντιστοιχίσουμε τη μακροεντολή Ετήσια_Αναφορά.

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