Χρήση Εύρεση και αντικατάσταση στο Excel VBA

Αυτό το σεμινάριο θα δείξει πώς να χρησιμοποιήσετε τις μεθόδους Εύρεση και αντικατάσταση στο Excel VBA.

VBA Find

Το Excel διαθέτει εξαιρετικό ενσωματωμένο Εύρημα και Εύρεση & Αντικατάσταση εργαλεία.

Μπορούν να ενεργοποιηθούν με τις συντομεύσεις CTRL + F (Εύρεση) ή CTRL + Η (Αντικατάσταση) ή μέσω της Κορδέλας: Αρχική σελίδα> Επεξεργασία> Εύρεση και επιλογή.

Κάνοντας κλικ Επιλογές, μπορείτε να δείτε επιλογές σύνθετης αναζήτησης:

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

Βρείτε Παράδειγμα VBA

Για να επιδείξουμε τη λειτουργία Εύρεση, δημιουργήσαμε το ακόλουθο σύνολο δεδομένων στο Sheet1.

Εάν θέλετε να ακολουθήσετε, εισαγάγετε τα δεδομένα στο δικό σας βιβλίο εργασίας.

<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>

VBA Εύρεση χωρίς προαιρετικές παραμέτρους

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

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

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

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

Απλό Βρείτε Παράδειγμα

Ας δούμε ένα απλό παράδειγμα εύρεσης:

123456789 Sub TestFind ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("υπάλληλος")MsgBox MyRange.AddressMsgBox MyRange.ColumnMsgBox MyRange.RowΤέλος υπο

Αυτός ο κωδικός αναζητά "υπάλληλος" στο Χρησιμοποιημένο εύρος φύλλου 1. Εάν βρει "υπάλληλο", θα αντιστοιχίσει το πρώτο εύρος που βρέθηκε στη μεταβλητή εύρους MyRange.

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

Σε αυτό το παράδειγμα, χρησιμοποιούνται οι προεπιλεγμένες ρυθμίσεις εύρεσης (υποθέτοντας ότι δεν έχουν αλλάξει στο παράθυρο εύρεσης του Excel):

  • Το κείμενο αναζήτησης ταιριάζει εν μέρει με την τιμή κελιού (δεν απαιτείται ακριβής αντιστοίχιση κελιού)
  • Η αναζήτηση δεν κάνει διάκριση πεζών -κεφαλαίων.
  • Βρείτε αναζητήσεις μόνο σε ένα φύλλο εργασίας

Αυτές οι ρυθμίσεις μπορούν να αλλάξουν με διάφορες προαιρετικές παραμέτρους (συζητούνται παρακάτω).

Εύρεση σημειώσεων μεθόδου

  • Το Find δεν επιλέγει το κελί όπου βρίσκεται το κείμενο. Προσδιορίζει μόνο το εύρος που βρέθηκε, το οποίο μπορείτε να χειριστείτε στον κώδικά σας.
  • Η μέθοδος Εύρεση θα εντοπίσει μόνο την πρώτη παρουσία που βρέθηκε.
  • Μπορείτε να χρησιμοποιήσετε μπαλαντέρ (*) π.χ. αναζητήστε ‘E*’

Δεν βρέθηκε τίποτα

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

Ευτυχώς, μπορείτε να δοκιμάσετε για ένα κενό αντικείμενο εντός VBA χρησιμοποιώντας το Is Operator:

1 Αν όχι το MyRange δεν είναι τίποτα τότε

Προσθέτοντας τον κώδικα στο προηγούμενο παράδειγμα:

12345678910111213 Sub TestFind ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("υπάλληλος")Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressMsgBox MyRange.ColumnMsgBox MyRange.RowΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανΤέλος υπο

Εύρεση παραμέτρων

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

Παράμετρος Τύπος Περιγραφή Αξίες
Τι Απαιτείται Η τιμή για αναζήτηση Οποιοσδήποτε τύπος δεδομένων, όπως συμβολοσειρά ή αριθμητικός αριθμός
Μετά Προαιρετικός Αναφορά με ένα κελί για να ξεκινήσετε την αναζήτησή σας Διεύθυνση κυψέλης
Κοιτάξτε Προαιρετικός Χρησιμοποιήστε τύπους, τιμές, σχόλια για αναζήτηση xlValues, xlFormulas, xlComments
Κοιτάξτε Προαιρετικός Αντιστοιχίστε μέρος ή ολόκληρο ένα κελί xlWhole, xlPart
SearchOrder Προαιρετικός Η εντολή για αναζήτηση σε γραμμές ή στήλες xlByRows, xlByColummns
SearchDirection Προαιρετικός Κατεύθυνση για αναζήτηση προς τα εμπρός - προς τα εμπρός ή προς τα πίσω xlΕπόμενο, xlΠροηγούμενο
MatchCase Προαιρετικός Η αναζήτηση έχει διάκριση πεζών -κεφαλαίων ή όχι Σωστό ή λάθος
MatchByte Προαιρετικός Χρησιμοποιείται μόνο εάν έχετε εγκαταστήσει υποστήριξη γλώσσας διπλού byte π.χ. κινεζική γλώσσα Σωστό ή λάθος
Μορφή αναζήτησης Προαιρετικός Επιτρέψτε την αναζήτηση ανά μορφή κελιού Σωστό ή λάθος

Μετά την παράμετρο και την εύρεση πολλαπλών τιμών

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

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

Μπορείτε να το χρησιμοποιήσετε για να βρείτε πολλές παρουσίες του κειμένου αναζήτησης:

123456789101112131415161718192021222324252627282930313233343536 Sub TestMultipleFinds ()Dim MyRange As Range, OldRange As Range, FindStr As String"Αναζητήστε την πρώτη εμφάνιση του" "Light & Heat"Ορισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("Light & Heat")«Αν δεν βρεθεί, βγείτεΕάν το MyRange δεν είναι τίποτα, τότε βγείτε από το Sub'Εμφάνιση βρέθηκε η πρώτη διεύθυνσηMsgBox MyRange.Address«Δημιουργήστε ένα αντίγραφο του αντικειμένου εύρουςΟρίστε OldRange = MyRange"Προσθέστε τη διεύθυνση στη συμβολοσειρά που οριοθετεί με ένα" | " χαρακτήραςFindStr = FindStr & "|" & MyRange.Address«Επαναλάβετε το εύρος αναζητώντας άλλες περιπτώσειςΚάνω'Αναζήτηση για' Light & Heat 'χρησιμοποιώντας την προηγούμενη διεύθυνση που βρέθηκε ως παράμετρο AfterΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("Light & Heat", After: = Range (OldRange.Address))"Εάν η διεύθυνση έχει ήδη βρεθεί, βγείτε από το βρόχο" do " - αυτό σταματά τον συνεχή βρόχοΕάν InStr (FindStr, MyRange.Address) Τότε Έξοδος Do'Εμφάνιση της πιο πρόσφατης διεύθυνσης που βρέθηκεMsgBox MyRange.Address"Προσθέστε την πιο πρόσφατη διεύθυνση στη σειρά διευθύνσεωνFindStr = FindStr & "|" & MyRange.Address«δημιουργήστε ένα αντίγραφο του τρέχοντος εύρουςΟρίστε OldRange = MyRangeΒρόχοςΤέλος υπο

Αυτός ο κώδικας θα επαναλαμβάνεται στο χρησιμοποιούμενο εύρος και θα εμφανίζει τη διεύθυνση κάθε φορά που βρίσκει ένα παράδειγμα "Light & Heat"

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

LookIn Parameter

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

  • xlΑξίες - Αναζητά τιμές κελιού (η τελική τιμή ενός κελιού μετά τον υπολογισμό του)
  • xlFormulas - Αναζητά μέσα στον ίδιο τον τύπο κελιού (ό, τι έχει εισαχθεί στο κελί)
  • xlΣχόλια - Αναζήτηση σε σημειώσεις κελιού
  • xlCommentsThreaded - Αναζήτηση σε σχόλια κελιών

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

12345678910 Sub TestLookIn ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("=", LookIn: = xlFormulas)Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανΤέλος υπο

Εάν η παράμετρος «LookIn» οριστεί σε xlValues, ο κώδικας θα εμφανίσει ένα μήνυμα «Δεν βρέθηκε». Σε αυτό το παράδειγμα θα επιστρέψει το Β10.

Χρησιμοποιώντας την παράμετρο LookAt

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

  • xlΟλόκληρο - Απαιτεί ολόκληρο το κελί να ταιριάζει με την τιμή αναζήτησης
  • xlΜέρος - Αναζήτηση σε ένα κελί για τη συμβολοσειρά αναζήτησης

Αυτό το παράδειγμα κώδικα θα εντοπίσει το πρώτο κελί που περιέχει το κείμενο "φως". Με Lookat: = xlPart, θα επιστρέψει έναν αγώνα για το "Light & Heat".

123456789 Sub TestLookAt ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("light", Lookat: = xlPart)Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανΤέλος υπο

Αν xlΟλόκληρο ορίστηκε, μια αντιστοίχιση θα επέστρεφε μόνο εάν η τιμή κελιού ήταν "ελαφριά".

Παράμετρος SearchOrder

ο Παράμετρος SearchOrder υπαγορεύει πώς θα πραγματοποιηθεί η αναζήτηση σε όλο το εύρος.

  • xlRows - Η αναζήτηση γίνεται σειρά προς σειρά
  • xlXolumns - Η αναζήτηση γίνεται στήλη με στήλη
123456789 Sub TestSearchOrder ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Φύλλο1"). UsedRange.Find ("υπάλληλος", SearchOrder: = xlColumns)Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανΤέλος υπο

Αυτό επηρεάζει ποια αντιστοίχιση θα βρεθεί πρώτη.

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

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

Παράμετρος SearchDirection

ο Παράμετρος SearchDirection υπαγορεύει σε ποια κατεύθυνση θα κινηθεί η αναζήτηση - ουσιαστικά προς τα εμπρός ή προς τα πίσω.

  • xlΕπόμενο - Αναζήτηση για την επόμενη τιμή αντιστοίχισης στο εύρος
  • xlΠριν από - Αναζήτηση για προηγούμενη τιμή αντιστοίχισης στο εύρος

Και πάλι, εάν υπάρχουν διπλές τιμές εντός του εύρους αναζήτησης, μπορεί να έχει επίδραση στην πρώτη εύρεση.

12345678910 Sub TestSearchDirection ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Φύλλο1"). UsedRange.Find ("θερμότητα", SearchDirection: = xlΠροηγούμενο)Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανΤέλος υπο

Χρησιμοποιώντας αυτόν τον κωδικό στα δεδομένα δοκιμής, μια κατεύθυνση αναζήτησης του xlPrevious θα επιστρέψει μια θέση C9. Η χρήση της παραμέτρου xlNext θα επιστρέψει μια θέση A4.

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

Παράμετρος MatchByte

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

Εάν αυτή η παράμετρος έχει οριστεί σε "True", τότε η Εύρεση θα ταιριάζει μόνο με χαρακτήρες διπλού byte με χαρακτήρες διπλού byte. Εάν η παράμετρος έχει οριστεί σε "False", τότε ένας χαρακτήρας διπλού byte θα ταιριάζει με χαρακτήρες ενός ή δύο byte.

SearchFormat Παράμετρος

ο Παράμετρος SearchFormat σας δίνει τη δυνατότητα να αναζητήσετε αντίστοιχες μορφές κελιών. Αυτό μπορεί να είναι μια συγκεκριμένη γραμματοσειρά που χρησιμοποιείται ή μια έντονη γραμματοσειρά ή ένα χρώμα κειμένου. Πριν χρησιμοποιήσετε αυτήν την παράμετρο, πρέπει να ορίσετε τη μορφή που απαιτείται για την αναζήτηση χρησιμοποιώντας την ιδιότητα Application.FindFormat.

Εδώ είναι ένα παράδειγμα του τρόπου χρήσης του:

12345678910111213 Sub TestSearchFormat ()Dim MyRange As RangeApplication.FindFormat.ClearApplication.FindFormat.Font.Bold = TrueΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("θερμότητα", Searchformat: = True)Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανApplication.FindFormat.ClearΤέλος υπο

Σε αυτό το παράδειγμα, το FindFormat η ιδιότητα έχει οριστεί για αναζήτηση έντονης γραμματοσειράς. Στη συνέχεια, η εντολή Εύρεση αναζητά τη λέξη "θερμότητα" ρυθμίζοντας την παράμετρο SearchFormat σε True, έτσι ώστε να επιστρέφει μια παρουσία αυτού του κειμένου μόνο εάν η γραμματοσειρά είναι έντονη.

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

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

Όπου χρησιμοποιείτε μια παράμετρο SearchFormat, μπορείτε επίσης να χρησιμοποιήσετε έναν χαρακτήρα μπαλαντέρ (*) ως τιμή αναζήτησης. Σε αυτήν την περίπτωση θα αναζητήσει οποιαδήποτε τιμή με έντονη γραμματοσειρά:

1 Ορισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("*", Searchformat: = True)

Χρήση πολλαπλών παραμέτρων

Όλες οι παράμετροι αναζήτησης που συζητούνται εδώ μπορούν να χρησιμοποιηθούν σε συνδυασμό μεταξύ τους, εάν απαιτείται.

Για παράδειγμα, θα μπορούσατε να συνδυάσετε την παράμετρο «LookIn» με την παράμετρο «MatchCase», ώστε να κοιτάξετε ολόκληρο το κείμενο του κελιού, αλλά είναι διάκριση πεζών-κεφαλαίων

123456789 Sub TestMultipleParameters ()Dim MyRange As RangeΟρισμός MyRange = Φύλλα ("Sheet1"). UsedRange.Find ("Light & Heat", LookAt: = xlWhole, MatchCase: = True)Αν όχι το MyRange δεν είναι τίποτα τότεMsgBox MyRange.AddressΑλλούMsgBox "Δεν βρέθηκε"Τέλος εανΤέλος υπο

Σε αυτό το παράδειγμα, ο κώδικας θα επιστρέψει Α4, αλλά αν χρησιμοποιήσαμε μόνο ένα μέρος του κειμένου π.χ. «Θερμότητα», τίποτα δεν θα μπορούσε να βρεθεί επειδή ταιριάζουμε στο σύνολο της τιμής του κελιού. Επίσης, θα αποτύχει επειδή η θήκη δεν ταιριάζει.

1 Set MyRange = Sheets ("Sheet1"). UsedRange.Find ("heat", LookAt: = xlWhole, MatchCase: = True)

Αντικατάσταση στο Excel VBA

Υπάρχει, όπως μπορείτε να περιμένετε, μια λειτουργία Αντικατάσταση στο Excel VBA, η οποία λειτουργεί με παρόμοιο τρόπο με το 'Εύρεση' αλλά αντικαθιστά τις τιμές στη θέση του κελιού που βρέθηκε με μια νέα τιμή.

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

Ονομα Τύπος Περιγραφή Αξίες
Τι Απαιτείται Η τιμή για αναζήτηση Οποιοσδήποτε τύπος δεδομένων, όπως συμβολοσειρά ή αριθμητικός αριθμός
Αντικατάσταση Απαιτείται Η συμβολοσειρά αντικατάστασης. Οποιοσδήποτε τύπος δεδομένων, όπως συμβολοσειρά ή αριθμητικός αριθμός
Κοιτάξτε Προαιρετικός Αντιστοιχίστε μέρος ή ολόκληρο ένα κελί xlPart ή xlWhole
SearchOrder Προαιρετικός Η σειρά αναζήτησης σε - Σειρές ή στήλες xlByRows ή xlByColumns
MatchCase Προαιρετικός Η αναζήτηση είναι κεφαλαία ή όχι Σωστό ή λάθος
MatchByte Προαιρετικός Χρησιμοποιείται μόνο εάν έχετε εγκαταστήσει υποστήριξη γλώσσας διπλού byte Σωστό ή λάθος
Μορφή αναζήτησης Προαιρετικός Επιτρέψτε την αναζήτηση ανά μορφή κελιού Σωστό ή λάθος
ReplaceFormat Προαιρετικός Η μορφή αντικατάστασης της μεθόδου. Σωστό ή λάθος

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

Αντικατάσταση χωρίς προαιρετικές παραμέτρους

Το πιο απλό, χρειάζεται μόνο να καθορίσετε τι ψάχνετε και με τι θέλετε να το αντικαταστήσετε.

123 Sub TestReplace ()Φύλλα ("Sheet1"). UsedRange.Replace What: = "Light & Heat", Replacement: = "L & H"Τέλος υπο

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

Ο κωδικός αντικατάστασης που εμφανίζεται εδώ θα αντικαταστήσει κάθε περίπτωση "Light & Heat" με "L & H" σε όλο το εύρος κελιών που ορίζεται από το αντικείμενο UsedRange

Χρήση του VBA για εύρεση ή αντικατάσταση κειμένου σε μια συμβολοσειρά κειμένου VBA

Τα παραπάνω παραδείγματα λειτουργούν τέλεια όταν χρησιμοποιείτε VBA για αλληλεπίδραση με δεδομένα Excel. Ωστόσο, για να αλληλεπιδράσετε με συμβολοσειρές VBA, μπορείτε να χρησιμοποιήσετε ενσωματωμένες λειτουργίες VBA όπως το INSTR και το REPLACE.

Μπορείτε να χρησιμοποιήσετε το Λειτουργία INSTR για να εντοπίσετε μια συμβολοσειρά κειμένου μέσα σε μια μεγαλύτερη συμβολοσειρά.

123 Sub TestInstr ()MsgBox InStr ("This is MyText string", "MyText")Τέλος υπο

Αυτό το παράδειγμα κώδικα θα επιστρέψει την τιμή 9, η οποία είναι η θέση αριθμού όπου βρίσκεται το «MyText» στη συμβολοσειρά προς αναζήτηση.

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

INSTR - Έναρξη

Υπάρχουν δύο επιπλέον προαιρετικές παράμετροι διαθέσιμες. Μπορείτε να καθορίσετε το σημείο εκκίνησης για την αναζήτηση:

1 MsgBox InStr (9, "This is MyText string", "MyText")

Το σημείο εκκίνησης ορίζεται ως 9, οπότε θα επιστρέψει ακόμα 9. Αν το σημείο εκκίνησης ήταν 10, τότε θα επέστρεφε 0 (χωρίς αγώνα) καθώς το σημείο εκκίνησης θα ήταν πολύ μπροστά.

INSTR - Ευαισθησία περίπτωσης

Μπορείτε επίσης να ορίσετε μια παράμετρο σύγκρισης σε vbBinaryCompare ή vbTextCompareΤο Εάν ορίσετε αυτήν την παράμετρο, η δήλωση πρέπει να έχει τιμή αρχικής παραμέτρου.

  • vbBinaryCompare - Με διάκριση πεζών-κεφαλαίων (Προεπιλογή)
  • vbTextCompare - Δεν έχει διάκριση πεζών-κεφαλαίων
1 MsgBox InStr (1, "This is MyText string", "mytext", vbTextCompare)

Αυτή η δήλωση εξακολουθεί να επιστρέφει 9, παρόλο που το κείμενο αναζήτησης είναι πεζό.

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

Λειτουργία αντικατάστασης VBA

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

123 Sub TestReplace ()MsgBox Replace ("This is MyText string", "MyText", "My Text")Τέλος υπο

Αυτός ο κώδικας αντικαθιστά το «MyText» με το «My Text». Σημειώστε ότι η συμβολοσειρά αναζήτησης έχει διάκριση πεζών -κεφαλαίων καθώς η δυαδική σύγκριση είναι η προεπιλογή.

Μπορείτε επίσης να προσθέσετε άλλες προαιρετικές παραμέτρους:

  • Αρχή - καθορίζει τη θέση στην αρχική συμβολοσειρά από την οποία πρέπει να ξεκινήσει η αντικατάσταση. Σε αντίθεση με τη μέθοδο Εύρεση, επιστρέφει μια περικομμένη συμβολοσειρά ξεκινώντας από τον αριθμό χαρακτήρων που ορίζεται από την παράμετρο Έναρξη.
  • μετρώ - καθορίζει τον αριθμό των αντικαταστάσεων που πρέπει να γίνουν. Από προεπιλογή, η Αντικατάσταση θα αλλάζει κάθε παρουσία του κειμένου αναζήτησης, αλλά μπορείτε να την περιορίσετε σε μία μόνο αντικατάσταση, ορίζοντας την παράμετρο Count στο 1
  • Συγκρίνω - όπως στη μέθοδο Εύρεση μπορείτε να καθορίσετε μια δυαδική αναζήτηση ή μια αναζήτηση κειμένου χρησιμοποιώντας vbBinaryCompare ή vbTextCompareΤο Το δυαδικό είναι κεφαλαίο και το κείμενο είναι μη κεφαλαίο
1 MsgBox Replace ("This is MyText string (mytext)", "MyText", "My Text", 9, 1, vbTextCompare)

Αυτός ο κώδικας επιστρέφει "Η συμβολοσειρά κειμένου μου (mytext)". Αυτό συμβαίνει επειδή το σημείο έναρξης που δίνεται είναι 9, οπότε η νέα συμβολοσειρά που επιστρέφεται ξεκινά από τον χαρακτήρα 9. Μόνο το πρώτο «MyText» έχει αλλάξει επειδή η παράμετρος Count έχει οριστεί σε 1.

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

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

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave