Αν και το VBA προσφέρει μια αξιοπρεπή ποικιλία από ενσωματωμένες λειτουργίες, μπορεί να μην βρίσκετε πάντα αυτό ακριβώς που χρειάζεστε. Ευτυχώς, μπορείτε επίσης να χρησιμοποιήσετε τις περισσότερες από τις συναρτήσεις φύλλου εργασίας του Excel στις διαδικασίες VBA σας. Οι μόνες συναρτήσεις φύλλου εργασίας που δεν μπορείτε να χρησιμοποιήσετε είναι αυτές που έχουν αντίστοιχη συνάρτηση VBA. Για παράδειγμα, δεν μπορείτε να χρησιμοποιήσετε τη συνάρτηση RAND του Excel (η οποία δημιουργεί έναν τυχαίο αριθμό), επειδή το VBA έχει μια ισοδύναμη συνάρτηση: Rnd.
Η VBA καθιστά διαθέσιμες τις συναρτήσεις φύλλου εργασίας του Excel μέσω του αντικειμένου WorksheetFunction, το οποίο περιέχεται στο αντικείμενο Application. Ακολουθεί ένα παράδειγμα για το πώς μπορείτε να χρησιμοποιήσετε τη συνάρτηση SUM του Excel σε μια δήλωση VBA:
Σύνολο = Application.WorksheetFunction.SUM(Range(“A1:A12”))
Μπορείτε να παραλείψετε είτε το τμήμα Εφαρμογή είτε το τμήμα Συνάρτηση φύλλου εργασίας της έκφρασης. Και στις δύο περιπτώσεις, το VBA καταλαβαίνει τι κάνετε. Με άλλα λόγια, αυτές οι τρεις εκφράσεις λειτουργούν ακριβώς το ίδιο:
Σύνολο = Application.WorksheetFunction.SUM(Range(“A1:A12”))
Σύνολο = WorksheetFunction.SUM(Range(“A1:A12”))
Σύνολο = Application.SUM(Εύρος ("A1:A12"))
Η προσωπική μου προτίμηση είναι να χρησιμοποιήσω το τμήμα WorksheetFunction απλώς για να είναι απολύτως σαφές ότι ο κώδικας χρησιμοποιεί μια συνάρτηση Excel.
Παραδείγματα συναρτήσεων φύλλου εργασίας
Εδώ, θα ανακαλύψετε πώς να χρησιμοποιήσετε τις συναρτήσεις φύλλου εργασίας στις εκφράσεις VBA σας.
Εύρεση της μέγιστης τιμής σε ένα εύρος
Ακολουθεί ένα παράδειγμα που δείχνει πώς να χρησιμοποιήσετε τη συνάρτηση φύλλου εργασίας MAX του Excel σε μια διαδικασία VBA. Αυτή η διαδικασία εμφανίζει τη μέγιστη τιμή στη στήλη Α του ενεργού φύλλου εργασίας:
Χρήση συνάρτησης φύλλου εργασίας στον κώδικα VBA.
Sub ShowMax()
Dim TheMax As Double
TheMax = WorksheetFunction.MAX(Range("A:A"))
MsgBox TheMax
End Sub
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση MIN για να λάβετε τη μικρότερη τιμή σε ένα εύρος. Και όπως θα περίμενε κανείς, μπορείτε να χρησιμοποιήσετε άλλες συναρτήσεις φύλλου εργασίας με παρόμοιο τρόπο. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση LARGE για να προσδιορίσετε την κ η μεγαλύτερη τιμή σε ένα εύρος. Η ακόλουθη έκφραση το αποδεικνύει:
SecondHighest = WorksheetFunction.LARGE(Range("A:A"),2)
Σημειώστε ότι η συνάρτηση LARGE χρησιμοποιεί δύο ορίσματα. Το δεύτερο όρισμα αντιπροσωπεύει το k ο μέρος — 2, σε αυτήν την περίπτωση (τη δεύτερη μεγαλύτερη τιμή).
Υπολογισμός πληρωμής στεγαστικού δανείου
Το επόμενο παράδειγμα χρησιμοποιεί τη συνάρτηση φύλλου εργασίας PMT για τον υπολογισμό μιας πληρωμής στεγαστικού δανείου. Τρεις μεταβλητές χρησιμοποιούνται για την αποθήκευση των δεδομένων που μεταβιβάζονται στη συνάρτηση Pmt ως ορίσματα. Ένα πλαίσιο μηνύματος εμφανίζει την υπολογισμένη πληρωμή.
Sub PmtCalc()
Dim IntRate As Double
Dim LoanAmt As Double
Αχνές περίοδοι όσο καιρό
IntRate = 0,0625 / 12
Περίοδοι = 30 * 12
LoanAmt = 150000
MsgBox WorksheetFunction.PMT(IntRate, Periods, -LoanAmt)
End Sub
Όπως δείχνει η ακόλουθη δήλωση, μπορείτε επίσης να εισαγάγετε τις τιμές απευθείας ως ορίσματα συνάρτησης:
MsgBox WorksheetFunction.PMT(0.0625 /12, 360, -150000)
Ωστόσο, η χρήση μεταβλητών για την αποθήκευση των παραμέτρων διευκολύνει την ανάγνωση και την τροποποίηση του κώδικα, εάν είναι απαραίτητο.
Χρήση συνάρτησης αναζήτησης
Το παρακάτω παράδειγμα χρησιμοποιεί τις συναρτήσεις InputBox και MsgBox της VBA, καθώς και τη συνάρτηση VLOOKUP του Excel. Ζητάει έναν αριθμό ανταλλακτικού και, στη συνέχεια, λαμβάνει την τιμή από έναν πίνακα αναζήτησης. Παρακάτω, το εύρος A1:B13 ονομάζεται Τιμοκατάλογος.
Η σειρά, που ονομάζεται PriceList, περιέχει τιμές για ανταλλακτικά.
Sub GetPrice()
Dim PartNum As Variant
Dim Price As Double
PartNum = InputBox ("Εισαγάγετε τον αριθμό εξαρτήματος")
Φύλλα ("Τιμές"). Ενεργοποίηση
Τιμή = WorksheetFunction.VLOOKUP(PartNum, Range("PriceList"), 2, False)
MsgBox PartNum & “cost” & Price
End Sub
Δείτε πώς λειτουργεί η διαδικασία GetPrice:
-
Η συνάρτηση InputBox του VBA ζητά από τον χρήστη έναν αριθμό ανταλλακτικού.
-
Ο αριθμός εξαρτήματος που εισάγει ο χρήστης εκχωρείται στη μεταβλητή PartNum.
-
Η επόμενη δήλωση ενεργοποιεί το φύλλο εργασίας Τιμές, σε περίπτωση που δεν είναι ήδη το ενεργό φύλλο.
-
Ο κωδικός χρησιμοποιεί τη συνάρτηση VLOOKUP για να βρει τον αριθμό εξαρτήματος στον πίνακα.
-
Σημειώστε ότι τα ορίσματα που χρησιμοποιείτε σε αυτήν τη δήλωση είναι τα ίδια με αυτά που θα χρησιμοποιούσατε με τη συνάρτηση σε έναν τύπο φύλλου εργασίας. Αυτή η δήλωση εκχωρεί το αποτέλεσμα της συνάρτησης στη μεταβλητή Price.
-
Ο κωδικός εμφανίζει την τιμή του εξαρτήματος μέσω της συνάρτησης MsgBox.
Αυτή η διαδικασία δεν έχει κανέναν χειρισμό σφαλμάτων και αποτυγχάνει παταγωδώς εάν εισαγάγετε έναν ανύπαρκτο αριθμό εξαρτήματος. (Δοκιμάστε το.) Εάν αυτή ήταν μια πραγματική εφαρμογή που χρησιμοποιείται σε μια πραγματική επιχείρηση, θα θέλατε να προσθέσετε μερικές δηλώσεις που αντιμετωπίζουν τα σφάλματα με μεγαλύτερη χάρη.
Εισαγωγή συναρτήσεων φύλλου εργασίας
Δεν μπορείτε να χρησιμοποιήσετε το πλαίσιο διαλόγου Συνάρτηση Επικόλλησης του Excel για να εισαγάγετε μια συνάρτηση φύλλου εργασίας σε μια λειτουργική μονάδα VBA. Αντίθετα, εισάγετε τέτοιες λειτουργίες με τον παλιομοδίτικο τρόπο: με το χέρι. Ωστόσο, μπορείτε να χρησιμοποιήσετε το πλαίσιο διαλόγου Επικόλληση συνάρτησης για να προσδιορίσετε τη συνάρτηση που θέλετε να χρησιμοποιήσετε και να μάθετε για τα ορίσματά της.
Μπορείτε επίσης να επωφεληθείτε από την επιλογή Auto List Members του VBE, η οποία εμφανίζει μια αναπτυσσόμενη λίστα με όλες τις λειτουργίες του φύλλου εργασίας. Απλώς πληκτρολογήστε Application.WorksheetFunction , ακολουθούμενο από μια τελεία. Στη συνέχεια, βλέπετε μια λίστα με τις λειτουργίες που μπορείτε να χρησιμοποιήσετε. Εάν αυτή η δυνατότητα δεν λειτουργεί, επιλέξτε την εντολή Εργαλεία → Επιλογές του VBE, κάντε κλικ στην καρτέλα Επεξεργαστής και τοποθετήστε μια επιλογή δίπλα στην επιλογή Αυτόματη λίστα μελών.
Λήψη λίστας συναρτήσεων φύλλου εργασίας που μπορείτε να χρησιμοποιήσετε στον κώδικα VBA.
Περισσότερα σχετικά με τη χρήση συναρτήσεων φύλλου εργασίας
Οι νεοεισερχόμενοι στο VBA συχνά συγχέουν τις ενσωματωμένες λειτουργίες του VBA και τις λειτουργίες του βιβλίου εργασίας του Excel. Ένας καλός κανόνας που πρέπει να θυμάστε είναι ότι η VBA δεν προσπαθεί να επανεφεύρει τον τροχό. Ως επί το πλείστον, το VBA δεν αντιγράφει συναρτήσεις φύλλου εργασίας του Excel.
Για τις περισσότερες συναρτήσεις φύλλου εργασίας που δεν είναι διαθέσιμες ως μέθοδοι του αντικειμένου WorksheetFunction, μπορείτε να χρησιμοποιήσετε έναν αντίστοιχο ενσωματωμένο τελεστή ή συνάρτηση VBA. Για παράδειγμα, η συνάρτηση φύλλου εργασίας MOD δεν είναι διαθέσιμη στο αντικείμενο WorksheetFunction επειδή το VBA έχει ένα ισοδύναμο: τον ενσωματωμένο τελεστή Mod.
Συμπέρασμα? Εάν πρέπει να χρησιμοποιήσετε μια συνάρτηση, προσδιορίστε πρώτα εάν το VBA έχει κάτι που καλύπτει τις ανάγκες σας. Εάν όχι, ελέγξτε τις λειτουργίες του φύλλου εργασίας. Εάν όλα τα άλλα αποτύχουν, ίσως μπορείτε να γράψετε μια προσαρμοσμένη συνάρτηση χρησιμοποιώντας το VBA.