Excel / VBA - Επιλέξτε κελιά μεταξύ 2 λέξεων-κλειδιών

  • Θέμα
  • Λύση

Θέμα

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

Παράδειγμα κώδικα:

 Κάνετε ενώ είναι αλήθεια

Ορίστε κελιά = Στήλες (11) .Βρείτε (Τι: = "N", _

Μετά από: = Κύτταρα (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

SearchDirection: = xlΕπόμενο, _

MatchCase: = False, _

ΑναζήτησηFormat: = Λάθος)

Εάν το στοιχείο τίποτα δεν έχει τελειώσει, τότε το κάνετε

Cell.Select

ActiveCell.Select

ActiveCell.EntireRow.Range ("A1") Επιλέξτε

Εύρος (επιλογή, επιλογή. Επιλογή (-20, 0))

Αλλά ο κώδικας δεν λειτουργεί σωστά.

Λύση

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

 Sub MyOrigSubDefHere ()

DimFirstHit As Long

Dim lSecondHit όσο καιρό

Κάνετε ενώ είναι αλήθεια

lFirstHit = getItemLocation ("Ν", στήλες (11), ψευδές)

Αν (lFirstHit = 0) Τότε βγείτε

lSecondHit = getItemLocation ("Β", Εύρος (Κύτταρα (lFirstHit + 1, 11), Κύτταρα (Rows.Count, 11)), False)

Αν (lSecondHit = 0) Τότε βγείτε

Γραμμές (lFirstHit & ":" & lSecondHit). Διαγραφή

Βρόχος

End Sub

Δημόσια Λειτουργία getItemLocation (sLookFor As String, _

rngSearch As Range, _

Προαιρετική τιμή bFullString ως Boolean = True, _

Προαιρετικά bLastOccurance Ως Boolean = True, _

Προαιρετικό bFindRow ως Boolean = True) όσο καιρό

'βρείτε την πρώτη / τελευταία σειρά / στήλη εντός εύρους για μια συγκεκριμένη συμβολοσειρά

Dim Cell As Range

Διασκεδάστε ως ακέραιο

Dim iSearchDir ως ακέραιο

Dim iSearchOdr ως ακέραιο

Αν (bFullString) _

Επειτα

iLookAt = xlWhole

Αλλού

iLookAt = xlPart

Τέλος εαν

Αν (bLastOccurance) _

Επειτα

iSearchDir = xLPrevious

Αλλού

iSearchDir = xlNext

Τέλος εαν

Αν δεν είναι (bFindRow) _

Επειτα

iSearchOdr = xlByColumns

Αλλού

iSearchOdr = xlByRows

Τέλος εαν

Με rngSearch

Αν (bLastOccurance) _

Επειτα

Ορίστε το στοιχείο Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Αλλού

Ορίστε το στοιχείο Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

Τέλος εαν

Τέλος με

Αν το Cell δεν είναι τίποτα τότε

getItemLocation = 0

Αλλιώς δεν είναι (bFindRow) _

Επειτα

getItemLocation = Cell.Column

Αλλού

getItemLocation = Cell.Row

Τέλος εαν

Ορισμός κελιού = Τίποτα

Λειτουργία τερματισμού

Χάρη στην rizvisa1 για αυτή την συμβουλή.

Προηγούμενο Άρθρο Επόμενο Άρθρο

Οι Καλύτερες Συμβουλές