Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 09:41   #1
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию Проблема в выполнении условия

Всем доброе утро!

Подскажите, пожалуйста, в чём проблема.
Я пишу условие:

If Len(vArr(j, 12) & "") = 0 Then
vArr(j, 13) = ""
Else

Select Case vArr(j, 12)
Case Is < 0.5: vArr(j, 13) = "Высокое": r = 1
Case Is > 1: vArr(j, 13) = "Низкое": r = 3
Case Is >= 0.5, Is <= 1: vArr(j, 13) = "Среднее": r = 2
End Select
End If


Но почему-то в результатах всё время пишется в независимости от числа - оценка - Низкое. Почему?

то есть если 0,35 - то выдает "Низкое", 0,66 - "Низкое"

Помогите, пожалуйста понять причину
KNatalia вне форума Ответить с цитированием
Старый 01.03.2010, 09:52   #2
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

проблема не в коде.
скорее всего в самом значении vArr(j, 12)

попробуйте записать Select Case --vArr(j, 12)
или Select Case cdbl(vArr(j, 12))
Dophin вне форума Ответить с цитированием
Старый 01.03.2010, 09:54   #3
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

А что означает Select Case --vArr(j, 12) и Select Case cdbl(vArr(j, 12))?
KNatalia вне форума Ответить с цитированием
Старый 01.03.2010, 09:54   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Замените свой код на это:
Код:
Sub test()
    ' ... код ...
    If Len(vArr(j, 12)) = 0 Then
        vArr(j, 13) = ""
    Else
        Debug.Print vArr(j, 12), vArr(j, 12) * 10, vArr(j, 12) > 1, Val(vArr(j, 12)) > 1
        Select Case Val(vArr(j, 12))
            Case Is < 0.5: vArr(j, 13) = "Высокое": r = 1
            Case Is > 1: vArr(j, 13) = "Низкое": r = 3
            Case Else: vArr(j, 13) = "Среднее": r = 2
        End Select
    End If
End Sub
Потом скопируйте содержимое окна Immediate (открывается по нажатию Ctrl + G), и выложите на форум.

По идее, Ваш код верен, и все должно работать.
EducatedFool вне форума Ответить с цитированием
Старый 01.03.2010, 09:58   #5
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
Печаль

Если так записать, то во всех столбцах оценка пропадает вообще!
Как быть, помогите, пожалуйста
KNatalia вне форума Ответить с цитированием
Старый 01.03.2010, 09:59   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А кто и как формирует массив? Возможно, что Вы не верно задаете разделитель целой и дробной части.
Так, если у Вс в Excel-е установлен разделитель "запятая", а массив формируется из значений с точками, то в результате выполнения Вашего макроса будет именно так, как Вы говорите.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 01.03.2010, 10:03   #7
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Да в Excel запятая, а в коде точка. А как поменять в коде?
KNatalia вне форума Ответить с цитированием
Старый 01.03.2010, 10:11   #8
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

в ексель и должна быть запятая, просто скорее всего Ваш vArr(j, 12) не воспринимается как число.
Dophin вне форума Ответить с цитированием
Старый 01.03.2010, 10:12   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Менять не нужно. В VBA всегда точка, а в Excel Может быть что угодно, но если установлена запятая, а в ячейке значение с точкой, то это будет текст и при сравнении его с числом возникнет Ваша ситуация.
Попробуйте на чистом листе заполнить диапазон "A1:T1" любыми значениями. Затем, меняя значения в ячейке "L1" выполнять макрос "Test". Увидите, что при вводе, например, значения "0,3" все правильно, а при вводе "0.3" результат не верный (при вводе числа с разделителем, отличным от установленного в Excel).
Код:
Sub Test()
    Dim j As Integer, vArr(), r As Integer
    vArr = [A1:T1].Value: j = 1
    MsgBox vArr(j, 12)
    If vArr(j, 12) = "" Then
        vArr(j, 13) = ""
    Else
        Select Case vArr(j, 12)
            Case Is < 0.5: vArr(j, 13) = "Высокое": r = 1
            Case Is > 1: vArr(j, 13) = "Низкое": r = 3
            Case Else: vArr(j, 13) = "Среднее": r = 2
        End Select
    End If
    MsgBox vArr(j, 13)
End Sub
P.S. Скажите, кто и как формирует массив - получите более точный ответ.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 01.03.2010, 10:12   #10
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Как же тогда быть?
KNatalia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет суммы ячеек с разных страниц при выполнении условия sttafi Microsoft Office Excel 27 07.12.2012 17:50
Проблема с проверкой по списку, который зависит от условия jlobster Microsoft Office Excel 2 24.12.2009 21:41
При выполнении программа отображает ошибку, в чем проблема понять не могу Hyjak Помощь студентам 7 20.10.2008 23:48
Удалить строку листа Excel при выполнении условия Gennady Microsoft Office Excel 14 18.12.2007 13:54