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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2013, 14:51   #1
Alecsandrovih
Пользователь
 
Регистрация: 22.10.2013
Сообщений: 11
По умолчанию Преобразование время работы в число

Помогите пожалуйста!время работы при условии например:"8\13 14\17", "8\0"...в одной ячейки,отображалось :8, 16 ...в другой.

В приложение (жёлтым) условие ввода, (зелёный) результат
Заранее спасибо!
Вложения
Тип файла: rar пример.rar (13.6 Кб, 19 просмотров)
Alecsandrovih вне форума Ответить с цитированием
Старый 08.11.2013, 05:39   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

то ли пример некорректный, то ли я не проснулся о_О
цифры ваще не связные какие то....
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 08.11.2013, 08:37   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
то ли пример некорректный, то ли я не проснулся о_О
цифры ваще не связные какие то....
вполне себе связанные, например

"8\13 14\17" указывает на периоды работы: с 8 до 13 и с 14 до 17 и нужно посчитать количество часов между ними.

В принципе, можно заменить бэкслеши на пробелы и получить набор из 2 или 4 цифр, но мне влом делать парсер одной формулой. Громоздко и неудобно получается.

Еще можно заменить бэкслеши на минусы, пробел на плюс и через Evaluate вычислить значение строки. Например так:
Код:
-Evaluate([Substitute(Substitute(A1, "\", "-"), " ", "+")])
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 08.11.2013 в 08:39.
DiemonStar вне форума Ответить с цитированием
Старый 08.11.2013, 09:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
вполне себе связанные, например

"8\13 14\17" указывает на периоды работы: с 8 до 13 и с 14 до 17 и нужно посчитать количество часов между ними.
ой..
а это "8\0" - какой период работы? с 8-00 до полуночи ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2013, 12:29   #5
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
ой..
а это "8\0" - какой период работы? с 8-00 до полуночи ?
по аналогии 24-8 =16. что и выделено зеленьким =)
Цитата:
вполне себе связанные, например
8\13 14\17 ну это же всем понятно,кроме меня!

Дурацкий парсер на ПСЕВДОкоде, без макросов(хочется позадуряться):

Код:
Если ДлинаСтроки <6 тогда
	Если ПоискСимвола "\" = 3 тогда  // получили число слева
		Сдвиг на 2 в лево
	Иначе
		Сдвиг на 1 в лево
	Если ДлинаСтроки - ПоискСимвола "\" = 2 
		Сдвиг на 2 вправо
	Иначе 	
		Сдвиг на 1 вправо
Иначе....
Пояснения:
  • ДлинаСтроки это ДЛСТР в Ексель
  • ДлинаСтроки варьируется от 3 до 11 символов.
  • вариант <6 рассматривает тот случай когда значение имеет один значек "\". пример: 0\0 0\00 00\00
  • ПоискСимвола это функция ПОИСК() в Ексель
  • Сдвиг влево,вправо это ПРАВСИМВ() и ЛЕВСИМ() соответсвенно в Ексель
  • зная чему равны сдвиги можно найти значение как ПРАВСИМ()-ЛЕВСИМ()

UPD
Код:
=ЕСЛИ(ДЛСТР(BA5)<6;ЕСЛИ(ПОИСК("\";BA5)=3;ЕСЛИ(ДЛСТР(BA5)-ПОИСК("\";BA5)=2;ПРАВСИМВ(BA5;2)-ЛЕВСИМВ(BA5;2);ПРАВСИМВ(BA5;1)-ЛЕВСИМВ(BA5;2));ЕСЛИ(ДЛСТР(BA5)-ПОИСК("\";BA5)=2;ПРАВСИМВ(BA5;2)-ЛЕВСИМВ(BA5;1);ПРАВСИМВ(BA5;1)-ЛЕВСИМВ(BA5;1))))
это только для строки меньше 6 символов. вставлять в E5
для строки в 12 символов еще нужна фукнция НАЙТИ дял нахождения второго вхождения "\"
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 08.11.2013 в 13:28.
SaLoKiN вне форума Ответить с цитированием
Старый 08.11.2013, 13:30   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

если хочется с парсером позадуряться, то проще сделать так:

1. заменить "\" на " "
2. разделить строку на элементы массива (split)
3. произвести сложение четно-нечетных элементов с соответствующими знаками

например можно так:
Код:
S$ = [Substitute(A1, "\", " ")]
A = Split(S, " ")
Res = 0
For I = 1 to UBound(A)
  Res = Res + IIF(I Mod 2 = 0, 1, -1)*(If A(I) = "0", 24, CInt(A(I)))
Next I
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 08.11.2013, 13:45   #7
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

макросами однозначно проще)
но функциями во как весело =)
а если запарится и вкурить для двух промежутков типа 8\13 14\17 то тут мамамия из IFов творится будет такая x____x
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 08.11.2013, 14:16   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
по аналогии 24-8 =16. что и выделено зеленьким =)
SaLoKiN, DiemonStar, спасибо за объяснения.
я удовлетворил своё любопытство (и, заодно, расширил кругозор)!


Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
8\13 14\17 ну это же всем понятно,кроме меня!
Вы не одиноки, мне тоже было не понятно, пока DiemonStar не объяснил.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2013, 14:40   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы не одиноки, мне тоже было не понятно, пока DiemonStar не объяснил.
Я бы тоже не сообразил, если бы у кадровиков бумажный вариант не встречал...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.11.2013, 12:51   #10
Alecsandrovih
Пользователь
 
Регистрация: 22.10.2013
Сообщений: 11
По умолчанию

спасибо всем за понимание! и за помощь!
звените за не ясности я только начинаю разбирать в Excel
подсказки отличные к сожалению не понял что делать с:

S$ = [Substitute(A1, "\", " ")]
A = Split(S, " ")
Res = 0
For I = 1 to UBound(A)
Res = Res + IIF(I Mod 2 = 0, 1, -1)*(If A(I) = "0", 24, CInt(A(I)))
Next I
Alecsandrovih вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование в число (Delphi) pinch000 Общие вопросы Delphi 3 25.04.2012 21:02
преобразование строки в число acronis2000 Общие вопросы C/C++ 19 04.06.2011 20:42
Преобразование в число (Delphi) I.nessa Помощь студентам 14 14.12.2010 15:18
Преобразование формата дата время в VBA Юнлинг Microsoft Office Excel 9 10.11.2008 11:36
Преобразование строки во время kayman Общие вопросы Delphi 7 02.10.2007 15:41