Οδηγός λειτουργίας Excel VBA: Επιστροφή, Κλήση, Παραδείγματα

⚡ Έξυπνη Σύνοψη

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

  • 🎯 Ορισμός: Μια συνάρτηση εκτελεί μια συγκεκριμένη εργασία και επιστρέφει ένα μόνο αποτέλεσμα στον κωδικό κλήσης.
  • 🧾 Σύνταξη: Όνομα συνάρτησης (ορίσματα) Καθώς η συνάρτηση Type ανοίγει το μπλοκ και η συνάρτηση End το κλείνει.
  • ↩️ Επιστροφή τιμής: Αντιστοιχίστε το αποτέλεσμα στο όνομα της συνάρτησης, όπως στην προσθήκηNumbers = πρώτοςΑριθμός + δεύτεροςΑριθμός.
  • 🔢 Τύπος επιστροφής: Δηλώνοντας ως "Όσο" ή "Όσο" Double αποφεύγει την πιο αργή προεπιλεγμένη παραλλαγή.
  • 🖱️ Κλήση: Ένα κουμπί εντολής μεταβιβάζει δύο αριθμούς και εμφανίζει το επιστρεφόμενο άθροισμα σε ένα πλαίσιο μηνύματος.
  • 📊 Χρήση Φύλλου Εργασίας: Μια Δημόσια Συνάρτηση σε μια τυπική λειτουργική μονάδα γίνεται ένας τύπος που ορίζεται από τον χρήστη σε οποιοδήποτε κελί.

Συνάρτηση VBA του Excel

Τι είναι μια Συνάρτηση;

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

Ας υποθέσουμε ότι είστε αναπτυγμένοιping ένα πρόγραμμα που υπολογίζει τους τόκους ενός δανείου. Μπορείτε να δημιουργήσετε μια συνάρτηση που δέχεται το ποσό του δανείου και την περίοδο αποπληρωμής. Η συνάρτηση μπορεί στη συνέχεια να χρησιμοποιήσει το ποσό του δανείου και την περίοδο αποπληρωμής για να υπολογίσει τους τόκους και να επιστρέψει την τιμή.

Γιατί να χρησιμοποιήσετε λειτουργίες

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

Κανόνες ονοματοδοσίας συναρτήσεων

Οι κανόνες ονομασίας είναι επίσης πανομοιότυποι με εκείνους για τις υπορουτίνες. Ένα όνομα συνάρτησης δεν μπορεί να περιέχει κενό, πρέπει να ξεκινά με γράμμα ή υπογράμμιση και δεν μπορεί να είναι δεσμευμένο. VBA λέξη-κλειδί όπως Συνάρτηση, Ιδιωτική ή Τέλος.

Σύνταξη VBA για δήλωση συνάρτησης

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

ΕΔΩ στη σύνταξη,

Code Ενέργειες
  • "Ιδιωτική λειτουργία myFunction(...)"
  • Εδώ η λέξη-κλειδί "Function" χρησιμοποιείται για να δηλώσει μια συνάρτηση με το όνομα "myFunction" και να ξεκινήσει το σώμα της συνάρτησης.
  • Η λέξη-κλειδί «Ιδιωτικό» χρησιμοποιείται για να καθορίσει το εύρος της λειτουργίας
  • "ByVal arg1 ως ακέραιος αριθμός, ByVal arg2 ως ακέραιος"
  • Δηλώνει δύο παραμέτρους ακέραιου τύπου δεδομένων που ονομάζονται "arg1" και "arg2".
  • myFunction = arg1 + arg2
  • αξιολογεί την έκφραση arg1 + arg2 και εκχωρεί το αποτέλεσμα στο όνομα της συνάρτησης.
  • "Τερματική λειτουργία"
  • Η «Τέλος Συνάρτησης» χρησιμοποιείται για τον τερματισμό του σώματος της συνάρτησης

Πώς να επιστρέψετε μια τιμή και να ορίσετε τον τύπο δεδομένων συνάρτησης

Μια Συνάρτηση έχει μία δουλειά που δεν κάνει μια Υπορουτίνα: επιστρέφει μια τιμή. Δύο λεπτομέρειες ελέγχουν αυτήν την τιμή και και οι δύο είναι εύκολο να τις παραβλέψει κανείς.

Το πρώτο είναι η ανάθεση. Η VBA δεν έχει εντολή Return. Αντίθετα, αντιστοιχίζετε το αποτέλεσμα στο ίδιο το όνομα της συνάρτησης, γι' αυτό και η γραμμή διαβάζεται myFunction = arg1 + arg2Εάν αυτή η ανάθεση δεν εκτελεστεί ποτέ, η συνάρτηση επιστρέφει σιωπηλά μια κενή τιμή αντί να εμφανίζει σφάλμα, επομένως κάθε κλάδος του κώδικα πρέπει να την ορίσει.

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

Δήλωση Επιστροφές Πότε να το χρησιμοποιήσετε
Συνάρτηση f(x όσο διαρκεί) Παραλλαγή Μόνο όταν ο τύπος αποτελέσματος διαφέρει πραγματικά
Συνάρτηση f(x Όσο διαρκεί) Όσο διαρκεί Μακριά Ακέραιοι αριθμοί όπως μετρήσεις και αριθμοί γραμμών
Συνάρτηση f(x Όσο) Double Double Οποιοσδήποτε υπολογισμός που παράγει δεκαδικούς αριθμούς
Συνάρτηση f(x Όσο Μήκος) Ως Σειρά Συμβολοσειράς Σπάγγος Μορφοποιημένο κείμενο που επιστράφηκε για εμφάνιση
Συνάρτηση f(x) Όσο διαρκεί η λογική τιμή Boolean Ένας έλεγχος επικύρωσης που απαντά αληθές ή ψευδές

💡 Συμβουλές: Χρησιμοποιήστε τη Συνάρτηση Exit για να αποχωρήσετε νωρίς μόλις οριστεί η τιμή επιστροφής, με τον ίδιο τρόπο που η Exit Sub αποχωρεί από μια υπορουτίνα.

Λειτουργία που παρουσιάζεται με Παράδειγμα:

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

  1. Δημιουργήστε τη διεπαφή χρήστη
  2. Προσθέστε τη συνάρτηση
  3. Γράψτε τον κώδικα για το κουμπί εντολής
  4. Ελέγξτε τον κωδικό

Βήμα 1) διεπαφή χρήστη

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

Λειτουργίες και υπορουτίνα VBA

Ορίστε τις ακόλουθες ιδιότητες του CommandButton1 ως εξής.

S / N Έλεγχος Ιδιοκτησία αξία
1 Κουμπί Command1 Όνομα btnΠροσθήκηNumbers
2 Λεζάντα Πρόσθεση Numbers Λειτουργία

Η διεπαφή σας θα πρέπει τώρα να εμφανίζεται ως εξής

Λειτουργίες και υπορουτίνα VBA

Βήμα 2) Κωδικός λειτουργίας.

  1. Πατήστε Alt + F11 για να ανοίξετε το παράθυρο κώδικα
  2. Προσθέστε τον παρακάτω κώδικα
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

ΕΔΩ στον κωδικό,

Code Ενέργειες
  • «Προσθήκη ιδιωτικής λειτουργίαςNumbers(...) "
  • Δηλώνει μια ιδιωτική συνάρτηση «προσθήκηNumbers” που δέχεται δύο ακέραιες παραμέτρους.
  • "ByVal firstNumber As Integer, ByVal secondNumber As Integer"
  • Δηλώνει δύο μεταβλητές παραμέτρων firstNumber και secondNumber
  • "ΠροσθήκηNumbers = πρώτος αριθμός + δεύτερος αριθμός"
  • Προσθέτει τις τιμές firstNumber και secondNumber και εκχωρεί το άθροισμα προς προσθήκηNumbers.

Βήμα 3) Γράψτε Code που καλεί τη συνάρτηση

  1. Κάντε δεξί κλικ στο btnAddNumbers κουμπί εντολής
  2. Επιλογή προβολής Code
  3. Προσθέστε τον παρακάτω κώδικα
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

ΕΔΩ στον κωδικό,

Code Ενέργειες
«MsgBox προσθέτωNumbers(2,3) "
  • Καλεί τη συνάρτηση προσθήκηNumbers και περνά στα 2 και 3 ως παράμετροι. Η συνάρτηση επιστρέφει το άθροισμα των δύο αριθμών πέντε (5)

Βήμα 4) Εκτελέστε το πρόγραμμα, θα έχετε τα ακόλουθα αποτελέσματα

Λειτουργίες και υπορουτίνα VBA

Κατεβάστε το Excel που περιέχει τον παραπάνω κώδικα

Κατεβάστε το παραπάνω αρχείο Excel Code

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

Πώς να χρησιμοποιήσετε μια συνάρτηση VBA σε ένα κελί φύλλου εργασίας

Μια συνάρτηση γραμμένη σε VBA μπορεί να πληκτρολογηθεί σε ένα κελί ακριβώς όπως η SUM ή η VLOOKUP. Το Excel την ονομάζει συνάρτηση οριζόμενη από τον χρήστη ή UDF και αυτός είναι ο λόγος που πολλοί άνθρωποι μαθαίνουν συναρτήσεις πριν από τις υπορουτίνες. Πρέπει να πληρούνται τρεις προϋποθέσεις.

  • Τοποθετήστε το σε μια τυπική ενότητα: Εισαγωγή, Ενότητα στον επεξεργαστή. Μια συνάρτηση που είναι αποθηκευμένη πίσω από ένα φύλλο εργασίας ή στο ThisWorkbook δεν είναι ορατή στη γραμμή τύπων.
  • Δηλώστε το δημόσια: Το παραπάνω παράδειγμα χρησιμοποιεί την επιλογή Ιδιωτικό, η οποία την αποκρύπτει από το Excel. Η προεπιλεγμένη ρύθμιση είναι το Δημόσιο, επομένως αρκεί απλώς να καταργήσετε τη λέξη-κλειδί.
  • Επιστρέψτε μια τιμή, μην αλλάξετε τίποτα: Ένα UDF δεν μπορεί να μορφοποιήσει κελιά, να διαγράψει γραμμές ή να γράψει σε άλλο κελί. Το Excel αποκλείει αυτές τις ενέργειες και το κελί εμφανίζει την τιμή #VALUE!.

Η παρακάτω συνάρτηση μετατρέπει μια θερμοκρασία και μπορεί να χρησιμοποιηθεί οπουδήποτε στο φύλλο.

Public Function CelsiusToF(ByVal Celsius As Double) As Double
    CelsiusToF = (Celsius * 9 / 5) + 32
End Function

Αποθηκεύστε το βιβλίο εργασίας ως αρχείο .xlsm με δυνατότητα μακροεντολών και, στη συνέχεια, πληκτρολογήστε =ΚελσίουΣτοF(A1) σε οποιοδήποτε κελί. Το αποτέλεσμα ενημερώνεται κάθε φορά που αλλάζει το A1 και το όνομα εμφανίζεται στη λίστα αυτόματης συμπλήρωσης τύπου στην κατηγορία Ορισμένο από τον χρήστη. Επειδή το βιβλίο εργασίας περιέχει πλέον μακροεντολές, όποιος το ανοίγει πρέπει να ενεργοποιήσει το περιεχόμενο πριν ο τύπος επιστρέψει μια τιμή αντί για #ΟΝΟΜΑ;.

Συνηθισμένα σφάλματα συνάρτησης VBA και πώς να τα διορθώσετε

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

  • Η συνάρτηση επιστρέφει Empty ή 0: Το αποτέλεσμα δεν αντιστοιχίστηκε ποτέ στο όνομα της συνάρτησης ή ένας κλάδος μιας πρότασης If παραλείπει την αντιστοίχιση. Ορίστε την τιμή επιστροφής σε κάθε διαδρομή.
  • #ΟΝΟΜΑ; σε ένα κελί φύλλου εργασίας: Η συνάρτηση είναι Ιδιωτική, βρίσκεται σε μια λειτουργική μονάδα φύλλου αντί για μια τυπική λειτουργική μονάδα ή το βιβλίο εργασίας αποθηκεύτηκε χωρίς ενεργοποιημένες μακροεντολές.
  • Υπερχείλιση με ακέραιους αριθμούς: Το παράδειγμα χρησιμοποιεί την συνάρτηση As Integer, η οποία σταματά στο 32,767. Αλλάξτε και τις δύο παραμέτρους και τον τύπο επιστροφής σε Long για οποιαδήποτε πραγματικά δεδομένα.
  • Ένα αλλαγμένο επιχείρημα εκπλήσσει τον καλούντα: Η παράλειψη του ByVal κάνει την VBA να μεταβιβάζει την ίδια τη μεταβλητή, επομένως η συνάρτηση μπορεί να αλλάξει την τιμή του καλούντος. Γράψτε το ByVal εκτός αν θέλετε αυτό το αποτέλεσμα.

Συχνές Ερωτήσεις

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

Προσθέστε την προαιρετική λέξη-κλειδί με μια προεπιλογή, όπως στο Προαιρετικό ByVal Rate As Double = 0.05. Κάθε παράμετρος μετά από μια Προαιρετική πρέπει επίσης να είναι Προαιρετική και πρέπει να βρίσκεται τελευταία στη λίστα.

Ναι, μέσω της συνάρτησης Application.WorksheetFunction, για παράδειγμα Application.WorksheetFunction.Sum(Range(“A1:A10”)). Οι συναρτήσεις που παρέχει ήδη η VBA, όπως η Left ή η Trim, καλούνται απευθείας χωρίς αυτό το πρόθεμα.

Ναι. Επικολλήστε τον τύπο του φύλλου εργασίας και ένας βοηθός AI επιστρέφει μια ισοδύναμη Δημόσια Συνάρτηση με ονομασμένα ορίσματα και έναν δηλωμένο τύπο επιστροφής. Συγκρίνετε και τα δύο αποτελέσματα σε δείγματα γραμμών πριν αντικαταστήσετε τον τύπο.

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

Συνοψίστε αυτήν την ανάρτηση με: