Преобразовать строку, которая не является числом в целое число - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно преобразовать строку в числовое значение.

Моя строка не является числом. Я определяю числовое значение этой строки в моей программе.

Это тест, который я выполняю:

enter image description here

Sub TestFinal()

    Dim Result As Integer

    Dim StartNumber As Integer
    Dim EndNumber As Integer

    Dim b As Variant
    Dim d As Variant

    Dim ValCellY As String
    Dim ValCellZ As String

    StartNumber = 2   'First line value of my table
    EndNumber = 3     'Last line value of my table

    b = 80
    d = 20

    For StartNumber = 2 To EndNumber   'Begining of my loops

        ValCellY = Cells(StartNumber, 2).Value
        ValCellZ = Cells(StartNumber, 3).Value

        If Cells(StartNumber, 1) = "Yes" Then  'First if condition
            Result = 100
        End If

        If Cells(StartNumber, 1) = "No" Then    'Second if condition
            'I use CInt function to convert my string into a integer
            Result = 75 * CInt(ValCellY) + 25 * CInt(ValCellZ)  
        End If

        'I associate the varaible Result to the column D
        Cells(StartNumber, 4).Value = Result

    Next StartNumber    'End of my loops

End Sub

Я не понимаю, почему значения b и d не принимаются во внимание. Более того, появляется сообщение об ошибке: «несоответствие типов».

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы используете строки для вычисления вместо фактических значений. Вы можете использовать if или выбрать case, но если ваша реальная проблема более сложна, то я предлагаю использовать словарь.

  Option Explicit

    Sub TestFinal()

        Dim Result As Integer

        Dim StartNumber As Integer
        Dim EndNumber As Integer

        Dim b As Variant
        Dim d As Variant

        Dim ValCellY As String
        Dim ValCellZ As String

        StartNumber = 2   'First line value of my table
        EndNumber = 3     'Last line value of my table

        b = 80
        d = 20


        For StartNumber = 2 To EndNumber   'Begining of my loops

            ValCellY = Cells(StartNumber, 2).Value
            ValCellZ = Cells(StartNumber, 3).Value

            If Cells(StartNumber, 1) = "Yes" Then  'First if condition
                Result = 100
            End If

            If Cells(StartNumber, 1) = "No" Then    'Second if condition

                If ValCellY = "b" Then
                    ValCellY = b
                ElseIf ValCellY = "d" Then
                    ValCellY = d
                End If

                If ValCellZ = "b" Then
                    ValCellZ = b
                ElseIf ValCellZ = "d" Then
                    ValCellZ = d
                End If

                Result = 75 * CInt(ValCellY) + 25 * CInt(ValCellZ)  'I use CInt function to convert my string into a integer

            End If

            Cells(StartNumber, 4).Value = Result  'I associate the varaible Result to the column D

        Next StartNumber    'End of my loops

    End Sub
0 голосов
/ 12 ноября 2018

Преобразуйте их обратно в переменные.

    ValCellY = IIf(Cells(StartNumber, 2).Value = "b", b, d)
    ValCellZ = IIf(Cells(StartNumber, 3).Value = "b", b, d)
...