Страницы: 1
RSS
Часовые пояса или реальное время городов России в Excel
 
Здравствуйте уважаемые форумчане.  
Имеется база данных клиентов. Клиенты по всей территории России.  
Можно ли в книге Excel, в соседней ячейке с наименованием города, при помощи формул или Макроса, отобразить разницу часовых поясов от Московского времени ???  
 
Может быть у кого-то есть какие-либо другие идеи ???  
 
Шаблон во вложении.
 
Как я представляю, Вам нужно создать на скрытом листе список городов, напротив которых проставить часовой пояс, а уж потом изобретать формулу или макрос (лучше формулу).  
 
-=50606=-
<FONT COLOR="CadetBlue">
 
Как вариант скачивать из интернета с сайта где есть время в этих регионах, или создать свой справочник времени для каждого региона (разницы) и формулой типа ВРЕМЯ + ВПР(Город;Справочник;;)его считать.
 
Типа того
 
формулой можно так, если сделать справочник можно из него разницу подставлять  
 
Ух ты!  
57775
 
Что то я перемудрил (глянул на формулу Микки и понял, можно просто у =ТДАТА формат поменять), будет то же но проще :).
 
Ребята, спасибо за идеи. Пойду по вашему пути ...
 
{quote}{login=Евгений.}{date=12.01.2011 02:45}{thema=Re: Re: }{post}Что то я перемудрил (глянул на формулу Микки и понял, можно просто у =ТДАТА формат поменять), будет то же но проще :).{/post}{/quote}  
 
Ребятки, все хорошо, однако в том случае, если время "отрицательное", т.е. Калининград (-1 час), то формула выдает ошибку "ЧИСЛО" ....    
 
КАК ВЫЙТИ ИЗ ДАННОЙ СИТУАЦИИ ???
 
Высавь-те время по Калининграду т.е там 0 а в Москве +1
 
{quote}{login=Микки}{date=13.01.2011 04:57}{thema=}{post}Высавь-те время по Калининграду т.е там 0 а в Москве +1{/post}{/quote}  
 
... не совсем удобно, ведь мы находимся в Москве и пользователи будут путаться ...
 
вариант такой, правда из-за если файлик может поправиться :)
 
или так, в ту же ячейку, сразу я со скобками запутался  
=ЕСЛИ(C5>=0;СУММ(ТДАТА();ВРЕМЯ(C5;0;0));((ТДАТА()-ВРЕМЯ(-C5;0;0))))
 
А Вы не пытайтесь время -1 час писать. Для Ехс - время и дата это число, а отрицательные числа отображаются лехко:)  
мне понравился вариант Микки. В 1 ячейку ТДАТА() для контроля текущей даты/времени и таблица соответствий с разницей по времени (оформить на другом листе). Калининград вводим как -1/24 и оставляем в числовом формате:)  
Игорь67
 
Ребятки, спасибо за помощь, однако возник следующий вопрос:  
Как сделать так, чтобы время в ячейках, содержащих вышеперечисленные формулы уточнялось ежеминутно, а не дожидалось какого-либо события ???  
Так как бывает такое, что системное время "убегает вперед", а в таблице останавливается ??
 
А это уже только с использованием нескольких строк VBA. Возможно, тогда и определение времени городов лучше перевести в код?
 
{quote}{login=vikttur}{date=15.01.2011 10:53}{thema=}{post}А это уже только с использованием нескольких строк VBA. Возможно, тогда и определение времени городов лучше перевести в код?{/post}{/quote}  
... признаюсь, мне это не по силам, но предложение, думаю, будет наиболее подходящим и объем файла возможно уменьшится ...
 
Смотрите вариант. Поставлен пересчет ячейки с ТДАТА() каждую минуту. Запуск макросов должен быть разрешен. Макросы в модуле1 и в модуле ЭтаКнига.
 
Ребята, а можно ли такое воплотить в жизнь ???  
Уже сделано:  
По двойному щелчку в столбце "Город", в случае если ячейка не является пустой, появляется MsgBox и указывает разницу во времени между Москвой и выбранным  городом.  
 
Необходимо:  
Чтобы при двойном клике по ячейке с названием города (Лист1) происходило следующее:  
1. Макрос находил на Листе2 соответствующую разницу во времени.  
2. Уточнял текущее системное время.  
3. Расчитывал разницу и уже затем выдавал результат в MsgBox  (т. е. чтобы мы не растягивали формулы с ТДАТА по листу и тем самым несколько разгрузили файл.  
 
Наработка во вложении
 
Со вторым пунктом не проблема: добавьте в MsgBox?  
Format(Now, "hh:mm:ss")  
А вот с третьим пунктом... Что рассчитывать? Разница ведь у Вас уже известна.
 
Так?  
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
   Dim iLastRow As Long, dRazn As Double, dTime As Date  
   If Target.Cells.Count > 1 Then Exit Sub  
   iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   On Error Resume Next  
   If Not Intersect(Target, Range("A2:A" & iLastRow)) Is Nothing Then  
       dRazn = WorksheetFunction.VLookup(Target, Лист2.Range("A:B"), 2, 0)  
       dTime = Now() + dRazn / 24  
       'MsgBox WorksheetFunction.VLookup(Target, Лист2.Range("A:B"), 2, 0)  
       MsgBox "Разница во времени между г. Москва и г. " & Target.Value & " составляет - " _  
              & dRazn & " часа(ов)." & Chr(10) & "в г. " & Target.Value & " сейчас - " & Format(dTime, "hh:mm")  
       Cancel = True  
   End If  
End Sub
 
{quote}{login=Igor67}{date=15.01.2011 06:47}{thema=}{post}Так?  
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
   Dim iLastRow As Long, dRazn As Double, dTime As Date  
   If Target.Cells.Count > 1 Then Exit Sub  
   iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   On Error Resume Next  
   If Not Intersect(Target, Range("A2:A" & iLastRow)) Is Nothing Then  
       dRazn = WorksheetFunction.VLookup(Target, Лист2.Range("A:B"), 2, 0)  
       dTime = Now() + dRazn / 24  
       'MsgBox WorksheetFunction.VLookup(Target, Лист2.Range("A:B"), 2, 0)  
       MsgBox "Разница во времени между г. Москва и г. " & Target.Value & " составляет - " _  
              & dRazn & " часа(ов)." & Chr(10) & "в г. " & Target.Value & " сейчас - " & Format(dTime, "hh:mm")  
       Cancel = True  
   End If  
End Sub{/post}{/quote}  
 
 
Igor67, преклоняюсь перед вашими знаниями и навыками.  
Огромное вам спасибо !!!
 
Извините, разлогинился ...  
Igor67, преклоняюсь перед вашими знаниями и навыками.  
Огромное вам спасибо !!!
Страницы: 1
Читают тему
Наверх