Monster Search - L oop (строковый поиск + целочисленная вставка) - PullRequest
0 голосов
/ 11 июля 2020
• 1000 На протяжении всего эссе присутствует «Монстр 1», «Монстр 2» ... «Монстр X». Обратите внимание, что максимальное количество монстров может быть 99.

В конце кода я хочу сказать что-то вроде " Есть 25 монстров ».

Я не знаю синтаксиса для ввода целого числа в поиск« нравится »l oop. Это код, который у меня есть, и я был бы признателен за помощь, пожалуйста:

Dim MonsterNum As Integer 
Dim strHowManyMonsters As String

MonsterNum = 1

For MonsterNum 1 to 99

    If (NOT strMonsterEssay like ("*Monster&Char(32)&'"MonsterNum + 1"'*") And strMonsterEssay like ("*Monster&Char(32)&'"MonsterNum"'*") Then strHowManyMonsters = "There are '"MonsterNum"' Monsters."

    Else: strHowManyMonsters = "There are no Monsters."
    
    End If

Next MonsterNum

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Попробуйте это

Dim MonsterNum As Integer
Dim strHowManyMonsters As String

strHowManyMonsters = "There are no Monsters."

For MonsterNum = 99 To 1 Step -1
  
    If strMonsterEssay Like "*[mM]onster " & MonsterNum & "*" Then
        strHowManyMonsters = "There are " & MonsterNum & " Monsters."
        Exit For
    End If
  
Next MonsterNum

Обратите внимание на использование [mM], чтобы проверить, что поиск не чувствителен к регистру. Я думаю, что было бы лучше использовать функцию VBA Instr() следующим образом:

If InStr(1, strMonsterEssay, "Monster " & MonsterNum, vbTextCompare) > 0 Then

Также обратите внимание на обратный счет.

0 голосов
/ 11 июля 2020

Воспользуйтесь следующей функцией, пожалуйста. Если за всеми существующими строками «Monster» следуют разные числа, это число не имеет значения. Достаточно посчитать Monster.

Function CountMonsters(FullString As String, strMonster As String) As Long
    CountMonsters = UBound(Split(FullString, strMonster))
End Function

Его можно вызвать следующим образом:

Sub testFindMonsters()
  Dim strMonsterEssay As String
  strMonsterEssay = "Monster 1 and Monster 2 goes to school. Monster 3 is waitting for the first two..."
  MsgBox "There are " & CountMonsters(strMonsterEssay, "Monster") & " Monsters."
End Sub

Если необходимо вернуть «наибольшее число монстра», та же функция будет называться таким образом:

Sub testMaxMonsterNumber()
   Dim MonsterNum As Long, strMonsterEssay As String, maxNo As Long, i As Long
   Dim strHowManyMonsters As String
    
   strMonsterEssay = "Monster 1 and Monster 2 goes to school. Monster 3 is waiting for the first two. However, Monster 1 and Monster 2 saw Monster 3 waiting and went a different way. Monster 3 waited for a long time for Monster 1 and Monster 2 but they never showed up"
    For i = 99 To 1 Step -1
        If CountMonsters(strMonsterEssay, "Monster " & i) > 0 Then
            maxNo = i: Exit For
        End If
    Next
    If maxNo > 0 Then
       MsgBox "There are " & maxNo & " Monsters."
    Else
       MsgBox "There are no Monsters."
    End If
End Sub

Но если «Монстр 32 ждет первых двух», он вернет 32. Я спросил вас о «правиле» последовательных номеров монстров, но вы ничего не сказали ...

...