Ru-Board.club
← Вернуться в раздел «Программы»

» Excel FAQ (часть 2)

Автор: aks_sv
Дата сообщения: 04.05.2007 21:25
SERGE_BLIZNUK

Цитата:
программка на VBA
Подробнее...

Не знаю, я наверно что-то не догоняю - не работает
Сделал вроде все как надо.





Добавлено:
SERGE_BLIZNUK

Цитата:
программка на VBA
Подробнее...

Не знаю, я наверно что-то не догоняю - не работает
Сделал вроде все как надо.

[img] [/img]
[img] [/img]
[img] [/img]
Автор: SERGE_BLIZNUK
Дата сообщения: 05.05.2007 06:20
aks_sv
извините. Это был мой косяк (не определил переменную, а во время тестирования опция "Require Variable Declaration" вероятна была выключена... ;-(( )
попутно поправил ещё пару проблемных мест (например, код работал только если активной была книга1 и с определением последней заполненной строчки в столбцеA)
[more=вот исправленный код]

Модуль переноса недостающих данных с одного листа (w2) на другой лист (w1).
Имена нужных книг/листов прописать в Set w1 = ... Set w2 = ...


Код: [no]
Public Sub AddMissingDataFromSheet2()
' оригинальная идея: (c) AndVGri
'В редакторе VBA в меню Tools, пункт Reference
' в диалоге поставте галочку для Microsoft Scripting Runtime.

Dim pAll As New Scripting.Dictionary
Dim rowLast As Long, Column_A As Long, RowLast2 As Long
Dim RowNewCount As Long
Dim w1 As Worksheet, w2 As Worksheet
Dim iRow As Long, iCol As Long, vEntry As String

Set w1 = Workbooks("Книга1.xls").Worksheets("Лист1")
Set w2 = Workbooks("Книга2.xls").Worksheets("Лист1")

Column_A = 1&
rowLast = Cells(w1.UsedRange.Rows.Count + 1, Column_A).End(xlUp).Row

' сохраним весь столбец А в Scripting.Dictionary для удобства поиска
For iRow = 1& To rowLast
vEntry = CStr(w1.Cells(iRow, Column_A).Value)
If Not pAll.Exists(vEntry) Then
pAll.Add vEntry, iRow
End If
Next iRow

RowNewCount = rowLast + 1
RowLast2 = w2.Cells(w2.UsedRange.Rows.Count + 1, Column_A).End(xlUp).Row
If RowLast2 > 60000 Then
MsgBox "Ой, что-то не так со вторым листом... Ничего не делаем!"
Exit Sub
End If
For iRow = 1& To RowLast2
vEntry = CStr(w2.Cells(iRow, Column_A).Value)
If Not pAll.Exists(vEntry) Then
w1.Cells(RowNewCount, Column_A).Value = vEntry
RowNewCount = RowNewCount + 1
End If
Next iRow

End Sub
[/no]
Автор: aks_sv
Дата сообщения: 05.05.2007 08:23
SERGE_BLIZNUK
Преогромное СПАСИБО! Дальше дело техники

Добавлено:
SERGE_BLIZNUK

Цитата:
(например, код работал только если активной была книга1 и с определением последней заполненной строчки в столбцеA)

А все-таки Книга1 должна быть активной, иначе не получается, но это не важно. Еще раз спасибо.

Автор: ZORRO2005
Дата сообщения: 05.05.2007 15:42
belialds
Это можно сделать в EXCEL 2007
Главная-Условное форматирование-Наборы значков
А там в зависимости от значений меняешь цвет и значки
Кстати попробовал сделать это в EXCEL 2003.
Пришлось использовать функцию СМЕЩ.
Автор: CEMEH
Дата сообщения: 05.05.2007 22:03
Как сделать сортировку следующей таблицы?

приб    №пп1    простой    №пп2    отправлен
0:27    1    5:24    22    0:05
1:10    2    5:30    23    1:00
2:05    3    3:10    1    3:37
4:27    4    3:20    2    4:30
4:50    5    3:31    3    5:36
5:13    6    9:54    24    6:23
6:22    7    8:18    25    7:33
7:43    8    3:33    4    8:00
8:10    9    5:36    5    10:26
9:00    10    6:24    6    11:37
11:02    11    5:44    7    12:06
12:05    12    5:39    8    13:22
12:16    13    6:01    9    14:11
12:29    14    5:27    10    14:27
14:26    15    3:38    11    14:40
14:50    16    3:33    12    15:28
15:13    17    4:23    13    16:39
15:38    18    4:56    14    17:25
18:08    19    3:14    15    17:40
18:21    20    3:20    16    18:10
18:36    21    3:24    17    18:37
19:19    22    4:34    18    20:12
20:30    23    20:57    26    20:22

Прибытие локомотива на станцию и отправление - время фиксировано. Необходимо подогнать пибывший локомотив к отправлению с минимальным простоем (можно ставить нумерацию №пп1 и №пп2) или что бы ячейки (№пп2 и отправление) перетаскивались сами под минимальный простой
Автор: ZORRO2005
Дата сообщения: 06.05.2007 14:00
CEMEH
Посмотри тут.
Автор: CEMEH
Дата сообщения: 06.05.2007 16:14
ZORRO2005
Пересмотрел страницы... Странно, что я этого еще не сделал. Конечно, огромное спасибо!

Мда. Современные компьютеры очень навороченные, но заставить их сделать что то весьма сложно.
На Бейсике 80-х годов я все нынешние задачи решал бы гораздо быстрее. Любые попытки что то освоить и применить тонут в пропасти необъяснимости.

А сортировать придется вручную на бумажке. Так будет быстрее чем пользовать для этого одно из творений Билла...
Автор: ZORRO2005
Дата сообщения: 06.05.2007 17:12
CEMEH
Выложи пример.
Так как не все понятно в задании.
Автор: AndVGri
Дата сообщения: 06.05.2007 17:36
CEMEH
Ещё бы понять, что тебе нужно сделать с этой таблицей столбец "простой" последняя строка 20:57 - это время простоя или чего? Поподробнее. А Basic в Excel есть и так
Автор: CEMEH
Дата сообщения: 06.05.2007 19:57
Вот пример (там же и описание задачи)
http://dnv52.narod.ru/vedomost.xls
Буду весьма признателен.

Придется изучать excel-бейсик )))
Автор: ZORRO2005
Дата сообщения: 06.05.2007 23:27
CEMEH
Задача вроде понятна.
Вопрос вот какой:
Поезд ведь не может уйти без локомотива?...
Соответственно под каждый уходящий поезд есть запас из нескольких локомотивов?
Ограничение только в том что локомотив должен отдыхать минимум 2 часа 28 минут.
Так как в результате надо получить минимальный общий простой локомотивов,
может ли один(или не один) локомотив стоять очень долго и насколько долго?

То что выше я сам себя запутал.
А потом решил пойти по другому пути:
Я представил прибытие,отбытие и разницу во времени как обычные числа
И вот что получилось

Получается,что Подвязку можно делать по старинке FIFO т.е первый пришел-первый ущел(только с перерывом min 2 часа 28 минут).А если ты будешь менять поезда то общий простой все равно не уменьшится.

Окончательный вариант здесь:
http://slil.ru/24336079

Автор: belialds
Дата сообщения: 07.05.2007 09:58
ZORRO2005
Спасибо - думаю что в остальном постараюсь разобраться, кстати я как раз и забыл сказать что стоит Excell 2007/
Автор: Tarasyan
Дата сообщения: 07.05.2007 16:01
Подскажите как на одном листе зделать формат страницы альбомную и книжную? У меня первая альбомная, а остальнные три книжные.
Автор: Mushroomer
Дата сообщения: 07.05.2007 17:39
Tarasyan
Имхо не сделать это для одного листа. Это в Word можно для выделенного фрагмента указать тип страницы. А Excel у тебя какой?
Автор: CEMEH
Дата сообщения: 07.05.2007 21:06
ZORRO2005
Супер!! Спасибо огромное!!!

Надо только вникнуть в эту функцию ВПР и можно творить чудеса!!!
Автор: Tarasyan
Дата сообщения: 07.05.2007 21:25
Mushroomer
2007 на одной машине и 2003 на другой
Автор: Markes
Дата сообщения: 08.05.2007 09:44
Excel 2003. Есть документ, на одном листе список (несколько строк), на другом выпадающий список. Вопрос: как включить список с отдельного листа в этот выпадающий список?
Автор: ZORRO2005
Дата сообщения: 08.05.2007 09:45
CEMEH
Подправил немного файл.
Теперь правильно считает сумму простоя локомотивов.
Надо формат ставить [ч]:мм
,тогда суммировать будет время правильно

http://slil.ru/24342487

Добавлено:
Markes
Присвоить Имя Списку
а в Данные-Проверка-Источник
не забыть поставить равно =ИмяСписка
Автор: Markes
Дата сообщения: 08.05.2007 11:51
ZORRO2005

Цитата:
Присвоить Имя Списку

Выпадающему списку или статичному на отдельном листе (фактически несколько заполненных ячеек)? Не вижу как задать имя этому статичному списку...
Автор: AndVGri
Дата сообщения: 08.05.2007 12:27
Markes
Выделяешь список. Меню Вставка/Имя/Присвоить... вводишь имя списка. Или проще, слева от поля ввода формул (отображает индексы текущей ячейки) для выделенного списка вводишь имя
Автор: gpsman
Дата сообщения: 08.05.2007 12:35
Markes

Цитата:
Не вижу как задать имя этому статичному списку...

Выделяешь ячейки и вверху слева прямо над буквой А вбиваешь название списка
Автор: Markes
Дата сообщения: 08.05.2007 12:47
gpsman

Цитата:
Выделяешь ячейки и вверху слева прямо над буквой А вбиваешь название списка

Спасибо. Вроде оно
Автор: keynn
Дата сообщения: 08.05.2007 17:02
Привет народ. Тут возникла такая трудность - нужно фильтровать столбец с числами по содержанию совпадющей последовательности вот примерчик визуальный.


Два числа содержат последовательность 75 - это 7017525 и 7017521 - по идее они должны отфильтроваться - но в итоге пропадае вобще все - подскажите в чем грабли?
Автор: AndVGri
Дата сообщения: 08.05.2007 18:29
keynn
"Грабли" в том что это числа. Переведи их в текст в соседней колонке =Текст(A1; "0") и по ней - содержит 75 - фильтруется
Автор: VictorAsp
Дата сообщения: 08.05.2007 18:32
Есть ли где-нить пользовательская функция типа
case ? т.е. многоуровневая ЕСЛИ, вложения ЕСЛИ на душу не ложаться
И подскажите где почитать подробно (с не финансовыми примерами) про Pivot Tables? Надо просуммировать некоторые элементы в области строк (не данных).
Автор: CEMEH
Дата сообщения: 08.05.2007 19:24
ZORRO2005
А ведь я, наверное, не со всем правильно сформулировал задачу..
Дело в том, что синеньких циферок (номерочков) изначально нет их надо ставить руками (но хочется автоматически) прибывший локомотив с минимальным простоем к отправляющемуся поезду. А остальное (столбцы E, F сделаны красиво)

С форматом суммы часов простоя разобрался сразу.

пс. Надо отоспаться после всех этих формул. может что и надумаю
Автор: SERGE_BLIZNUK
Дата сообщения: 08.05.2007 20:10
VictorAsp

Цитата:
где-нить пользовательская функция типа
case ? т.е. многоуровневая ЕСЛИ, вложения ЕСЛИ на душу не ложаться

Вы задали вопрос не в теме программирования, а теме использования Excel - поэтому вот решение без использования VBA (правда, прийдётся создавать таблицу с данными для вашего case):


3) Как учил нас Robert ( http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=19106&start=1360#5 ) ;-))
вложенные многократно ЕСЛИ удобно заменять на функции поиска в таблице (таблицах).


надеюсь, что помог...
Автор: ZORRO2005
Дата сообщения: 09.05.2007 00:27
CEMEH

Цитата:
Дело в том, что синеньких циферок (номерочков) изначально нет

Я понял что нет изначально.
Я выше писал:

Цитата:
Получается,что Подвязку можно делать по старинке FIFO т.е первый пришел-первый ущел(только с перерывом min 2 часа 28 минут).А если ты будешь менять поезда то общий простой все равно не уменьшится.

Если локомотив 2328 приходит в 0:02+2:28=2:30,
ближайший поезд 2309 уходит 2:50.
Им обоим ставим одинаковый номер,а дальше +1 №каждому послед локомотиву
и поезду.Всё.
Автор: keynn
Дата сообщения: 09.05.2007 00:32
AndVGri

Цитата:
"Грабли" в том что это числа. Переведи их в текст в соседней колонке =Текст(A1; "0") и по ней - содержит 75 - фильтруется


Жесковато - а если в колонке до нескольких тысяч ячеек цыфрами заполнены - это чего каждую так перелопачивать? - Странно, на такой кзалось бы простейшей операции такой замороченый затык. - Другого выхода нет? - Кстати если перед числами добавить любую букву - тоже все работает.
Автор: SERGE_BLIZNUK
Дата сообщения: 09.05.2007 00:57
keynn
Цитата:
Жесковато - а если в колонке до нескольких тысяч ячеек цыфрами заполнены
а что выделить диапазон в несколько тысяч ячеек и нажать вставить - это очень "жестковато"?!?!?! на вашем фильтре написано "строки, содержащие" ....
а числа - это НЕ СТРОКИ!

Цитата:
Кстати если перед числами добавить любую букву - тоже все работает.
да ну?! Но ведь об этом Вам и пытаются рассказать — тогда это будут не числа - а СТРОКИ. а фильтрация содержимого как раз со строками и работает!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Дайте рабоч ссылку плзз на MultiSet (1.9 и более) с crack


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.