PDA

Показать полную графическую версию : [архив] Microsoft Excel


Страниц : 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18

Partizan
16-09-2004, 22:14
Заходишь в меню Сервис -> Параметры
На вкладке Общие убрать флаг "Стиль ссылок R1C1"

Guest
17-09-2004, 02:57
Спасибо!

bollingbroke
18-09-2004, 21:20
Всем привет! Пытаюся накропать что-нибудь для осмечивания строительных работ.
Вопрос следующий:
В "Поле с выпадающим списком" юзер выбирает вид работ; в соответствии с выбором в бланк сметы вставляется несколько строк с данными из таблицы (трудозатраты там, ценники и пр.). Юзер работает с вставленными данными. Затем операция повторяется - выбор работы ... и т.д. Каждый раз количество строк разное - например, для ручных земляных работ таких строк - 5, а для механизированных - уже 8.
Так вот:
а) как сделать так, чтобы в бланк сметы добавлялось именно НУЖНОЕ количество строк с данными;
б) как СОХРАНИТЬ в форме уже внесенные строки при добавлении новых видов работ из того же "Поля..."

Если Эксель такого не может - буду учить Васик (коды, примеры ... приветствуются).

Сметные программы не предлагать, хочу заточить под себя (да и в будущем, может, понадобится).

Заранее спасибо,
с уважением, broke

Greyman
19-09-2004, 00:20
bollingbroke
Если Эксель такого не может - буду учить Васик
Вообще-то без него ты этого в Экселе и не сделаешь. Как раз с помощью него подобные операции и автоматизируются.
* * И не совсем понял, что имелось в виду в пункте "б"... Если честно, то совсем не понял...

bollingbroke
19-09-2004, 00:35
Про п. б)

Когда выбран один вид работы, проявилось необходимое количество строк с данными (с помощью VBA и только, кстати?), внесены необходимые изменения в бланке сметы (ну, например, изменена часовая ставка, объем работ и пр.), юзер вибирает из ТОГО ЖЕ "Поля..." другой вид работ. Соответственно, надо, чтобы первый вид работ остался на бланке сметы, а второй добавился ПОСЛЕ первого. Вот это, кстати, важнее.

С уважением, broke

Oaky
20-09-2004, 20:07
А почему бы не сделать свое ПОЛЕ для каждого вида выполненных работ? Тогда с помощью INDEX через Cell link автоматом выпадают соответствующие значения из таблицы (и столько, сколько необходимо). Так можно обойтись без VBA.

Vadikan
27-09-2004, 06:35
Доброго времени суток!

Возникла необходимость подсчитывать производительность труда работников еженедельно, а также суммировать еженедельные данные в течении года. Прежде чем приступить к работе, хотелось бы посоветоваться с общественностью :) Поскольку из доступных средств, на мой взгляд, самым удобным является Excel, то от него и буду отталкиваться.

Ссылка (http://portfolio.iu.edu/vsterkin/Temp/_product.rar) - архив, с двумя файлами о которых речь пойдет чуть ниже.

Исходные данные

Исходные данные представляют собой отчет, созданный в проприетарной программе, которая умеет, однако, экспортировать данные в XLS. Менеджер должен снимать отчет еженедельно, т.к. база данных затирается в течении нескольких недель (т.е. снять отчет за два месяца или за год просто невозможно). В архиве файл Productivity_Raw.xls, который и представляет собой экспорт из базы данных, с произовдительностью за неделю. Назначение цифр по большому счету не существенно и частично проясняется из второго файла (Productivity_Macro.xls). Отмечу, что в первом столбце в оригинальном исходном файле не цифры, а фамилии работников. Просто менеджер заменила имена цифрами из соображений конфиденциальности.

Промежуточные данные (еженедельные)

В принципе, привести данные в божеский вид несложно. Я записал макрос, который это делает (именно записал, т.к. VB для меня темный лес). Он встроен во второй файл Productivity_Macro.xls (CTRL+SHIFT+P). В таком виде данные уже можно вывесить на всеобщее обозрение, ИМХО. Кстати, вместо фамилий в первом столбце так и останутся цифры, разве что их отсортируют по возрастанию, чтобы было не вычислить кто под каким номером скрывается. Также, столбец G (Hours) я скрыл, т.к. он не нужен на всеобщем обозрении, но может понадобится для будущих вычислений.

Кумулятивная годовая таблица

Вот на основе таких еженедельных отчетов и нужно создать кумулятивную годовую таблицу. Нужно чтобы она автоматически обновлялась по мере добавления новой информации (т.е. еженедельно). Она должна содержать точно такие же столбцы как таблица в файле Productivity_Macro.xls, просто данные в ней будут накопительные за год.

Какие у меня есть идеи

Честно говоря, ничего изящного я пока не придумал. Конечно, можно создать 52 одинаковых листа (по одному на каждую неделю), вносить в них еженедельно данные, а в 53ем листе сделать кумулятивную таблицу. Создать 52 листа несложно, но я не очень хорошо представляю, как сделать формулу, которая просуммирует все данные. Т.е. я знаю как ее создать вручную для одной ячейки и как скопировать в остальные, но кликать по 52 листам мне не очень хочется :) Возможно, у кого-нибудь найдется более изящное решение.

Дополнительная информация

Таблица должна работать с минимальным вмешательством пользователя, т.к. менеджер весьма слабо представляет возможности Excel. Пример: она не знала о возможности экспорта из проприетарной программы в Excel и на протяжении нескольких лет (!) вбивала данные в Excel руками, а затем вывешивала на всеобщее обозрение. Предполагаю также, что она суммировала годовые значения на калькуляторе. Предположение основано на том, что данные она вбивала по четыре числа в столбик, разделяя числа пробелами. Я-то думал, что это экспорт в таком виде происходит :) В общем, автоматизация сохранит ей несколько рабочих дней в году, если не целый месяц :)

В течение года возможны увольнения или добавления сотрудников. В принципе, я планирую сделать таблицу с небольшим запасом, что впрочем видно по кол-ву строчек. Чтобы не отображалась ошибка деления на ноль используется =IF(D5=0, "",C5/D5)

Остальные детали изложу по требованию. Буду признателен за любые советы. Спасибо за внимание.

ShaRP
27-09-2004, 09:49
Создать 52 листа несложно, но я не очень хорошо представляю, как сделать формулу, которая просуммирует все данные.
=СУММ(Лист1:Лист3!A1)
- вот такие форумулы, и будет тебе счастье.

Набросаю схему. В принципе, такие вещи на Excel делаются (делал сам нечто подобное годочков 6 назад, только не по неделям, а по месяцам).

1) Надо будет еще создать нечто вроде ryba.xls - "недельного" файла, только пустого.

Затем сделать его 52 копии, потом простым копированием и автозаменой 52 листа, данные в которых будут ссылаться через связи на файлы data00.xls-data52.xls.

После этого, если сделать все аккуратно, останется только вовремя заменять соответствующий dataXX на результаты нужной недели, и открывать итоговый файл - через связи данные в нем будут обновляться и суммироваться автоматом.

Проблему я вижу пока что только одну - что делать, если меняеся список сотрудников?

Vadikan
27-09-2004, 12:35
ShaRP
=СУММ(Лист1:Лист3!A1)Спасибо, попробую. Сейчас уже не буду проверять, т.к. сплю почти ;-)
Затем сделать его 52 копии, потом простым копированием и автозаменой 52 листа, данные в которых будут ссылаться через связи на файлы data00.xls-data52.xls.В чем преимущество метода с 52 файлами над одним файлом с 52 листами? Мне кажется, 52 файла сложнее...  
Проблему я вижу пока что только одну - что делать, если меняеся список сотрудников?Именно! Хоть с 52 файлами, хоть с одним - это проблема. Если где-то через полгода появится новый человек, то придется править предыдущие 26 листов/файлов, добавляя строку в каждый из них, а также в кумулятивный лист/файл. Можно в принципе и макрос записать, а потом пройтись по всем листам. По файлам будет немного дольше, наверное. Но это непростой вариант...

Greyman
27-09-2004, 16:59
Vadikan
Как это вижу я:
1) Все экспортированные еженедельные данные лежат каждый в своем файле.
2) Кумулятивная таблица лежит в отдельном файле, где на первом листе сама таблица, а на втором - т.н. "защита от дурака" на случай, чтоб кто-нить не проссумировал одну и туже неделю несколько раз (об этом ниже, но можно и совсем без этого, просто опыт показывает, что будь ты хоть кем, но рано или поздно ошибки случаются).
3) Наш макрос делает следующее:
3.1)Открывает окно "открыть файл". Там пользователь выбирает файл с неделбным отчетом, который надо приплюсовать к годовой таблице.
3.2)Макрос находит первую строку с самими данными (если форма отчетов будет постоянной, то достаточно один раз ее определить и жестко забить в сам макрос, напр. в твоем примере это - 3).
3.3) Макрос берет из первой строчки индекс человека и ищет его куммулятивной таблице.
3.4а) В случае нахождения индекса он обновляет содержимое соответствующих ячеек прибавляя к ним данные из недельного отчета.
3.4б) Если индекс не находиться (в качестве флага конца таблици можно использовать достижение пустой ячейки в столбще индексов), то данные из недельного отчета записываются следующей строкой после последней на данный момент в кумулятивной таблице
* * Все. В данном виде должно работать как и при первом заполнении таблици так и при еженедельном суммировании, в том числе и при изменениях в составе персонала.
* * Теперь про защиту от дурака. Думаю будет не очень весело, если где-нить в конце года случайно вместо новой недели приплюсуешь старую. На этот случай можно вести в отдельно листе список файлов, уже внесенных в таблицу. Тогда при попытке добавить очередной отчет макром еще должен проверять наличие имени файла в данном списке с выдачей предупреждения в случае нахождения соответствия. Если же все-же надо повторно приплюсовать некий файл (например после ручных правок или дополнительного макроса, делающего откат на для конкретного недельного отчета) достаточно просто удалить его имя из списка.
* * * Это довольно подробный алгоритм. Непосредственно с кодом не могу щас помочь - зашиваюсь, но любой кто хоть немного знаком с VBA и/или умеет пользоваться хелпом по нему может накидать его тебе...

Vadikan
27-09-2004, 22:09
Greyman
Спасибо за ответ. Теперь я отчетливо вижу, что путь к решению задачи определяется уровнем знаний исполнителя ;-) К сожалению, я VB не знаю совсем, и даже если кто-то и напишет мне код, то случись необходимость внести изменения, я окажусь абсолютно неспособен что-либо сделать. Если к тому времени VB не выучу...
Допустим, 3.1 и 3.2 я наверное сделать смогу, порывшись в сети и в справке. 3.3) Макрос берет из первой строчки индекс человека и ищет его куммулятивной таблице.В исходном отчете вместо индексов фамилии, которые мне "неизвестны". Все остальные пункты я все равно сам реализовать не смогу, хотя защита от дурака - хорошая и нужная идея.

Параллельно, я все равно продолжаю думать над своим вариантом, т.к. ... см. второе предложение данного поста :)
Лист1: Список работников в одном столбце, и их номера во втором, сортировка не применяется или применяется по фамилиям в алфавитном порядке. Таким образом второй столбец выглядит как первый столбец исходного файла. Больше в листе ничего нет.
Лист2: Кумулятивная таблица. Опять же, в первом столбце фамилии заменены цифрами, применена сортировка по первому столбцу по возрастанию. Количество строк в таблице превышает количество работников, скажем, на 5.
Лист3 - Лист54: еженедельные отчеты. Изначально они пустые.

Алгоритм действий следующий.
1. Менеджер снимает отчет в своей программе, экспортирует в Excel.
2. Открывает экспортированый файл, выделяет все данные в листе (область выделения больше области данных, с запасом).
3. Данные копируются и вставляются в Лист3, к которому применяется макрос, проводящий все нужные вычисления.
4. Далее менеджер открывает Лист1, копирует список работников, заменяет им список фамилий в Лист3, и сортирует по этому столбцу по возрастанию.
5. Остается только переименовать Лист3 (например, дата начала отчетной недели). Больше Лист3 менеджер не трогает. На следующую неделю тоже самое проделывается с Лист4 и т.д.

Теперь предположим, что на 26й неделе добавился работник. Ему назначается самый большой номер (например, 37) В принципе, так сейчас и делается. В Лист 1 добавляется фамилия нового работника и его номер, и применяется сортировка по фамилиям. В Лист2 (кумул. таблица) просто добавляется новый номер в конце списка номеров работников. Таким образом, все предыдущие листы, не содержащие нового работника будут иметь нулевые значения в соотв. строке, а все новые листы будут содержать данные производительности нового работника. Эти данные будут корректно просуммированы и отражены в кумулятивной таблице.

Защиты от дурака в моем варианте нет. Разве что остается полагаться на здравый смысл менеджера. В принципе, все что от нее требуется это не вставить данные из нового отчета в уже использованный лист. Это не сложно, т.к. осмысленные имена даются листам по мере их заполнения. Если же придет новый работник, то я могу вручную сделать изменения, описанные в предыдущем параграфе. Если же меня не будет рядом, то... значит я там не работаю, и мне по барабану, что происходит с отчетом ;-))

ZloiJoker
29-09-2004, 12:54
Есть формула =ЕСЛИ()
если что то что то ок например синим
а если не ок то красным к примеру.. как это сделать ?

Greyman
29-09-2004, 13:42
ZloiJoker
Никак. Формулы влияют на значение ячейки, а не на ее формат. Для условного управления форматами тебе нужно обратиться к макросам, так что VBA - вот твоя дорога...

SandroK
30-09-2004, 10:04
ZloiJoker
Greyman прав, с Если не выйдет. Но можно использовать Conditional Formatting, можно установить до 3-х условий.

Lilu qwer
06-10-2004, 10:08
Проблема вот в чем...
Нужно запретить переход на следующий лист пока на текущем листе не стеланны некоторые действия.
Есть идея ... при переходе на другой лист выскакивало окошко с сообщением, что лист не доступен пока не законченна работа на предыдущем

hasherfrog
06-10-2004, 11:09
Lilu qwer
Здравствуйте, приветствуем на форуме.
Ваш вопрос теоретически разрешим, но возникает также несколько недосказанностей.
1. А если пользователь отключит макросы?
2. Может ли пользователь позднее вернуться к предыдущим листам?

Исправлено: hasherfrog, 11:10 6-10-2004

Greyman
06-10-2004, 17:29
Lilu qwer
ИМХО, технически это вполне реально. Многие вопросы, в том числе №1 от hasherfrog решается редактированием шаблонов из каталога автозагрузки. Со 2-ым его вопросом так сходу сказать не могу, т.к. здесь уже надо разбираться с технической точки зрения, т.е. непосредственно кодирование.
* * Думаю этой теме вообще место в Программировании, но пока пусть повисит, вдруг и другие способы есть. Ну а если нет и пойдет обсуждение реализации на VBA - так однозначно перенесу...

OSAMA
25-10-2004, 02:24
Скачал прайс фирмы, в котором все заказы построены на макросах, причем на сайте фирмы присутствует предупреждение, чтобы ставили низкий уровень безопасности, а иначе работать ни хрена не будет. Открываю файл, ставлю низкий уровень безопасности, но макросы все равно не работают. В чем дело???

DeJaVu
27-10-2004, 10:54
Вот такая ситуация:

В excel-е были использованны макросы, всё работало (Офис 97), после переустановки на Офис 2002 (XP) макросы не активны (т.е. не работаю)

с чем это может быть связанно?
и как это устранить?

Заранее благодарю!

[mzd]
27-10-2004, 11:22
А разрешено использование макросов в "Безопасности" ?




© OSzone.net 2001-2012