Funkcje tekstowe

Z Henryk Dąbrowski
Skocz do: nawigacja, szukaj
20.09.2020



Zamiana fragmentu ciągu na inny ciąg

Bardzo użyteczna jest funkcja, która w zadanym ciągu znaków wyszukuje określony podciąg znaków i zastępuje ten podciąg innym ciągiem znaków. Prezentujemy taką funkcję poniżej. Parametr CompareType jest opcjonalny i domyślnie przyjmuje wartość numeryczną 0 (w przypadku pominięcia parametru). Określa on, czy będą rozróżniane małe i duże litery. Oto dozwolone wartości tego parametru:

  • 0 – będą rozróżniane małe i duże litery
  • 1 – wielkość liter nie będzie miała znaczenia
Function Zamien(Chars as String, Cut as String, Insert as String, Optional CompareType as Long) as String
    'zamienia w ciągu znaków Chars ciąg Cut na ciąg Insert;
    'opcjonalny parametr CompareType decyduje o tym, czy rozróżniana jest wielkość liter 
    Dim Txt as String, Lxt as String, Rxt as String
    Dim CaseSens as Long, Poz as Long
    If IsMissing(CompareType) Then
        CaseSens = 0
    Else
        CaseSens = CompareType
    End If
    
    If Cut = "" Then 'zostanie zwrócony ciąg bez zmian
        Zamien = Chars
        Exit Function
    End If
    
    Txt = Chars
    Poz = InStr(1, Txt, Cut, CaseSens) 'położenie ciągu Cut w ciągu Txt
    Do While Poz > 0
        Lxt = Mid(Txt, 1, Poz - 1) 'część ciągu Txt na lewo od znalezionego ciągu Cut
        Rxt = Mid(Txt, Poz + Len(Cut)) 'część ciągu Txt na prawo od znalezionego ciągu Cut
        Txt = Lxt & Insert & Rxt
        Poz = InStr(Poz + Len(Insert), Txt, Cut, CaseSens)
    Loop
    Zamien = Txt
End Function
Sub Tekstowe1()
    MsgBox Zamien("", "1", "123") ' ""
    MsgBox Zamien("abcd", "", "123") ' "abcd"
    MsgBox Zamien("abcd", "a", "") ' "bcd"
    MsgBox Zamien("abcd", "a", "11") ' "11bcd"
    MsgBox Zamien("abcd", "A", "22") ' "abcd"
    MsgBox Zamien("abcd", "A", "22", 1) ' "22bcd"
    MsgBox Zamien("abcd", "bc", "x") ' "axd"
    MsgBox Zamien("1a11aa111aaa", "1", "11") ' "11a1111aa111111aaa"
    MsgBox Zamien("1a11aa111aaa", "a", "aa") ' "1aa11aaaa111aaaaaa"
End Sub





LibreOffice Calc – makra                   Strona główna