Ενσωματωμένες λειτουργίες vba. VBA Excel. Προσαρμοσμένη λειτουργία (σύνταξη, στοιχεία). Δημιουργία συνάρτησης σε VBA με πολλαπλά ορίσματα

Μια συνάρτηση γραμμένη σε VBA είναι κώδικας που εκτελεί έναν υπολογισμό και επιστρέφει μια τιμή (ή έναν πίνακα τιμών). Μόλις δημιουργήσετε μια συνάρτηση, μπορείτε να τη χρησιμοποιήσετε με τρεις τρόπους:

  1. Ως τύπος σε ένα φύλλο εργασίας, όπου μπορεί να λάβει ορίσματα και να επιστρέψει τιμές.
  2. Ως μέρος της ρουτίνας VBA σας. Σε μια διαδικασία Sub ή μέσα σε άλλες συναρτήσεις.
  3. Στους κανόνες μορφοποίησης υπό όρους.

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

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

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

Ποια είναι η διαφορά μεταξύ μιας διαδικασίας (Sub) και μιας συνάρτησης (Function);

Η κύρια διαφορά είναι ότι μια διαδικασία (sub) χρησιμοποιείται για την εκτέλεση ενός συνόλου εντολών και δεν προορίζεται, σε αντίθεση με μια συνάρτηση (συνάρτηση), να επιστρέψει μια τιμή (ή έναν πίνακα τιμών).

Για να δείξουμε, ας δώσουμε ένα παράδειγμα. Για παράδειγμα, υπάρχει μια σειρά αριθμών από το 1 έως το 100 και πρέπει να διαχωρίσετε τους άρτιους από τους περιττούς.

Χρησιμοποιώντας τη διαδικασία (υπό), μπορείτε, για παράδειγμα, να περάσετε από τα κελιά και να επισημάνετε τις μονές χρησιμοποιώντας ένα γέμισμα. Και η συνάρτηση μπορεί να χρησιμοποιηθεί στη διπλανή στήλη και θα επιστρέψει TRUE ή FALSE ανάλογα με το αν η τιμή είναι ομοιόμορφη ή όχι. Εκείνοι. δεν θα μπορείτε να αλλάξετε το χρώμα πλήρωσης χρησιμοποιώντας μια συνάρτηση στο φύλλο εργασίας.

Δημιουργία μιας απλής συνάρτησης που ορίζεται από το χρήστη σε VBA

Ας δημιουργήσουμε μια απλή προσαρμοσμένη συνάρτηση στο VBA και ας δούμε πώς λειτουργεί όλο αυτό.

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

Αριθμοί συνάρτησης(Κείμενο ως συμβολοσειρά) Όσο Dim i Ως αποτέλεσμα Dim ως String Για i = 1 To Len(Text) If IsNumeric(Mid(Text, i, 1)) Τότε αποτέλεσμα = αποτέλεσμα & Mid(Text, i, 1 ) Επόμενοι αριθμοί = CLng(αποτέλεσμα) Τελική συνάρτηση

Για να λειτουργήσουν όλα για εσάς, πρέπει να το εισάγετε αυτόν τον κωδικόστη μονάδα βιβλίου. Εάν δεν ξέρετε πώς να το κάνετε αυτό, ξεκινήστε με το άρθρο Πώς να εγγράψετε μια μακροεντολή στο Excel.

Τώρα ας δούμε πώς λειτουργεί η συνάρτηση, ας προσπαθήσουμε να τη χρησιμοποιήσουμε σε ένα φύλλο:

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

  • Έγινε διαθέσιμο όπως κάθε άλλη ενσωματωμένη λειτουργία (πώς να δημιουργήσετε κρυφή λειτουργία, θα πούμε περαιτέρω).
  • Όταν εισάγετε το σύμβολο "=" και αρχίσετε να πληκτρολογείτε το όνομα της συνάρτησης, το Excel εμφανίζει όλες τις αντιστοιχίσεις και εμφανίζει όχι μόνο τις ενσωματωμένες λειτουργίες, αλλά και τις προσαρμοσμένες.

Ας αναλύσουμε τη συνάρτηση βήμα προς βήμα

Τώρα ας κάνουμε μια βαθιά βουτιά και ας δούμε πώς δημιουργήθηκε αυτό το χαρακτηριστικό. Η συνάρτηση ξεκινά με τη γραμμή

Αριθμοί συνάρτησης (Κείμενο ως συμβολοσειρά) όσο μήκος

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

  • Το όνομα της συνάρτησης δεν μπορεί να περιέχει κενά. Επίσης, δεν μπορείτε να καλέσετε μια συνάρτηση εάν συγκρούεται με ένα όνομα αναφοράς κελιού. Για παράδειγμα, δεν μπορείτε να ονομάσετε τη συνάρτηση ABC123 επειδή αυτό το όνομα αναφέρεται επίσης σε ένα κελί στο φύλλο εργασίας του Excel.
  • Δεν πρέπει να δώσετε στη συνάρτησή σας το ίδιο όνομα με μια υπάρχουσα συνάρτηση. Εάν το κάνετε αυτό, το Excel θα προτιμήσει την ενσωματωμένη συνάρτηση.
  • Μπορείτε να χρησιμοποιήσετε τον χαρακτήρα υπογράμμισης εάν θέλετε να διαχωρίσετε λέξεις. Για παράδειγμα, Σούμα σε περίεργοείναι έγκυρο όνομα.

Μετά το όνομα, τα ορίσματα συνάρτησης περιγράφονται σε παρένθεση. Παρόμοιο με το ενσωματωμένο Λειτουργίες Excel. Στην περίπτωσή μας, το μόνο επιχείρημα που χρησιμοποιείται είναι Κείμενο. Μετά το όνομα του επιχειρήματος που υποδείξαμε Ως String, αυτό σημαίνει ότι το επιχείρημά μας είναι τιμή κειμένουή μια αναφορά σε ένα κελί που περιέχει μια τιμή κειμένου. Εάν δεν καθορίσετε έναν τύπο δεδομένων, η VBA θα τον αντιμετωπίσει ως Παραλαγή(που σημαίνει ότι μπορείτε να χρησιμοποιήσετε οποιονδήποτε τύπο δεδομένων, η VBA θα το καταλάβει για εσάς).

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

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

Dim i As Long Dim αποτέλεσμα Ως String

Μεταβλητός Εγώθα το χρησιμοποιήσουμε για να απαριθμήσουμε χαρακτήρες. Μια μεταβλητή αποτέλεσμαγια να αποθηκεύσετε το ενδιάμεσο αποτέλεσμα μιας συνάρτησης.

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

Για i = 1 To Len (Κείμενο)

Το Len είναι μια συνάρτηση που καθορίζει τον αριθμό των χαρακτήρων.

Η κύρια γραμμή της συνάρτησης ελέγχει εάν ο επόμενος χαρακτήρας του κειμένου είναι αριθμός και, εάν ναι, η αποθήκευση του στη μεταβλητή αποτελέσματος

Αν IsNumeric(Mid(Text, i, 1)) Τότε αποτέλεσμα = αποτέλεσμα & Mid(Text, i, 1)

Για αυτό χρειαζόμαστε μια συνάρτηση Είναι Αριθμητικό- επιστρέφει Αληθήςαν το κείμενο είναι αριθμός και Ψευδήςσε διαφορετική περίπτωση.

Λειτουργία Στα μέσαπαίρνει από το όρισμα Κείμενο Εγώο χαρακτήρας (σημαίνει 1 , υποδεικνύει ότι η συνάρτηση Στα μέσαπαίρνει μόνο 1 χαρακτήρα)/

Λειτουργία Επόμενο- κλείνει τον βρόχο Γιαόλα είναι ξεκάθαρα εδώ.

Αριθμοί = CLng (αποτέλεσμα)

Με αυτή τη γραμμή μετατρέπουμε τη μεταβλητή κειμένου αποτέλεσμα, το οποίο περιέχει όλα τα ψηφία του ορίσματος Κείμενο, V αριθμητική αξία. Και λέμε ποιο αποτέλεσμα πρέπει να βγάζει η συνάρτησή μας Αριθμοί.

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

Ο παραπάνω κώδικας περιγράφει τα διάφορα μέρη μιας τυπικής συνάρτησης που ορίζεται από το χρήστη που δημιουργήθηκε σε VBA. Σε επόμενα άρθρα θα εξετάσουμε αυτά τα στοιχεία με περισσότερες λεπτομέρειες και επίσης θα εξετάσουμε διάφορους τρόπουςεκτέλεση Λειτουργίες VBAστο Excel.

Dim nResult As Integer

nMult1 = CInt(InputBox("Εισαγάγετε τον πρώτο αριθμό: ")) nMult2 = CInt(InputBox("Εισαγάγετε τον δεύτερο αριθμό: ")) nResult = fΠολλαπλασιάστε(nMult1, nMult2)

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd

4. Για να σχολιάσετε τον κώδικα AutoNew() , επισημάνετε όλο τον κώδικα για αυτήν τη διαδικασία (συμπεριλαμβανομένων των Public Sub AutoNew() και End Sub ) και κάντε κλικ στο κουμπί Comment Block στη γραμμή εργαλείων Επεξεργασία.

3.9. Ενσωματωμένες λειτουργίες γλώσσας VBA

3.9.1. Τι είναι οι ενσωματωμένες λειτουργίες

ΣΕ Η γλώσσα προγραμματισμού VBA παρέχει αρκετές δεκάδεςενσωματωμένες λειτουργίες. Είναι διαθέσιμα σε οποιοδήποτε πρόγραμμα στη γλώσσα VBA και δεν έχει σημασία σε ποιο προϊόν λογισμικού βρισκόμαστε - Excel, Word, Access ή, για παράδειγμα, AutoCAD. Χρησιμοποιούνται πολύ ενεργά και σε πολλές περιπτώσεις δεν μπορεί κανείς να τα κάνει χωρίς αυτά. Οι επαγγελματίες προγραμματιστές τα χρησιμοποιούν εντελώς αυτόματα, αλλά θα συμβούλευα τους απλούς χρήστες να αφιερώσουν αρκετές ώρες για να τους γνωρίσουν, γιατί χωρίς γνώση αυτών των λειτουργιών δεν θα μπορούν να δουλέψουν αποτελεσματικά στο VBA. Ένα επιπλέον επιχείρημα υπέρ της μελέτης τους είναι ότι ένα σχεδόν πανομοιότυπο σύνολο συναρτήσεων βρίσκεται στο συνηθισμένο Visual Basicκαι VBScript, και πολλές από αυτές τις συναρτήσεις με τα ίδια ονόματα και σύνταξη βρίσκονται σε άλλες γλώσσες προγραμματισμού - C++, Delphi, Java, JavaScript κ.λπ.

ΣΕ Στη βοήθεια VBA, οι ενσωματωμένες συναρτήσεις ομαδοποιούνται κατά γράμμα (Εικ. 3.2).

Πολλοί συμμετέχοντες στα μαθήματα έθεσαν την ερώτηση: υπάρχει βοήθεια σε αυτές τις λειτουργίες στα ρωσικά; Δυστυχώς, δεν μπόρεσα να βρω ένα τέτοιο πιστοποιητικό, οπότε θα προσπαθήσω να προσφέρω σύντομες πληροφορίεςσε αυτό το βιβλίο. Στη συνέχεια θα μιλήσουμε για τις περισσότερες από τις ενεργά χρησιμοποιούμενες συναρτήσεις της γλώσσας VBA (μαθηματικές συναρτήσεις όπως το συνημίτονο ή η εφαπτομένη, που είναι πρακτική δουλειάδεν χρησιμοποιούνται σχεδόν ποτέ και δεν θα εξετάσουμε τις οικονομικές λειτουργίες). Για να εξοικονομήσετε χώρο, δεν θα δοθεί η πλήρης σύνταξη των συναρτήσεων: το κύριο πράγμα είναι να κατανοήσετε τι κάνει κάθε συνάρτηση και σε ποιες περιπτώσεις μπορεί να χρησιμοποιηθεί.

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

Ρύζι. 3.2. Βοήθεια για ενσωματωμένες λειτουργίες

3.9.2. Λειτουργίες μετατροπής και ελέγχου τύπου δεδομένων

Στα προγράμματα VBA, είναι πολύ συνηθισμένο να μετατρέπονται τιμές από έναν τύπο δεδομένων σε έναν άλλο. Ακολουθούν μερικές τυπικές καταστάσεις όταν πρέπει να το κάνετε αυτό:

μετατροπή από τιμή συμβολοσειράς σε αριθμητική τιμή κατά τη λήψη μιας τιμής από τον χρήστη μέσω του InputBox() .

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

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

Τις περισσότερες φορές, για τη μετατροπή τύπων δεδομένων, χρησιμοποιούνται συναρτήσεις των οποίων το όνομα αποτελείται από το πρόθεμα "C" (από τη λέξη Convert) και το όνομα του τύπου δεδομένων. Η λίστα αυτών των συναρτήσεων είναι η εξής: CBool(), CByte(), CCur(), CDate(),

CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVERr().

Μπορείτε να δείτε τι συνέβη στο τέλος χρησιμοποιώντας τη συνάρτηση TypeName(), η οποία επιστρέφει το όνομα του χρησιμοποιούμενου τύπου δεδομένων, για παράδειγμα:

nVar1 = CInt(InputBox("Εισαγάγετε μια τιμή")) MsgBox TypeName(nVar1)

Σε αυτήν την περίπτωση, αυτή η συνάρτηση θα επιστρέψει "Integer" .

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

Str() - σας επιτρέπει να μετατρέψετε μια αριθμητική τιμή σε μια συμβολοσειρά. Κάνει σχεδόν το ίδιο πράγμα με το CStr(), αλλά εισάγει ένα κενό πριν από τους θετικούς αριθμούς.

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

IsNumeric() και IsDate() - ελέγξτε τις τιμές για συνέπεια, ώστε να μην υπάρχουν σφάλματα κατά τη μετατροπή. Για να ελέγξετε τη συμμόρφωση με ειδικές τιμές, μπορείτε να χρησιμοποιήσετε τις συναρτήσεις IsArray(), IsEmpty(),

IsError(), IsMissing(), IsNull() και IsObject() . Όλες αυτές οι λειτουργίες επιστρέφουν

Σωστό ή Λάθος ανάλογα με τα αποτελέσματα του ελέγχου της τιμής που τους μεταβιβάστηκε.

Hex() και Oct() - Μετατροπή δεκαδικών δεδομένων σε αναπαράσταση συμβολοσειράς δεκαεξαδικών και οκταδικών τιμών.

3.9.3. Συναρτήσεις συμβολοσειράς

Αυτές είναι οι πιο συχνά χρησιμοποιούμενες λειτουργίες. Χρειάζονται συνεχώς και πρέπει να τα γνωρίζετε πολύ καλά.

Asc() - αυτή η συνάρτηση σας επιτρέπει να επιστρέψετε τον αριθμητικό κώδικα για τον χαρακτήρα που περάσατε. Για παράδειγμα, το Asc("D") θα επιστρέψει 68. Αυτή η συνάρτηση είναι χρήσιμη για τον προσδιορισμό του επόμενου ή του προηγούμενου γράμματος. Συνήθως χρησιμοποιείται σε συνδυασμό με τη συνάρτηση Chr(), η οποία εκτελεί την αντίστροφη πράξη - επιστρέφει τον χαρακτήρα σύμφωνα με τον αριθμητικό του κώδικα. Για παράδειγμα, αυτός ο κώδικας στο Excel σάς επιτρέπει να γράφετε διαδοχικά τα γράμματα του ρωσικού αλφαβήτου από το A έως το U στα κελιά A1 έως A20:

Dim n, nCharCode ως ακέραιος αριθμός n = 1

nCharCode = Asc("A") Do while n<= 20

ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)

Κατασκευές σύνταξης και προγραμματισμού VBA

nCharCode = nCharCode + 1 Loop

Παραλλαγές αυτής της συνάρτησης είναι η AscB() και η AscW() . Η AscB() επιστρέφει μόνο το πρώτο byte του αριθμητικού κώδικα για τον χαρακτήρα, ενώ η AscW() επιστρέφει τον κωδικό Unicode για τον χαρακτήρα.

Chr() - επιστρέφει έναν χαρακτήρα από τον αριθμητικό του κώδικα. Εκτός από τη χρήση σε συνδυασμό με τη συνάρτηση Asc() (δείτε το προηγούμενο παράδειγμα), δεν μπορείτε να το κάνετε χωρίς αυτήν σε μια ακόμη περίπτωση: όταν πρέπει να εξάγετε έναν χαρακτήρα υπηρεσίας. Για παράδειγμα, πρέπει να πληκτρολογήσουμε την τιμή "Gazprom" (σε εισαγωγικά) στο Word. Το απόσπασμα είναι ένας χαρακτήρας υπηρεσίας και μια προσπάθεια χρήσης μιας συμβολοσειράς όπως:

Selection.Text = ""Gazprom""

θα οδηγήσει σε συντακτικό σφάλμα. Και κάπως έτσι όλα θα πάνε καλά:

Selection.Text = Chr(34) & "Gazprom" & Chr(34)

Υπάρχουν παραλλαγές αυτής της συνάρτησης - ChrB() και ChrW(). Λειτουργούν παρόμοια με τις ίδιες επιλογές για τη συνάρτηση Asc().

Οι InStr() και InStrRev() είναι μερικές από τις πιο δημοφιλείς συναρτήσεις. Σας επιτρέπει να εντοπίσετε μια ακολουθία χαρακτήρων στο σώμα μιας μεταβλητής συμβολοσειράς και να επιστρέψετε τη θέση της. Εάν η ακολουθία δεν βρεθεί, τότε επιστρέφεται το 0. Η συνάρτηση InStr() αναζητά από την αρχή της συμβολοσειράς και η InStrRev() από το τέλος.

Left() , Right() , Mid() - σας επιτρέπει να λαμβάνετε τον αριθμό των χαρακτήρων που καθορίζετε από μια υπάρχουσα μεταβλητή συμβολοσειράς στα αριστερά, δεξιά ή στη μέση, αντίστοιχα.

Len() - επιστρέφει τον αριθμό των χαρακτήρων στη συμβολοσειρά (μήκος συμβολοσειράς). Συχνά χρησιμοποιείται με βρόχους, λειτουργίες αντικατάστασης κ.λπ.

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

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

LTrim() , RTrim() , Trim() - αφαιρέστε κενά από αριστερά, δεξιά ή και τα δύο αριστερά και δεξιά, αντίστοιχα.

Replace() - αντικαθιστά μια ακολουθία χαρακτήρων με μια άλλη σε μια συμβολοσειρά.

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

Λειτουργία-διαδικασίαείναι ένας ειδικός τύπος διαδικασίας VBA που επιστρέφει ένα αποτέλεσμα. Οι συναρτήσεις διαδικασίας που ορίζονται από το χρήστη, όπως οι ενσωματωμένες συναρτήσεις VBA, μπορούν να έχουν προαιρετικά και ονομασμένα ορίσματα. Δεν μπορείτε να χρησιμοποιήσετε μια συσκευή εγγραφής μακροεντολών για την εγγραφή μιας συνάρτησης διαδικασίας, αν και μπορείτε να επεξεργαστείτε μια μακροεντολή που έχει εγγραφεί από τη συσκευή εγγραφής και να τη μετατρέψετε σε λειτουργία διαδικασίας.

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

Σύνταξη:

Όνομα συνάρτησης()
"Δηλώσεις VBA
Λειτουργία τερματισμού

Η συνάρτηση είναι μια λέξη-κλειδί που δηλώνει την έναρξη μιας συνάρτησης.

Όνομα - όνομα συνάρτησης. Τα ονόματα συναρτήσεων ακολουθούν τους ίδιους κανόνες με άλλα ονόματα αναγνωριστικών VBA.

Arglist - λίστα ορισμάτων για αυτήν τη συνάρτηση, προαιρετικό στοιχείο.

Τύπος - οποιοσδήποτε τύπος επιστρεφόμενης τιμής συνάρτησης. Εάν ο τύπος δεν έχει οριστεί, το αποτέλεσμα που επιστρέφεται από τη συνάρτηση διαδικασίας είναι τύπου Variant.

Όνομα = έκφραση είναι μια εκχώρηση συνάρτησης που λέει στη VBA ποια τιμή πρέπει να επιστρέψει η συνάρτηση, ένα προαιρετικό στοιχείο. Ωστόσο, θα πρέπει πάντα να συμπεριλάβετε έναν τελεστή ανάθεσης στις λειτουργίες διαδικασίας.

End Function - λέξεις-κλειδιά που τελειώνουν μια συνάρτηση.


Ακόμα κι αν η συνάρτηση δεν έχει ορίσματα (για παράδειγμα, Now, Date), πρέπει να χρησιμοποιήσετε παρενθέσεις στη δήλωση συνάρτησης.

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


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



Χωρίς τη χρήση της συνάρτησης, η λίστα θα μοιάζει με αυτό:



Από αυτό το απλό παράδειγμα, νομίζω ότι η κύρια ιδέα της χρήσης συναρτήσεων διαδικασίας είναι σαφής - η βελτίωση της αναγνωσιμότητας του κώδικα προγράμματος και η μείωσή του (με άλλα λόγια, μια συνάρτηση διαδικασίας γράφεται όταν το ίδιο "κομμάτι" κώδικα εμφανίζεται περισσότερα από 2 -3 φορές στον κωδικό προγράμματος). Πράγματι, αν η συνάρτηση διαδικασίας μας δεν αποτελούνταν από μία γραμμή, αλλά, ας πούμε, από 10 γραμμές. και ο κώδικας προγράμματος θα χρησιμοποιούσε αυτή τη λειτουργία διαδικασίας 5 φορές, τότε η συνολική λίστα προγράμματος θα ήταν 38 γραμμές μικρότερη.


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

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

Μια λίστα με αυτές τις λειτουργίες μπορεί να προβληθεί στον επεξεργαστή VBA:

  • Ανοίξτε ένα βιβλίο εργασίας του Excel και εκκινήστε το πρόγραμμα επεξεργασίας VBA (κάντε κλικ εδώ Alt+F11), και μετά κάντε κλικ F2.
  • Επιλέξτε μια βιβλιοθήκη από την αναπτυσσόμενη λίστα στο επάνω αριστερό μέρος της οθόνης VBA.
  • Εμφανίζεται μια λίστα με ενσωματωμένες κλάσεις και συναρτήσεις VBA. Κάντε κλικ στο όνομα της συνάρτησης για να εμφανιστεί μια σύντομη περιγραφή στο κάτω μέρος του παραθύρου. Πάτημα F1θα ανοίξει την ηλεκτρονική σελίδα βοήθειας για αυτήν τη λειτουργία.

Επιπλέον, μια πλήρης λίστα των ενσωματωμένων συναρτήσεων VBA με παραδείγματα μπορείτε να βρείτε στον ιστότοπο του Κέντρου προγραμματιστών της Visual Basic.

Προσαρμοσμένη λειτουργία και δευτερεύουσες διαδικασίες στο VBA

Στο Excel Visual Basic, ένα σύνολο εντολών που εκτελούν μια συγκεκριμένη εργασία τοποθετείται σε μια διαδικασία Λειτουργία(Λειτουργία) ή Υπο(Υπορουτίνα). Η κύρια διαφορά μεταξύ των διαδικασιών ΛειτουργίαΚαι Υποείναι αυτή η διαδικασία Λειτουργίαεπιστρέφει αποτέλεσμα, διαδικασία Υπο- Οχι.

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

Επιχειρήματα

Διάφορα δεδομένα μπορούν να μεταβιβαστούν σε διαδικασίες VBA χρησιμοποιώντας ορίσματα. Η λίστα των ορισμάτων καθορίζεται όταν δηλώνεται η διαδικασία. Για παράδειγμα, η διαδικασία Υποστο VBA, προσθέτει τον καθορισμένο ακέραιο (Integer) σε κάθε κελί στην επιλεγμένη περιοχή. Μπορείτε να περάσετε αυτόν τον αριθμό στη διαδικασία χρησιμοποιώντας ένα όρισμα, όπως αυτό:

Sub AddToCells(i As Integer) ... End Sub

Να γνωρίζετε ότι έχετε επιχειρήματα στις διαδικασίες ΛειτουργίαΚαι Υποστο VBA είναι προαιρετικό. Ορισμένες διαδικασίες δεν απαιτούν επιχειρήματα.

Προαιρετικά επιχειρήματα

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

Επιστρέφοντας στο προηγούμενο παράδειγμα, για να κάνετε ένα ακέραιο όρισμα σε μια συνάρτηση προαιρετικό, θα το δηλώσετε ως εξής:

Sub AddToCells (Προαιρετικό i As Integer = 0)

Σε αυτή την περίπτωση, το όρισμα ακέραιος Εγώη προεπιλογή θα είναι 0.

Μπορεί να υπάρχουν πολλά προαιρετικά ορίσματα σε μια διαδικασία· όλα παρατίθενται στο τέλος της λίστας ορισμάτων.

Διαβίβαση ορισμάτων κατά τιμή και με αναφορά

Τα επιχειρήματα στο VBA μπορούν να περάσουν σε μια διαδικασία με δύο τρόπους:

  • ByVal– περνώντας ένα όρισμα κατά τιμή. Αυτό σημαίνει ότι μόνο η τιμή (δηλαδή, ένα αντίγραφο του ορίσματος) μεταβιβάζεται στη διαδικασία και επομένως τυχόν αλλαγές που γίνονται στο όρισμα εντός της διαδικασίας θα χαθούν κατά την έξοδό του.
  • ByRef– μετάδοση ενός επιχειρήματος με αναφορά. Δηλαδή, η διαδικασία μεταβιβάζεται στην πραγματική διεύθυνση του ορίσματος στη μνήμη. Οποιεσδήποτε αλλαγές γίνονται σε ένα όρισμα σε μια διαδικασία θα αποθηκευτούν όταν η διαδικασία τερματιστεί.

Χρήση λέξεων-κλειδιών ByValή ByRefΣε μια δήλωση διαδικασίας, μπορείτε να καθορίσετε ακριβώς πώς μεταβιβάζεται το όρισμα στη διαδικασία. Αυτό φαίνεται παρακάτω με παραδείγματα:

Θυμηθείτε ότι τα ορίσματα στο VBA μεταβιβάζονται με αναφορά από προεπιλογή. Με άλλα λόγια, εάν δεν χρησιμοποιούνται λέξεις-κλειδιά ByValή ByRef, τότε το όρισμα θα περάσει με αναφορά.

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

Διαδικασία VBA "Λειτουργία"

Ο επεξεργαστής VBA αναγνωρίζει τη διαδικασία Λειτουργία

Λειτουργία...Τέλος Λειτουργία

Όπως αναφέρθηκε προηγουμένως, η διαδικασία Λειτουργίασε VBA (σε αντίθεση με Υπο), επιστρέφει μια τιμή. Οι ακόλουθοι κανόνες ισχύουν για τις επιστρεφόμενες τιμές:

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

Αυτό φαίνεται τέλεια στο παρακάτω παράδειγμα.

Παράδειγμα διαδικασίας VBA "Συνάρτηση": Εκτέλεση μαθηματικής πράξης με 3 αριθμούς

Παρακάτω είναι ένα παράδειγμα κώδικα διαδικασίας VBA Λειτουργία, το οποίο παίρνει τρία ορίσματα τύπου Διπλό(αριθμοί κινητής υποδιαστολής διπλής ακρίβειας). Ως αποτέλεσμα, η διαδικασία επιστρέφει έναν άλλο αριθμό του τύπου Διπλό, ίσο με το άθροισμα των δύο πρώτων ορισμάτων μείον το τρίτο όρισμα:

Συνάρτηση SumMinus(dNum1 As Double, dNum2 as Double, dNum3 as Double) As Double SumMinus = dNum1 + dNum2 - dNum3 Τελική συνάρτηση

Αυτή είναι μια πολύ απλή διαδικασία VBA Λειτουργίαεπεξηγεί πώς τα δεδομένα μεταβιβάζονται σε μια διαδικασία μέσω ορισμάτων. Μπορείτε να δείτε ότι ο τύπος δεδομένων που επιστρέφεται από τη διαδικασία ορίζεται ως Διπλό(τα λόγια το λένε Ως Διπλόμετά τη λίστα των επιχειρημάτων). Αυτό το παράδειγμα δείχνει επίσης πώς το αποτέλεσμα της διαδικασίας Λειτουργίααποθηκεύεται σε μια μεταβλητή με το ίδιο όνομα με το όνομα της διαδικασίας.

Κλήση της διαδικασίας VBA "Λειτουργία"

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

Κλήση της διαδικασίας VBA "Function" από άλλη διαδικασία

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

Sub main() Dim total ως Double total = SumMinus(5, 4, 3) End Sub

Κλήση μιας διαδικασίας VBA "Function" από ένα φύλλο εργασίας

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

ΆθροισμαΜείον(10, 5, 2)

Διαδικασία VBA "Sub"

Ο επεξεργαστής VBA καταλαβαίνει ότι υπάρχει μια διαδικασία μπροστά του Υπο, όταν συναντά μια ομάδα εντολών που περικλείονται μεταξύ των ακόλουθων εντολών ανοίγματος και κλεισίματος:

Υπο...Τέλος Υπ

Διαδικασία VBA "Sub": Παράδειγμα 1. Στοίχιση στο κέντρο και αλλαγή μεγέθους γραμματοσειράς σε μια επιλεγμένη περιοχή κελιών

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

Sub Format_Center_And_Sized(Προαιρετικό iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

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

Αυτό το παράδειγμα χρησιμοποιεί επίσης ένα όρισμα Προαιρετικό iFontSize. Αν το επιχείρημα iFontSizeδεν πέρασε στη διαδικασία Υπο, τότε η προεπιλεγμένη τιμή του λαμβάνεται ως 10. Ωστόσο, εάν το όρισμα iFontSizeπέρασε στη διαδικασία Υπο, τότε το μέγεθος γραμματοσειράς που καθορίζεται από τον χρήστη θα οριστεί στην επιλεγμένη περιοχή κελιών.

Διαδικασία VBA "Sub": Παράδειγμα 2. Στοίχιση στο κέντρο και εφαρμογή έντονης γραφής στη γραμματοσειρά σε μια επιλεγμένη περιοχή κελιών

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

Sub Format_Center_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Κλήση της διαδικασίας "Sub" στο Excel VBA

Κλήση της διαδικασίας VBA "Sub" από άλλη διαδικασία

Για να καλέσετε μια διαδικασία VBA Υποαπό μια άλλη διαδικασία VBA, πρέπει να γράψετε τη λέξη-κλειδί Κλήση, όνομα διαδικασίας Υποκαι μετά σε παρένθεση τα επιχειρήματα της διαδικασίας. Αυτό φαίνεται στο παρακάτω παράδειγμα:

Sub main() Call Format_Centred_And_Sized(20) End Sub

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

Sub main() Call Format_Centred_And_Sized(arg1, arg2, ...) End Sub

Κλήση της διαδικασίας VBA "Sub" από ένα φύλλο εργασίας

Διαδικασία Υποδεν μπορεί να εισαχθεί απευθείας σε ένα κελί φύλλου εργασίας του Excel, όπως μπορεί να γίνει με μια διαδικασία Λειτουργία, γιατί η διαδικασία Υποδεν επιστρέφει τιμή. Ωστόσο, οι διαδικασίες Υπο, τα οποία δεν έχουν ορίσματα και δηλώνονται ως Δημόσιο(όπως θα φανεί αργότερα) θα είναι διαθέσιμο στους χρήστες του φύλλου εργασίας. Έτσι, εάν οι απλές διαδικασίες που συζητήθηκαν παραπάνω Υποεισάγεται σε μια λειτουργική μονάδα στο πρόγραμμα επεξεργασίας της Visual Basic και, στη συνέχεια, η διαδικασία Format_Centered_And_Boldθα είναι διαθέσιμο για χρήση στο φύλλο εργασίας του Excel και τη διαδικασία Μορφή_Κεντροποιημένο_και_Μέγεθος– δεν θα είναι διαθέσιμο γιατί έχει επιχειρήματα.

Ακολουθεί ένας απλός τρόπος εκτέλεσης (ή εκτέλεσης) της διαδικασίας Υπο, διαθέσιμο από το φύλλο εργασίας:

  • Κάντε κλικ Alt+F8(πατήστε το πλήκτρο Altκαι, ενώ το κρατάτε πατημένο, πατήστε το πλήκτρο F8).
  • Στη λίστα με τις μακροεντολές που εμφανίζεται, επιλέξτε αυτή που θέλετε να εκτελέσετε.
  • Κάντε κλικ Εκτέλεση(Τρέξιμο)

Για να εκτελέσετε τη διαδικασία Υπογρήγορα και εύκολα, μπορείτε να του αντιστοιχίσετε έναν συνδυασμό πλήκτρων. Για αυτό:

  • Κάντε κλικ Alt+F8.
  • Στη λίστα με τις μακροεντολές που εμφανίζεται, επιλέξτε αυτήν στην οποία θέλετε να αντιστοιχίσετε μια συντόμευση πληκτρολογίου.
  • Κάντε κλικ Επιλογές(Επιλογές) και εισαγάγετε τη συντόμευση πληκτρολογίου στο παράθυρο διαλόγου που εμφανίζεται.
  • Κάντε κλικ Εντάξεικαι κλείστε το παράθυρο διαλόγου Μακροεντολή(Μακροεντολή).

Προσοχή:Όταν εκχωρείτε μια συντόμευση πληκτρολογίου σε μια μακροεντολή, βεβαιωθείτε ότι δεν χρησιμοποιείται όπως η τυπική στο Excel (για παράδειγμα, Ctrl+C). Εάν επιλέξετε μια υπάρχουσα συντόμευση πληκτρολογίου, θα αντιστοιχιστεί εκ νέου στη μακροεντολή και ως αποτέλεσμα, ο χρήστης μπορεί να ενεργοποιήσει κατά λάθος τη μακροεντολή.

Πεδίο εφαρμογής της διαδικασίας VBA

Το μέρος 2 αυτού του σεμιναρίου συζήτησε το θέμα του εύρους των μεταβλητών και των σταθερών και τον ρόλο των λέξεων-κλειδιών ΔημόσιοΚαι Ιδιωτικός. Αυτές οι λέξεις-κλειδιά μπορούν επίσης να χρησιμοποιηθούν σε σχέση με διαδικασίες VBA:

Θυμηθείτε ότι εάν πριν δηλώσετε μια διαδικασία VBA Λειτουργίαή Υπολέξη-κλειδί δεν έχει εισαχθεί, τότε ορίζεται η προεπιλεγμένη ιδιότητα για τη διαδικασία Δημόσιο(δηλαδή, θα είναι διαθέσιμο παντού σε ένα δεδομένο έργο VBA). Αυτό διαφέρει από τη δήλωση μεταβλητών, οι οποίες από προεπιλογή είναι Ιδιωτικός.

Πρόωρη έξοδος από τις διαδικασίες VBA "Function" και "Sub"

Εάν πρέπει να τερματίσετε την εκτέλεση μιας διαδικασίας VBA Λειτουργίαή Υπο, χωρίς να περιμένουμε τη φυσική του κατάληξη, τότε υπάρχουν τελεστές για αυτό Λειτουργία εξόδουΚαι Έξοδος υπο. Η χρήση αυτών των τελεστών φαίνεται παρακάτω χρησιμοποιώντας ένα απλό παράδειγμα διαδικασίας Λειτουργία, η οποία αναμένει να λάβει ένα θετικό επιχείρημα για την εκτέλεση περαιτέρω πράξεων. Εάν μεταβιβαστεί μια μη θετική τιμή στη διαδικασία, τότε δεν μπορούν να εκτελεστούν περαιτέρω λειτουργίες, επομένως στον χρήστη πρέπει να εμφανιστεί ένα μήνυμα σφάλματος και η διαδικασία πρέπει να τερματιστεί αμέσως:

Συνάρτηση VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Εάν sVAT_Rate<= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received " & sVAT_Rate Exit Function End If ... End Function

Σημειώστε ότι πριν ολοκληρώσετε τη διαδικασία ΛειτουργίαΦΠΑ_Ποσό, μια ενσωματωμένη συνάρτηση VBA εισάγεται στον κώδικα MsgBox, το οποίο εμφανίζει στον χρήστη ένα αναδυόμενο παράθυρο προειδοποίησης.

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

Μαθηματικοί τελεστές

Οι βασικοί μαθηματικοί τελεστές VBA παρατίθενται στον παρακάτω πίνακα.

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

Τελεστές συμβολοσειρών

Ο κύριος τελεστής συμβολοσειράς στο Excel VBA είναι ο τελεστής συνένωσης & (συγχώνευση):

Χειριστές σύγκρισης

Οι τελεστές σύγκρισης χρησιμοποιούνται για τη σύγκριση δύο αριθμών ή συμβολοσειρών και την επιστροφή μιας δυαδικής τιμής όπως Boolean(Σωστό ή λάθος). Οι κύριοι τελεστές σύγκρισης του Excel VBA παρατίθενται σε αυτόν τον πίνακα:

Λογικοί τελεστές

Οι λογικοί τελεστές, όπως και οι τελεστές σύγκρισης, επιστρέφουν μια Boolean τιμή τύπου Boolean(Σωστό ή λάθος). Οι βασικοί λογικοί τελεστές VBA του Excel παρατίθενται στον παρακάτω πίνακα:

Ο παραπάνω πίνακας δεν παραθέτει όλους τους Boolean τελεστές που είναι διαθέσιμοι στο VBA. Μπορείτε να βρείτε μια πλήρη λίστα λογικών τελεστών στο Κέντρο προγραμματιστών της Visual Basic.

Ενσωματωμένες λειτουργίες

Υπάρχουν πολλές ενσωματωμένες λειτουργίες διαθέσιμες στο VBA που μπορούν να χρησιμοποιηθούν κατά τη σύνταξη κώδικα. Παρακάτω είναι μερικά από τα πιο συχνά χρησιμοποιούμενα:

Λειτουργία Δράση
Abs Επιστρέφει την απόλυτη τιμή ενός δεδομένου αριθμού.
  • Κοιλιακοί (-20)επιστρέφει την τιμή 20.
  • κοιλιακοί (20)επιστρέφει την τιμή 20.
Ο Χρ Επιστρέφει τον χαρακτήρα ANSI που αντιστοιχεί στην αριθμητική τιμή της παραμέτρου.
  • Chr(10)επιστρέφει διάλειμμα γραμμής?
  • Chr(97)επιστρέφει χαρακτήρα ένα.
Ημερομηνία Επιστρέφει την τρέχουσα ημερομηνία συστήματος.
ΗμερομηνίαΠροσθήκη Προσθέτει ένα συγκεκριμένο χρονικό διάστημα σε μια δεδομένη ημερομηνία. Σύνταξη συνάρτησης:

ΗμερομηνίαΠροσθήκη( διάστημα , αριθμός , ημερομηνία )

Πού είναι το επιχείρημα διάστημαορίζει τον τύπο του χρονικού διαστήματος που προστίθεται σε ένα δεδομένο ημερομηνίαστο ποσό που καθορίζεται στο επιχείρημα αριθμός .

Διαφωνία διάστημαμπορεί να λάβει μία από τις ακόλουθες τιμές:

  • DateAdd("d", 32, "01/01/2015")προσθέτει 32 ημέρες στην ημερομηνία 01/01/2015 και έτσι επιστρέφει την ημερομηνία 02/02/2015.
  • DateAdd(“ww”, 36, “01/01/2015”)προσθέτει 36 εβδομάδες στην ημερομηνία 01/01/2015 και επιστρέφει την ημερομηνία 09/09/2015.
DateDiff Υπολογίζει τον αριθμό των καθορισμένων χρονικών διαστημάτων μεταξύ δύο δεδομένων ημερομηνιών.
  • DateDiff("d", "01/01/2015", "02/02/2015")υπολογίζει τον αριθμό των ημερών μεταξύ των ημερομηνιών 01/01/2015 και 02/02/2015, επιστρέφοντας το αποτέλεσμα 32.
  • DateDiff ("ww", "01/01/2015", "03/03/2016")υπολογίζει τον αριθμό των εβδομάδων μεταξύ των ημερομηνιών 01/01/2015 και 03/03/2016, επιστρέφοντας το αποτέλεσμα 61.
Ημέρα Επιστρέφει έναν ακέραιο αριθμό που αντιστοιχεί στην ημέρα του μήνα στη δεδομένη ημερομηνία.

Παράδειγμα: Ημέρα (“29/01/2015”)επιστρέφει τον αριθμό 29.

Ωρα Επιστρέφει έναν ακέραιο αριθμό που αντιστοιχεί στον αριθμό των ωρών σε δεδομένο χρόνο.

Παράδειγμα: Ώρα (“22:45:00”)επιστρέφει τον αριθμό 22.

InStr Λαμβάνει έναν ακέραιο και δύο συμβολοσειρές ως ορίσματα. Επιστρέφει τη θέση εμφάνισης της δεύτερης συμβολοσειράς μέσα στην πρώτη, ξεκινώντας την αναζήτηση στη θέση που καθορίζεται από τον ακέραιο.
  • InStr(1, "Εδώ είναι η λέξη που ψάχνετε", "λέξη")επιστρέφει τον αριθμό 13.
  • InStr(14, "Εδώ είναι η λέξη αναζήτησης και εδώ είναι μια άλλη λέξη αναζήτησης", "λέξη")επιστρέφει τον αριθμό 38.

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

Int Επιστρέφει το ακέραιο μέρος του δεδομένου αριθμού.

Παράδειγμα: Int(5.79)επιστρέφει το αποτέλεσμα 5.

Isdate Επιστροφές Αληθήςεάν η δεδομένη τιμή είναι ημερομηνία ή Ψευδής– εάν δεν είναι ημερομηνία.
  • IsDate (“01/01/2015”)επιστρέφει Αληθής;
  • IsDate(100)επιστρέφει Ψευδής.
IsError Επιστροφές Αληθής, εάν η δεδομένη τιμή είναι σφάλμα ή Ψευδής– εάν δεν πρόκειται για λάθος.
Λείπει Το όνομα ενός ορίσματος προαιρετικής διαδικασίας μεταβιβάζεται ως όρισμα στη συνάρτηση. Λείπειεπιστρέφει Αληθής, εάν δεν μεταβιβαστεί τιμή για το εν λόγω όρισμα διαδικασίας.
Είναι Αριθμητικό Επιστροφές Αληθήςεάν η δεδομένη τιμή μπορεί να θεωρηθεί ως αριθμός, διαφορετικά επιστρέφει Ψευδής.
Αριστερά Επιστρέφει τον καθορισμένο αριθμό χαρακτήρων από την αρχή της συμβολοσειράς που πέρασε. Η σύνταξη της συνάρτησης είναι η εξής:

Αριστερά( γραμμή , μήκος )

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

  • Αριστερά (“abvgdezziklmn”, 4)επιστρέφει τη συμβολοσειρά "abvg";
  • Αριστερά (“abvgdezziklmn”, 1)επιστρέφει τη συμβολοσειρά "a".
Len Επιστρέφει τον αριθμό των χαρακτήρων σε μια συμβολοσειρά.

Παράδειγμα: Len ("abvgdez")επιστρέφει τον αριθμό 7.

Μήνας Επιστρέφει έναν ακέραιο αριθμό που αντιστοιχεί στον μήνα στη δεδομένη ημερομηνία.

Παράδειγμα: Μήνας (“01/29/2015”)επιστρέφει την τιμή 1.

Στα μέσα Επιστρέφει έναν καθορισμένο αριθμό χαρακτήρων από το μέσο της περασμένης συμβολοσειράς. Σύνταξη συνάρτησης:

Στα μέσα( γραμμή , Αρχή , μήκος )

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

  • Mid(“abvgdezziklmn”, 4, 5)επιστρέφει τη συμβολοσειρά "where";
  • Mid(“abvgdezziklmn”, 10, 2)επιστρέφει τη συμβολοσειρά "cl".
Λεπτό Επιστρέφει έναν ακέραιο αριθμό που αντιστοιχεί στον αριθμό των λεπτών σε έναν δεδομένο χρόνο. Παράδειγμα: Λεπτό (“22:45:15”)επιστρέφει την τιμή 45.
Τώρα Επιστρέφει την τρέχουσα ημερομηνία και ώρα συστήματος.
σωστά Επιστρέφει τον καθορισμένο αριθμό χαρακτήρων από το τέλος της συμβολοσειράς που πέρασε. Σύνταξη συνάρτησης:

Σωστά( γραμμή , μήκος )

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

  • Δεξιά (“abvgdezziklmn”, 4)επιστρέφει τη συμβολοσειρά "clmn"?
  • Δεξιά (“abvgdezziklmn”, 1)επιστρέφει τη συμβολοσειρά "n".
Δεύτερος Επιστρέφει έναν ακέραιο αριθμό που αντιστοιχεί στον αριθμό των δευτερολέπτων στον δεδομένο χρόνο.

Παράδειγμα: Δεύτερο (“22:45:15”)επιστρέφει την τιμή 15.

Τμ Επιστρέφει την τετραγωνική ρίζα της αριθμητικής τιμής που μεταβιβάστηκε ως όρισμα.
  • Sqr(4)επιστρέφει την τιμή 2;
  • Sqr(16)επιστρέφει την τιμή 4.
χρόνος Επιστρέφει την τρέχουσα ώρα συστήματος.
Αναποδογυρισμένο Επιστρέφει τον εκθέτη της διάστασης του καθορισμένου πίνακα.

Σημείωση:Για πολυδιάστατους πίνακες, ένα προαιρετικό όρισμα μπορεί να καθορίσει το ευρετήριο της οποίας η διάσταση θα πρέπει να επιστραφεί. Εάν δεν έχει καθοριστεί, η προεπιλογή είναι 1.