Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Конвертация типов данных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Конвертация типов данных
bokr Дата: Четверг, 11.07.2019, 14:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
При обращении Cells(i,j) к ячейкам одного листа в одном операторе сравнения VBA воспринимает данные в одном случае как double в другом как string, хотя ячейки уже отформатированы как время.

В результате сравнение проходит некорректно. В чем причина? Неужели при каждом обращении к Cells(i,j) нужно использовать явное преобразование типов. Ведь это сильно утяжеляет код, замедляет исполнение.
К сообщению приложен файл: Ind.xlsb (49.8 Kb) · 9319864.png (82.5 Kb)
 
Ответить
СообщениеПри обращении Cells(i,j) к ячейкам одного листа в одном операторе сравнения VBA воспринимает данные в одном случае как double в другом как string, хотя ячейки уже отформатированы как время.

В результате сравнение проходит некорректно. В чем причина? Неужели при каждом обращении к Cells(i,j) нужно использовать явное преобразование типов. Ведь это сильно утяжеляет код, замедляет исполнение.

Автор - bokr
Дата добавления - 11.07.2019 в 14:04
sboy Дата: Четверг, 11.07.2019, 14:34 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Если в ячейке текст, то не важно какой формат данных Вы поставили


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Если в ячейке текст, то не важно какой формат данных Вы поставили

Автор - sboy
Дата добавления - 11.07.2019 в 14:34
InExSu Дата: Суббота, 13.07.2019, 23:49 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Привет!
Надеюсь не сильно замедлит.
Замените
[vba]
Код
If wsData.Cells(N, i).Value < wsData.Cells(N - 1, 7).Value Then
[/vba]
на
[vba]
Код
If wsData_Cells_Less(wsData, N, i) Then
[/vba]
Добавьте в код
[vba]
Код
Function wsData_Cells_Less( _
        ws As Worksheet, _
        N As Long, _
        i As Long) _
        As Boolean
' Тестом НЕ покрыто
'
    Dim v1 As Variant, v2 As Variant
    
    With ws
        v1 = .Cells(N, i).Value
        v2 = .Cells(N - 1, 7).Value
    End With

    If CDate(v1) < CDate(v2) Then

        wsData_Cells_Less = True

    End If
End Function
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеПривет!
Надеюсь не сильно замедлит.
Замените
[vba]
Код
If wsData.Cells(N, i).Value < wsData.Cells(N - 1, 7).Value Then
[/vba]
на
[vba]
Код
If wsData_Cells_Less(wsData, N, i) Then
[/vba]
Добавьте в код
[vba]
Код
Function wsData_Cells_Less( _
        ws As Worksheet, _
        N As Long, _
        i As Long) _
        As Boolean
' Тестом НЕ покрыто
'
    Dim v1 As Variant, v2 As Variant
    
    With ws
        v1 = .Cells(N, i).Value
        v2 = .Cells(N - 1, 7).Value
    End With

    If CDate(v1) < CDate(v2) Then

        wsData_Cells_Less = True

    End If
End Function
[/vba]

Автор - InExSu
Дата добавления - 13.07.2019 в 23:49
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!