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 για αυτή την συμβουλή.