Есть ли способ изменить значение числа на текст в VBA - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь изменить числа на 'p' или 'f' на основе оценки.

Не уверен, как добавить изображения, вот ссылка

https://drive.google.com/file/d/1dKn9mkJa9brZXq2tHz8_ULkgreWsBkTI/view?usp=sharing

Я уже удалил знак% из строки, но теперь мне нужно изменить число на основе оценки.> = 70 до 'p', 69 и ниже до 'f'

Sub PassOrFail()


Dim myValue As String

myValue = ThisWorkbook.ActiveSheet.Range("testScore").Value

myValue = Replace(myValue, "%", "")



MsgBox myValue


End Sub

Ожидается, что он покажет Skim: p, MP: f

Ответы [ 4 ]

0 голосов
/ 17 мая 2019

Решение, основанное не на «Skim» или «MP», а на% -знаке:

Sub tst()
Dim mystring As String, y As Variant, i As Long
    mystring = ThisWorkbook.ActiveSheet.Range("testScore")
    y = Split(mystring, " ")
        For i = 1 To UBound(y)
            If InStr(y(i), "%") > 0 Then
                If Val(Split(Split(y(i), " ")(0), "%")(0)) < 70 Then
                    mystring = Replace(mystring, Split(Split(y(i), " ")(0), "%")(0) & "%", "f")
                Else
                    mystring = Replace(mystring, Split(Split(y(i), " ")(0), "%")(0) & "%", "p")
                End If
            End If
        Next i
MsgBox mystring
End Sub
0 голосов
/ 17 мая 2019

Попробуйте этот код ниже:

Sub PassOrFail()

Dim myValue As String
myValue = ThisWorkbook.ActiveSheet.Range("testScore").Value

'String manipulation starts here
'1. Get the pattern position
Dim skim_pos As Integer, mp_pos As Integer
skim_pos = InStr(myValue, "Skim: ")
mp_pos = InStr(myValue, ";MP: ")

'2. Get the skim score
Dim skim As String
skim = Replace(Mid(myValue, skim_pos + 6, mp_pos - (skim_pos + 6)), "%", "")

'3. Get the MP
Dim mp As String
mp = Replace(Mid(myValue, mp_pos + 5, Len(myValue) - (my_pos + 5)), "%", "")

If CInt(skim) >= 70 Then
    skim = "p"
Else
    skim = "f"
End If

If CInt(mp) >= 70 Then
    mp = "p"
Else
    mp = "f"
End If

MsgBox "Skim: " & skim & ", MP: " & mp


End Sub
0 голосов
/ 17 мая 2019

Хотя это не самое элегантное решение, оно работает на основе заданных деталей:

Sub PassOrFail()

Dim myValue As String, strResult As String
Dim arrResults

myValue = ThisWorkbook.ActiveSheet.Range("testScore").Value

'Split the value
arrResults = Split(Replace(myValue, "%", ""), ";") 'This would create a 3 column array, due to the initial ";"

    'Skim
    If Replace(arrResults(1), "Skim: ", "") >= 70 Then
        strResult = "Skim: p"
    Else
        strResult = "Skim: f"
    End If

    'MP
    If Replace(arrResults(2), "MP: ", "") >= 70 Then
        strResult = strResult + ", MP: p"
    Else
        strResult = strResult + ", MP: f"
    End If

    'Result
    MsgBox strResult

End Sub
0 голосов
/ 17 мая 2019

это то, что тебе нужно?

if cInt(myValue) >=70 then
  myValue="p"
elseif cInt(myValue><69 then
   myValue="f"
end if

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...