Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 09.09.2009, 16:39   #21
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

сам код - Alt+F11 и дальше там выбрать в меню слева (модуль 1)... Если не получается, попробуйте выйти из Эксела и снова файл открыть
motorway вне форума   Ответить с цитированием
Старый 09.09.2009, 17:07   #22
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,220
По умолчанию

Цитата:
эти формулы на вашем листе я так и не нашёл, потом сегодня заметил, что они скрыты и разбросаны в произвольных ячейках на листе и не отображаются
формул, которые я описывал нет на листе. формуле присвоено имя, везде, где написано имя подразумевается, что работает скрытая за этим имемем формула.
На листе есть только еще одна ячейка с формулой, которая проверяет чтобы количество 0:00 соответствовало количеству 0:20. Если вместо одного 0:20 написать например 0:21, то вся логика, которую я там настроил рушится, но эта формула предупреждает, что данные содержат ошибку.

2 DV68:
Цитата:
ни и ки, они ведь формулы массива?
нет, но работают с массивами. Есть функции, которым один из аргументов должен быть массив, например сумм или наибольший.
напишите в одну ячейку
=сумм(A1:A5)+сумм(B1:B5)
в другую
=A1:A5+B1:B5
в третью
{=A1:A5+B1:B5} как формулу массива
в 1-м случае получите сумму всех значений из диапазона А1:В5.
во 2-м - сумму значений из ячеек А1 и В1
в 3-м - туже сумму что и во втором.

обсуждения меня подвинули упростить формулы, можно использовать следующее:
Код:
дано=ДВССЫЛ("R1C1:R" & СЧЁТ(Лист1!$A:$A) & "C1";)
ни=НАИБОЛЬШИЙ((дано=ВРЕМЯ(;;))*СТРОКА(дано);Нмр)
ки=НАИБОЛЬШИЙ((дано=ВРЕМЯ(;20;))*СТРОКА(дано);Нмр)
теоретически могу допустить, что должно быстее работать, чем предыдущий вариант.
IgorGO на форуме   Ответить с цитированием
Старый 09.09.2009, 20:35   #23
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
сам код - Alt+F11 и дальше там выбрать в меню слева (модуль 1)... Если не получается, попробуйте выйти из Эксела и снова файл открыть
Пасиб, помогло, теперь вижу коды как на вашем листе, так и на листах, которые выполнены другими программёрами. Возник вопрос по вашему коду.
Cells(k, 8) = i - здесь видно переменную k. Но непонятно каким образом вы указали выгрузку значений конкретно во временную ячейку Н1. 8 - это случайно не номер столбца, по которому вы задаёте координату ячейки?
Cells(l, 9) = i - ну здесь понятно, указана ячейка L, туда она и выгружается как полагается.
Tidus вне форума   Ответить с цитированием
Старый 09.09.2009, 20:42   #24
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

да, 8 - это именно номер столбца. При k=1 будет H1, k=2 -> H2, и т.п.
motorway вне форума   Ответить с цитированием
Старый 09.09.2009, 20:53   #25
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
да, 8 - это именно номер столбца. При k=1 будет H1, k=2 -> H2, и т.п.
Ок, теперь понятно, у вас код более читабельный и понятный для меня. Хотя и вычисляется медленнее. (Просто если бы вы написали именно переменную h, а не k - вопросов бы не было)
У SAS888 код более качественно выполнен - не занимает ячейки и работает очень быстро, но мне не очень понятен. Если он его распишет, может быть что-то будет ясно.
У IgorGo - код вообще экзотический, наверное самый сложный из всех, настоящий профи написал. Пока я ещё не разобрался как его перенести в новую книгу.
Tidus вне форума   Ответить с цитированием
Старый 09.09.2009, 20:55   #26
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

в моем коде k и l просто так названы, к названию столбцов не имеют отношения. Cells(x,y) задает ячейку на пересечении x-й строки и y-го столбца.
motorway вне форума   Ответить с цитированием
Старый 09.09.2009, 21:16   #27
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
...
а в вашем коде i - является переменной? Вопрос возник просто потому, что было непонятно, как так, - всего одна переменная участвует сразу в двух строках:
Cells(k, 8) = i
Cells(l, 9) = i
Tidus вне форума   Ответить с цитированием
Старый 09.09.2009, 21:23   #28
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Да, является, конечно. i - переменная для номера строки.
И использовать ее можно много раз - в 1 случае для начала интервала, в другом - для конца.
Возможно, это как-то упрощается....
(я потом понял, что следовало сделать только один счетчик - начало и конец интервала. То есть из 2 переменных l и k можно было оставить одну.)
У меня в один столбец (H) заносятся концы интервалов, в другой (I) - начала.

Если Вы закомментируете строку с очищением временных ячеек, то увидите, что справа будут стоять номера строк начала интервала, а слева (H) - концы. Потом по ним проходим и составляем формулы

Последний раз редактировалось motorway; 09.09.2009 в 21:26.
motorway вне форума   Ответить с цитированием
Старый 09.09.2009, 22:14   #29
Tidus
Форумчанин
 
Регистрация: 08.09.2009
Сообщений: 133
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Возможно, это как-то упрощается.... (я потом понял, что следовало сделать только один счетчик - начало и конец интервала. То есть из 2 переменных l и k можно было оставить одну.) У меня в один столбец (H) заносятся концы интервалов, в другой (I) - начала.
Если Вы закомментируете строку с очищением временных ячеек, то увидите, что справа будут стоять номера строк начала интервала, а слева (H) - концы. Потом по ним проходим и составляем формулы
Если есть желание, можете оптимизированный код прямо сюда выложить, будет интересно.
Впринципе комментировать строку необязательно, - их итак видно - в момент нажатия на кнопку - я эту фишку уже просёк.
Tidus вне форума   Ответить с цитированием
Старый 09.09.2009, 22:48   #30
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Ловите оптимизированный код. Оставлена одна переменная для числа интервалов ( l ), цикл тоже один теперь. Временные ячейки не используются. Можете проверить на своих данных, насколько быстрее стало и сообщите.

Код:
Sub Кнопка1_Щелчок()

Application.ScreenUpdating = False



l = 1
r = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1


For i = 1 To r
If (Cells(i, 1).Text = "0:00") Then

nach = i
l = l + 1

End If


If (Cells(i, 1).Text = "0:20") Then
konec = i
Range("C" & l - 1).Formula = "=MAX(B" & nach & ":B" & konec & ")"

End If
Next i

Application.ScreenUpdating = True


End Sub
motorway вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
5 максимальных значений в сводной таблице в новом Excel Катик7 Microsoft Office Excel 2 03.09.2009 17:26
Случайный выбор значений из списка Stoodentka Microsoft Office Excel 4 14.07.2009 07:56
Выбор значений по отдельной группе michi SQL, базы данных 2 15.10.2008 22:35
Запись файлов в *.тхт с учетом повторяющихся значений Arteom Общие вопросы Delphi 3 03.04.2008 17:26
выбор значений в цикле Melok Паскаль, Turbo Pascal, PascalABC.NET 3 15.12.2007 23:56


20:07.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.