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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2016, 14:26   #1
taxion
 
Регистрация: 15.09.2014
Сообщений: 8
По умолчанию Автоматическая сортировка при вводе нового значения

Уважаемые программисты,
помогите с макросом или формулой, что бы при вводе нового значения в столбец "Время" эта строка, со всеми данными в столбцах расположенных слева, занимала место по ранжиру от меньшего к большему. Пробовал через формулу=РАНГ(G6;$G$2:$G$200;1) в столбце "место". Это самое место проставляется, но как еще "1место" поднять сразу на первую строчку?
Вложения
Тип файла: zip Протокол с подбором номера.zip (22.4 Кб, 19 просмотров)
taxion вне форума Ответить с цитированием
Старый 04.02.2016, 14:55   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в модуль листа2 добавьте такую процедуру
Код:
Sub RangTbl()
  Dim r As Long
  r = Cells(Rows.Count, 2).End(xlUp).Row
  With Me.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Range("G3:G" & r), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Range("B2:H" & r): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin
    .Apply
  End With
End Sub
там же, в этот фрагмент кода
Код:
    If Not Intersect(Target, Range("G2:G100")) Is Nothing Then
        With Target
            vVal = Format(.Value, "000000")
            If IsNumeric(vVal) And Len(vVal) = 6 Then
                Application.EnableEvents = False
                .Value = Left(vVal, 2) & ":" & Mid(vVal, 3, 2) & ":" & Right(vVal, 2)
                .NumberFormat = "[h]:mm:ss"
            End If
        End With
     End If
добавьте 1 строку
Код:
    If Not Intersect(Target, Range("G2:G100")) Is Nothing Then
        With Target
            vVal = Format(.Value, "000000")
            If IsNumeric(vVal) And Len(vVal) = 6 Then
                Application.EnableEvents = False
                .Value = Left(vVal, 2) & ":" & Mid(vVal, 3, 2) & ":" & Right(vVal, 2)
                .NumberFormat = "[h]:mm:ss"
            End If
        End With
        RangTbl
     End If
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.02.2016, 16:06   #3
taxion
 
Регистрация: 15.09.2014
Сообщений: 8
По умолчанию

Спасибо!
Все замечательно работает, единственное поправил в Вашем модуле

Sub RangTbl()
Dim r As Long
r = Cells(Rows.Count, 2).End(xlUp).Row
With Me.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("G3:G" & r), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("C2:G" & r): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin
.Apply
End With
End Sub

диапазон (В2:H) на (С2:G) т.к. сортировка цепляла и столбец "место", а столбец H нет смысла трогать там формула без относительно строки...
Еще раз спасибо.

Последний раз редактировалось taxion; 04.02.2016 в 16:12.
taxion вне форума Ответить с цитированием
Старый 04.02.2016, 16:30   #4
taxion
 
Регистрация: 15.09.2014
Сообщений: 8
По умолчанию

ОНО конечно не в тему, но.....
Вы наверное видели в модуле процедуру для быстрого ввода времени, без нажатия клавиш разделителей. В фрагменте для столбца G все отлично, но вот в других вариантах формата я пытался в:
.Value = Left(vVal, 2) & ", " & Right(vVal, 3) & """"
вместо двоеточия поставить апостроф и кавычки, что бы представить в ячейках данные как минуты, секунды в привычном виде. Все реализуется великолепно, в плане визуализации, но видимо в этом случае, формат уже получается не "время" т.к. складывать эти данные не получается.... Хотя формат же вроде задается здесь:
.NumberFormat = "ss,ssss"
Может это не корректный пример, с секундами, но я и тут
.Value = Left(vVal, 2) & ":" & Right(vVal, 2)
.NumberFormat = "[h]:mm"
тоже пытался аналогично поменять двоеточие... Итог тот же например суммировать данные не получается, а очень нужно.
taxion вне форума Ответить с цитированием
Старый 04.02.2016, 16:53   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

из рассказа я не понял в чем проблема, а вот во вложенном файле небольшая иллюстрация обмана в екселе. см. формулы в колонке М

видите 1+2 = 5
потому что в ячейке К2 на самом деле 3, а форматом показано 1, но в сумму-то приходит то, что лежит в ячейке, а не не то, что показано форматом
Вложения
Тип файла: rar Протокол с подбором номера.rar (24.8 Кб, 17 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.02.2016, 18:08   #6
taxion
 
Регистрация: 15.09.2014
Сообщений: 8
По умолчанию

Все, понял... на примере
Можно ли сделать что бы представление было как в столбце "К", а данные "время". Для данного примера "ss,sss" т.е 14,333 сек. В других случаях: hh:mm'ss" = 22:12:33?
Вложения
Тип файла: zip Протокол с подбором номера.zip (24.2 Кб, 12 просмотров)
taxion вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание новой строки (снизу) при вводе значения в ячейку Z0RGE Microsoft Office Excel 2 17.04.2015 21:10
Программа для проверки совпадения со списком при вводе значения в БД 1С Dimmbass Софт 0 12.02.2014 10:18
Получение значения при вводе определенного значения armanmal Microsoft Office Excel 6 21.11.2011 17:30
При вводе значения в ячейку нужно изменить ее размер skobarka Microsoft Office Excel 2 26.09.2008 16:35
Как мне сделать так штоби при вводе массива все значения сами переносились по словам. Помогити плиз KSP Общие вопросы Delphi 7 24.09.2007 22:44