13 stycznia 2009
Wyszukiwanie słów w tekście - Excel VBA
Jak w prosty sposób sprawdzić, czy tekst zawiera podane słowo? Można narzeźbić tak:
Option Explicit
Function isSubString(Text As String, Pattern As String, _
Optional isCaseSensitive As Boolean = True)
Const SPACE As String = " " '' spacja
Dim startPos As Long
Dim patternLen As Long
Dim textLen As Long
Dim nextChar As String
Dim prevChar As String
Dim comparisonType As VbCompareMethod
textLen = Len(Text)
patternLen = Len(Pattern)
comparisonType = vbBinaryCompare
If Not isCaseSensitive Then
comparisonType = vbTextCompare
End If
startPos = InStr(1, Text, Pattern, comparisonType)
isSubString = False
If startPos > 0 Then
'' pattern found -> check if it is a full blown word
'' check previous character
If startPos > 1 Then
'' there is a previous character
prevChar = Mid(Text, startPos - 1, 1)
Else
'' there is no previous character /
'' pattern begins the text
prevChar = SPACE
End If
If startPos + patternLen - 1 < textLen Then
'' there is a next character
nextChar = Mid(Text, startPos + patternLen, 1)
Else
'' there is no next character /
'' pattern ends the text
nextChar = SPACE
End If
If Not (inWord(prevChar) Or inWord(nextChar)) Then
isSubString = True
End If
End If
End Function
Private Function inWord(character As String) As Boolean
Select Case Asc(character)
'' see www.asciitable.com/
Case 9, 32 To 47, 58 To 64, 91 To 96, 123 To 127
inWord = False
Case Else
inWord = True
End Select
End Function
Można również wykorzystać dodatek do obsługi wyrażeń regularnych w Excelu:
=xlReMatch(TEKST, "\bslowo\b", False)
Patrz również tutaj.
Słowa kluczowe: excel, vba, wyrażenia regularne, regexp, Microsoft VBScript Regular Expressions
24 czerwca 2008
Funkcja LICZ.JEŻELI i wyrażenia regularne.
Zliczanie napisów pasujących do skomplikowanych wzorców można wykonać wykorzystując odmianę funkcji LICZ.JEŻELI (ang. COUNTIF), która zlicza komórki w oparciu o dopasowanie do wzorca opisanego wyrażeniem regularnym.
Function COUNTIFRE(Rng As Range, Pattern As String, _
Optional IgnoreCase As Boolean = True, _
Optional GlobalSearch As Boolean = False) As Long
Dim i As Long, j As Long
Dim xlRegExp As RegExp
Dim xlREMatches As MatchCollection
COUNTIFRE = 0
Set xlRegExp = New RegExp
With xlRegExp
.Global = GlobalSearch
.IgnoreCase = IgnoreCase
.Pattern = Pattern
End With
For i = 1 To Rng.Rows.Count
For j = 1 To Rng.Columns.Count
Set xlREMatches = xlRegExp.Execute(Rng(i, j).Value)
COUNTIFRE = COUNTIFRE + xlREMatches.Count
Next j
Next i
Set xlRegExp = Nothing
End Function
Zamieszczona poniżej funkcja wymaga dodania do listy referencji biblioteki Microsoft VBScript Regular Expressions.
Słowa kluczowe: excel, vba, wyrażenia regularne, regexp, Microsoft VBScript Regular Expressions
14 maja 2008
Excel -- wyrażenia regularne.
Wyrażenia regularne pozwalają na wyszukiwanie, podstawianie lub usuwanie skomplikowanych wzorców w tekście. Excel domyślnie nie udostępnia wyrażeń regularnych. Nie znajdziemy ich także wśród opcji zaawansowanych.
Przy odrobinie dobrych chęci można jednak rozszerzyć możliwości Excela o ich obsługę. W tym celu można się posłużyć językiem makr wzbogaconym o funkje zawarte w bibliotece VbScript Regular Expressions (np. w wersji 5.5).
Podobnie jak w przypadku innych bibliotek, zanim zaczniemy z nią pracę, należy ją dodać do przygotowywanego projektu:
Aby dodatkowo ułatwić sobie pracę z wyrażeniami regularnymi w Excelu napisałem (znowu) dodatek zawierający kilka podstawowych funkcji:
- xlREFirst -- zwraca pozycję początkową (domyślnie pierwszego) łańcucha znaków w źródłowym napisie pasującego do zadanego wzorca
- xlRELast -- zwraca pozycję końcową (domyślnie pierwszego) łańcucha znaków w źródłowym napisie pasującego do zadanego wzorca
- xlREMatch -- sprawdza, czy w źródłowym napisie istnieje dopasowanie do zadanego wzorca
- xlREMatchCount -- zwraca liczbę dopasowań wzorca w źródłowym napisie
- xlREReplace -- podmienia łańcuch(y) znaków w źródłowym napisie pasujące do zadanego wzorca
- xlRESubString -- zwraca (domyślnie pierwszy) łańcuch znaków w źródłowym napisie pasujący do zadanego wzorca
- xlREMatchLen -- zwraca długość (domyślnie pierwszego) łańcucha znaków w źródłowym napisie pasującego do zadanego wzorca
Po zainstalowaniu dodatku Excel wzbogacony zostaje o wymienione funkcje dostępne w menu "wstaw funkcję":
w kategorii "Użytkownika":
- pobierz kod [7kB]
- pobierz dodatek [33kB]
Słowa kluczowe: excel, vba, addin, makra, wyrażenia regularne, regexp, Microsoft VBScript Regular Expressions


![[vim created]](./grafika/vim_created.png)