Найти либо те слова в тексте, в которых есть все буквы определенного слова, либо те, в которых нет ни одной - VBA

Узнай цену своей работы

Формулировка задачи:

1 - текстовое поле, куда пользователь вводит произвольный текст. 2 - текстовое поле, куда пользователь вводит одно слово. 3 - Вывод в label. По нажатию кнопки происходит анализ: в лейбл выводит все слова из поля (1), в которых есть все буквы слова, указанного в поле (2). По переключению радио-кнопки выводит все слова, в которых нету ни одной совпадающей буквы. В случае, если не найдено ни одного подходящего слова - вывести соответствующее сообщение ( MsgBox ). ----------- P.S. Начал изучать бейсик - немного офигел, как тут муторно со строками играться.. За любую помощь буду благодарен.

Решение задачи: «Найти либо те слова в тексте, в которых есть все буквы определенного слова, либо те, в которых нет ни одной»

textual
Листинг программы
Option Explicit
Const edn = "ноль один два три четыре пять шесть семь восемь девять"
Const ndc = "одиннадцать двенадцать тринадцать четырнадцать пятнадцать шестнадцать семнадцать восемнадцать девятнадцать"
Const des = "десять двадцать тридцать сорок пятьдесят шестьдесят семьдесят восемьдесят девяносто"
Const sot = "сто двести триста четыреста пятьсот шестьсот семьсот восемьсот девятьсот"
Const tsh = "тысяча тысячи тысяч", mln = "миллион миллиона миллионов", mrd = "миллиард миллиарда миллиардов"
Const valuteRub = "рубль рубля рублей", valuteKop = "копейка копейки копеек"
Dim s$, f&, Fltr$, Kop$
Function SumProp$(ByVal Expression As Double, Optional ByVal val$ = valuteRub, Optional rec&)
    Const p = " ", z = ", ":  Dim s$
    If Expression <> Fix(Expression) Then
        'для вывода инфы копейки округляются до 2-х знаков после запятой
        'например: 0,3 = 30 копеек // 0,03 = три копейки
        Kop = Mid$(Expression, InStr(1, Expression, ",") + 1, 2)
        Kop = Kop & String(2 - Len(Kop), 48)
        Kop = z & SumProp(Kop, valuteKop, rec + 1): Expression = Fix(Expression)
    End If: If Expression >= 2 ^ 31 Then MsgBox "Вы ввели очень большое число", vbInformation: Exit Function
    While Expression > 0
        Select Case Expression
        Case Is >= 10 ^ 9: s = s & SumProp(Fix(Expression \ 10 ^ 9), mrd, rec + 1): Expression = Expression Mod 10 ^ 9
        Case Is >= 10 ^ 6: s = s & SumProp(Expression \ 10 ^ 6, mln, rec + 1): Expression = Expression Mod 10 ^ 6
        Case Is >= 1000: s = s & SumProp(Expression \ 1000, tsh, rec + 1): Expression = Expression Mod 1000
        Case Is >= 100: s = s & Split(sot)(Expression \ 100 - 1) & p: Expression = Expression Mod 100
        Case 10, Is >= 20: s = s & Split(des)(Expression \ 10 - 1) & p: Expression = Expression Mod 10
        Case 11 To 19: s = s & Split(ndc)(Expression - 11) & p: Expression = -Expression
        Case Is < 10: s = s & Split(edn)(Expression) & p: Expression = -Expression
        End Select
    Wend
    If Len(s) Then
        Expression = Abs(Expression)
        Select Case Expression
        Case 1: s = s & Split(val)(0) & IIf(rec And val <> valuteKop, z, "")
        Case 2, 3, 4: s = s & Split(val)(1) & IIf(rec And val <> valuteKop, z, "")
        Case Else: s = s & Split(val)(2) & IIf(rec And val <> valuteKop, z, "")
        End Select: Select Case val
        Case tsh, valuteKop 'исключение, тысяча и копейка в женском роде
            s = Replace(s, "один ", "одна ")
            s = Replace(s, "два ", "две ")
        End Select
    Else: Kop = Trim$(Mid$(Kop, 2))
    End If
    If rec = 0 Then s = s & Kop: Kop = ""
    SumProp = LCase(s): SumProp = UCase(Left$(SumProp, 1)) & Mid$(SumProp, 2)
End Function

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы