Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно написать условие в Excel 
:(
    Опции темы
darth
Дата 6.10.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



Здравствуйте возник вот такой вопросы  есть (небольшая  грубо говоря БД) ведется о Excele по заполнению путевых листов!!! В ней есть две ячейки “время\прибытие” и “время \убытие”(формат для этих  ячеек ДД.ММ.ГГ ч:мм), и  итоговая куда записывается разность этих двух ячеек  “время\часов”(формат ячейки ч:мм  смысл ячейки сколько времени была занята машина ).Вопрос стал как правильно написать условие ,при котором если машина была занята сутки в рейсе то получается “время\прибытие-“время \убытие то по формуле записывается 0 часов как программно написать чтобы в случае если даты разные и время двух ячеек не совпадает то записала бы время  в ячейку “время\часов” 24:00 ! Также написать второе условие, чтобы учитывался обед водителя 1:30 отнимался от полного рабочего времени тоже, если он ушел рейс в 7:00 утра, а приехал в 17:00 не записала лишне 1:30 !!! 
Для ячеек  “время \убытие” и  “время\прибытие” по умолчание генерируется текущая дата (для удобства пользователей), значит после только изменения  одной из них ручной корректировкой  (наверно при изменении в ячейке   “время\прибытие” ), должно срабатывать выше описанное условие какая именно процедура увидит это изменение и активирует условие!!! 

PM MAIL   Вверх
Тутанхамец
Дата 8.10.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: нет
Всего: 6



В программировании под офис мало понимаю, но чтоб не было нуля в разности, то имеет смысл поставить формат ячейки в "ДД.ММ.ГГ ч:мм". Имхо. А насчет обеда - не слишком внятно изложено. 
PM MAIL   Вверх
darth
Дата 8.10.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



Цитата(Тутанхамец @ 8.10.2006,  08:53)
В программировании под офис мало понимаю, но чтоб не было нуля в разности, то имеет смысл поставить формат ячейки в "ДД.ММ.ГГ ч:мм". Имхо. А насчет обеда - не слишком внятно изложено.

Да вот видишь, хотят, чтоб было время, а не дата и время в ячейке время \убытие(ну чтобы не было много информации, а только нужная то есть только одно только время выводилась в эту  ячейку она реально считается разность двух ячеек “время\прибытие” - “время \убытие”).На счет обеда поясняю так как рабочий день 8 часов не надо учитывать обед у нас он 1:30 ну вот и потребовалось написать условие ,которое бы если человек уехал в рейс 8:00 и приехал в 15:00 так получается время работы 7 ,а реально 5:50 ну вот и надо написать условие при котором бы это условии выполнялась то есть программно  отнимала еще 1:30.
PM MAIL   Вверх
cardinal
Дата 8.10.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Перенесено из VB6.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
RockClimber
Дата 8.10.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Честно говоря, я ничего не понял. Пишешь в ячейку формулу: "Дата прибытия"-"дата убытия"-"время обеда" (или просто 1:30). Ставишь формат, какой нравится.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Izuver
Дата 9.10.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 352
Регистрация: 13.6.2006
Где: Омск

Репутация: 2
Всего: 2



1. Используй формулу ЕСЛИ(B1-A1>=1;ТЕКСТ(B1-A1;"дд чч:мм");B1-A1)
2. С какого и до какого времени обед?
3. А это вопче не понятно:
"Для ячеек  “время \убытие” и  “время\прибытие” по умолчание генерируется текущая дата (для удобства пользователей), значит после только изменения  одной из них ручной корректировкой  (наверно при изменении в ячейке   “время\прибытие” ), должно срабатывать выше описанное условие какая именно процедура увидит это изменение и активирует условие!!!"
Что значит "генерируется текущая дата" на оба значения "=ТДАТА()"? 

Это сообщение отредактировал(а) Izuver - 9.10.2006, 01:11
PM MAIL ICQ   Вверх
darth
Дата 9.10.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



Да я решил эти вопросы связанные с расчетом если человек ушел в рейс и был дальше чем обед (чтобы посчитала рабочее время не учитывая обеденное время), или был целые сутки в рейсе  обед вот кому если пригодиться :
'Если в рейсе был сутки 24 часа сравниваться даты и выводиться на экран 24:00  в нужном формате 
If DatePart("d", Target.Offset(0, 3).Value) > DatePart("d", Target.Offset(0, 2).Value) Then
Target.Offset(0, 4).Formula = "24:00"
Target.Offset(0, 4).NumberFormat = "[h]:mm"
Else

' считаем рабочий день учитывая обед если он приехал позже 12:00(сравниваем с ячейкой AM100) то отнимаем 1:30  (время берем от ячейки  AS100)
If Hour(Target.Offset(0, 3).Value) > Hour(ActiveSheet.Range("AM100")) Then
Target.Offset(0, 4).Formula = "=" & Target.Offset(0, 3).Address(False, False) & "-" & Target.Offset(0, 2).Address(False, False) & "-" & ActiveSheet.Range("AS100").Address(False, False)
Target.Offset(0, 4).NumberFormat = "[h]:mm"
'
‘ считаем рабочий день после обеда если он приехал позже 13:30(сравниваем с ячейкой
AN100 она равна 13:30)
If Hour(Target.Offset(0, 2).Value) > Hour(ActiveSheet.Range("AN100")) And Hour(Target.Offset(0, 3).Value) > Hour(ActiveSheet.Range("AN100")) Then
Target.Offset(0, 4).Formula = "=" & Target.Offset(0, 3).Address(False, False) & "-" & Target.Offset(0, 2).Address(False, False)
Target.Offset(0, 4).NumberFormat = "[h]:mm"
Else

Вот две вещи которые не решил первое как указать, чтобы программно не сравнивая с написанными( неграмотно может сори), ячейками в которых я указал время (сравниваем с ячейкой AN100 она равна 13:30), а как при видение переменных типа:
 dim LanchTime
LanchTime=#13:30 # 
If Hour(Target.Offset(0, 2).Value) > Hour(LanchTime)  и сравнивать как раз с ней а не писать на 100 ячейке это время, а программа наверно что неправильно пишу не может обработать такое выражение пишет пустое значении в чем то ошибаюсь smile !
И вторая проблема как написать процедуру ,чтобы выше описанные эти условия(где считали рабочие день с учетом обеда и послеобеденное время), срабатывали при изменение в ячейке “время/прибытие” после изменения данных?


Добавлено @ 13:14 
Цитата(Izuver @ 9.10.2006,  01:08)
3. А это вопче не понятно:
"Для ячеек  “время \убытие” и  “время\прибытие” по умолчание генерируется текущая дата (для удобства пользователей), значит после только изменения  одной из них ручной корректировкой  (наверно при изменении в ячейке   “время\прибытие” ), должно срабатывать выше описанное условие какая именно процедура увидит это изменение и активирует условие!!!"
Что значит "генерируется текущая дата" на оба значения "=ТДАТА()"?

Target.Offset(0, 2).Value = Date
Target.Offset(0, 3).Value = Date
Генерирует в эти ячейке текущую дату я пока отключил их чтобы условия не ругались такак сама панимаешь лепит 09.10.2006  0:00:00 и уже сравнивать не с чем условия уже нарушаеться!Поэтому и приходиться сначала вести нужную дату и время !!!Вот из-за этого и стал вопрос написать процедуру котрая как раз работала при изменение одной из ячеек правильнее последней то есть время\прибытие! 
PM MAIL   Вверх
Cyric
Дата 9.10.2006, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 27.4.2006
Где: Россия, г. Казань .

Репутация: 3
Всего: 3



Большую часть написанного не понял.
По поводу 
Цитата
И вторая проблема как написать процедуру ,чтобы выше описанные эти условия(где считали рабочие день с учетом обеда и послеобеденное время), срабатывали при изменение в ячейке “время/прибытие” после изменения данных?


Вам нужно обрабатывать событие изменения ячейки, при возникновении этого события вызывается метод
Код
Private Sub Worksheet_Change(ByVal Target As Range)



В этом методе вы проверяя значения Target.Row и Target.Column можете определить были ли изменения осуществлены в нужной вам ячейке и в этом случае производить необходимые действия.
PM MAIL ICQ   Вверх
darth
Дата 10.10.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.10.2006

Репутация: нет
Всего: нет



Цитата(Cyric @ 9.10.2006,  19:48)
Большую часть написанного не понял.
По поводу 
Цитата
И вторая проблема как написать процедуру ,чтобы выше описанные эти условия(где считали рабочие день с учетом обеда и послеобеденное время), срабатывали при изменение в ячейке “время/прибытие” после изменения данных?


Вам нужно обрабатывать событие изменения ячейки, при возникновении этого события вызывается метод
Код
Private Sub Worksheet_Change(ByVal Target As Range)



В этом методе вы проверяя значения Target.Row и Target.Column можете определить были ли изменения осуществлены в нужной вам ячейке и в этом случае производить необходимые действия.

Спасибо точно этот метод   Private Sub Worksheet_Change(ByVal Target As Range) все
получилось!
Я только не смог избавиться от записей в ячейке на листе (та как ниже код правильно программой не воспрнимаеться пришлось создать в пустом  дальней ячейке на листе я выбрал AM100 написал значение 13:30 и присвоил формат Ч:мм  , на не ее я сылаюсь и сравниваю  время по условию у меня это записано так 
 If Hour(Target.Offset(0, 3).Value) > Hour(ActiveSheet.Range("AM100")) Then
   А  вот как записать это значения времени не присваивая ее ячейке на листе,а   присвоить ее переменой  и сравнить програмно я думал ,что так задам значения 
dim  timelunch
timelunch=#13:30#  но косяки иду самого начала обрабатывет эту строку как timelunch=#1:30 pm#  
If Hour(Target.Offset(0, 3).Value) > Hour(timelunch) Then тут пишет что переменная timelunch пустая ,но она ведь не пустая там задано время?!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.